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
- Mathlib.Tactic.Ring.ExBase.isAtom x = match x with | Mathlib.Tactic.Ring.ExBase.atom id => true | x => false
Instances For
True if this represents an atomic expression.
Instances For
True if this represents an atomic expression.
Instances For
- 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.
The normalization style for ring_nf
.
Instances For
Equations
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.
Configuration for ring_nf
.
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
- 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.
The read-only state of the RingNF
monad.
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.
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.
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.
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.
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.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!
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.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!
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)