ring_nf
tactic #
A tactic which uses ring
to rewrite expressions. This can be used non-terminally to normalize
ring expressions in the goal such as ⊢ P (x + x + x)
~> ⊢ P (x * 3)
, as well as being able to
prove some equations that ring
cannot because they involve ring reasoning inside a subterm,
such as sin (x + y) + sin (y + x) = 2 * sin (x + y)
.
True if this represents an atomic expression.
Equations
- x.isAtom = match x with | Mathlib.Tactic.Ring.ExBase.atom id => true | x => false
Instances For
True if this represents an atomic expression.
Equations
- One or more equations did not get rendered due to their size.
Instances For
True if this represents an atomic expression.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The normalization style for ring_nf
.
- SOP: Mathlib.Tactic.RingNF.RingMode
Sum-of-products form, like
x + x * y * 2 + z ^ 2
. - raw: Mathlib.Tactic.RingNF.RingMode
Raw form: the representation
ring
uses internally.
Instances For
Equations
Configuration for ring_nf
.
the reducibility setting to use when comparing atoms for defeq
- recursive : Bool
if true, atoms inside ring expressions will be reduced recursively
The normalization style.
Instances For
Equations
- Mathlib.Tactic.RingNF.instInhabitedConfig = { default := { red := default, recursive := default, mode := default } }
Equations
- Mathlib.Tactic.RingNF.instReprConfig = { reprPrec := Mathlib.Tactic.RingNF.reprConfig✝ }
Function elaborating RingNF.Config
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The read-only state of the RingNF
monad.
- ctx : Lean.Meta.Simp.Context
A basically empty simp context, passed to the
simp
traversal inRingNF.rewrite
. A cleanup routine, which simplifies normalized polynomials to a more human-friendly format.
Instances For
The monad for RingNF
contains, in addition to the AtomM
state,
a simp context for the main traversal and a simp function (which has another simp context)
to simplify normalized polynomials.
Instances For
A tactic in the RingNF.M
monad which will simplify expression parent
to a normal form.
root
: true if this is a direct call to the function.RingNF.M.run
sets this tofalse
in recursive mode.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Runs a tactic in the RingNF.M
monad, given initial data:
s
: a reference to the mutable state ofring
, for persisting across calls. This ensures that atom ordering is used consistently.cfg
: the configuration optionsx
: the tactic to run
Equations
- One or more equations did not get rendered due to their size.
Instances For
The recursive context.
The atom evaluator calls either RingNF.rewrite
recursively,
or nothing depending on cfg.recursive
.
Use ring_nf
to rewrite the main goal.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Use ring_nf
to rewrite hypothesis h
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Simplification tactic for expressions in the language of commutative (semi)rings, which rewrites all ring expressions into a normal form.
ring_nf!
will use a more aggressive reducibility setting to identify atoms.ring_nf (config := cfg)
allows for additional configuration:ring_nf
works as both a tactic and a conv tactic. In tactic mode,ring_nf at h
can be used to rewrite in a hypothesis.
This can be used non-terminally to normalize ring expressions in the goal such as
⊢ P (x + x + x)
~> ⊢ P (x * 3)
, as well as being able to prove some equations that
ring
cannot because they involve ring reasoning inside a subterm, such as
sin (x + y) + sin (y + x) = 2 * sin (x + y)
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Simplification tactic for expressions in the language of commutative (semi)rings, which rewrites all ring expressions into a normal form.
ring_nf!
will use a more aggressive reducibility setting to identify atoms.ring_nf (config := cfg)
allows for additional configuration:ring_nf
works as both a tactic and a conv tactic. In tactic mode,ring_nf at h
can be used to rewrite in a hypothesis.
This can be used non-terminally to normalize ring expressions in the goal such as
⊢ P (x + x + x)
~> ⊢ P (x * 3)
, as well as being able to prove some equations that
ring
cannot because they involve ring reasoning inside a subterm, such as
sin (x + y) + sin (y + x) = 2 * sin (x + y)
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Simplification tactic for expressions in the language of commutative (semi)rings, which rewrites all ring expressions into a normal form.
ring_nf!
will use a more aggressive reducibility setting to identify atoms.ring_nf (config := cfg)
allows for additional configuration:ring_nf
works as both a tactic and a conv tactic. In tactic mode,ring_nf at h
can be used to rewrite in a hypothesis.
This can be used non-terminally to normalize ring expressions in the goal such as
⊢ P (x + x + x)
~> ⊢ P (x * 3)
, as well as being able to prove some equations that
ring
cannot because they involve ring reasoning inside a subterm, such as
sin (x + y) + sin (y + x) = 2 * sin (x + y)
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Tactic for solving equations of commutative (semi)rings, allowing variables in the exponent.
- This version of
ring1
usesring_nf
to simplify in atoms. - The variant
ring1_nf!
will use a more aggressive reducibility setting to determine equality of atoms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Tactic for solving equations of commutative (semi)rings, allowing variables in the exponent.
- This version of
ring1
usesring_nf
to simplify in atoms. - The variant
ring1_nf!
will use a more aggressive reducibility setting to determine equality of atoms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Elaborator for the ring_nf
tactic.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Simplification tactic for expressions in the language of commutative (semi)rings, which rewrites all ring expressions into a normal form.
ring_nf!
will use a more aggressive reducibility setting to identify atoms.ring_nf (config := cfg)
allows for additional configuration:ring_nf
works as both a tactic and a conv tactic. In tactic mode,ring_nf at h
can be used to rewrite in a hypothesis.
This can be used non-terminally to normalize ring expressions in the goal such as
⊢ P (x + x + x)
~> ⊢ P (x * 3)
, as well as being able to prove some equations that
ring
cannot because they involve ring reasoning inside a subterm, such as
sin (x + y) + sin (y + x) = 2 * sin (x + y)
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Tactic for evaluating expressions in commutative (semi)rings, allowing for variables in the
exponent. If the goal is not appropriate for ring
(e.g. not an equality) ring_nf
will be
suggested.
ring!
will use a more aggressive reducibility setting to determine equality of atoms.ring1
fails if the target is not an equality.
For example:
example (n : ℕ) (m : ℤ) : 2^(n+1) * m = 2 * 2^n * m := by ring
example (a b : ℤ) (n : ℕ) : (a + b)^(n + 2) = (a^2 + b^2 + a * b + b * a) * (a + b)^n := by ring
example (x y : ℕ) : x + id y = y + id x := by ring!
example (x : ℕ) (h : x * 2 > 5): x + x > 5 := by ring; assumption -- suggests ring_nf
Equations
- Mathlib.Tactic.RingNF.ring = Lean.ParserDescr.node `Mathlib.Tactic.RingNF.ring 1024 (Lean.ParserDescr.nonReservedSymbol "ring" false)
Instances For
Tactic for evaluating expressions in commutative (semi)rings, allowing for variables in the
exponent. If the goal is not appropriate for ring
(e.g. not an equality) ring_nf
will be
suggested.
ring!
will use a more aggressive reducibility setting to determine equality of atoms.ring1
fails if the target is not an equality.
For example:
example (n : ℕ) (m : ℤ) : 2^(n+1) * m = 2 * 2^n * m := by ring
example (a b : ℤ) (n : ℕ) : (a + b)^(n + 2) = (a^2 + b^2 + a * b + b * a) * (a + b)^n := by ring
example (x y : ℕ) : x + id y = y + id x := by ring!
example (x : ℕ) (h : x * 2 > 5): x + x > 5 := by ring; assumption -- suggests ring_nf
Equations
- Mathlib.Tactic.RingNF.tacticRing! = Lean.ParserDescr.node `Mathlib.Tactic.RingNF.tacticRing! 1024 (Lean.ParserDescr.nonReservedSymbol "ring!" false)
Instances For
The tactic ring
evaluates expressions in commutative (semi)rings.
This is the conv tactic version, which rewrites a target which is a ring equality to True
.
See also the ring
tactic.
Equations
- Mathlib.Tactic.RingNF.ringConv = Lean.ParserDescr.node `Mathlib.Tactic.RingNF.ringConv 1024 (Lean.ParserDescr.nonReservedSymbol "ring" false)
Instances For
The tactic ring
evaluates expressions in commutative (semi)rings.
This is the conv tactic version, which rewrites a target which is a ring equality to True
.
See also the ring
tactic.
Equations
- Mathlib.Tactic.RingNF.convRing! = Lean.ParserDescr.node `Mathlib.Tactic.RingNF.convRing! 1024 (Lean.ParserDescr.nonReservedSymbol "ring!" false)