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
ringuses 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
simptraversal 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.runsets this tofalsein 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_nfworks as both a tactic and a conv tactic. In tactic mode,ring_nf at hcan be used to rewrite in a hypothesis.
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_nfworks as both a tactic and a conv tactic. In tactic mode,ring_nf at hcan be used to rewrite in a hypothesis.
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_nfworks as both a tactic and a conv tactic. In tactic mode,ring_nf at hcan be used to rewrite in a hypothesis.
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
ring1usesring_nfto 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
ring1usesring_nfto 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_nfworks as both a tactic and a conv tactic. In tactic mode,ring_nf at hcan be used to rewrite in a hypothesis.
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.
ring!will use a more aggressive reducibility setting to determine equality of atoms.ring1fails 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!
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.
ring!will use a more aggressive reducibility setting to determine equality of atoms.ring1fails 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!
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)