The Result
type for norm_num
#
We set up predicates IsNat
, IsInt
, and IsRat
,
stating that an element of a ring is equal to the "normal form" of a natural number, integer,
or rational number coerced into that ring.
We then define Result e
, which contains a proof that a typed expression e : Q($α)
is equal to the coercion of an explicit natural number, integer, or rational number,
or is either true
or false
.
A shortcut (non)instance for AddMonoidWithOne ℕ
to shrink generated proofs.
Equations
- Mathlib.Meta.NormNum.instAddMonoidWithOneNat = inferInstance
Instances For
A shortcut (non)instance for AddMonoidWithOne α
from Ring α
to shrink generated proofs.
Equations
- Mathlib.Meta.NormNum.instAddMonoidWithOne = inferInstance
Instances For
Represent an integer as a "raw" typed expression.
This uses .lit (.natVal n)
internally to represent a natural number,
rather than the preferred OfNat.ofNat
form.
We use this internally to avoid unnecessary typeclass searches.
This function is the inverse of Expr.intLit!
.
Instances For
Represent an integer as a "raw" typed expression.
This .lit (.natVal n)
internally to represent a natural number,
rather than the preferred OfNat.ofNat
form.
We use this internally to avoid unnecessary typeclass searches.
Instances For
- out : a = ↑n
The element is equal to the coercion of the natural number.
Assert that an element of a semiring is equal to the coercion of some natural number.
Instances For
A "raw nat cast" is an expression of the form (Nat.rawCast lit : α)
where lit
is a raw
natural number literal. These expressions are used by tactics like ring
to decrease the number
of typeclass arguments required in each use of a number literal at type α
.
Equations
- Nat.rawCast n = ↑n
Instances For
A "raw int cast" is an expression of the form:
(Nat.rawCast lit : α)
wherelit
is a raw natural number literal(Int.rawCast (Int.negOfNat lit) : α)
wherelit
is a nonzero raw natural number literal
(That is, we only actually use this function for negative integers.) This representation is used by
tactics like ring
to decrease the number of typeclass arguments required in each use of a number
literal at type α
.
Equations
- Int.rawCast n = ↑n
Instances For
- mk: ∀ {α : Type u_1} [inst : Ring α] {a : α} {num : ℤ} {denom : ℕ} (inv : Invertible ↑denom), a = ↑num * ⅟↑denom → Mathlib.Meta.NormNum.IsRat a num denom
Assert that an element of a ring is equal to num / denom
(and denom
is invertible so that this makes sense).
We will usually also have num
and denom
coprime,
although this is not part of the definition.
Instances For
A "raw rat cast" is an expression of the form:
(Nat.rawCast lit : α)
wherelit
is a raw natural number literal(Int.rawCast (Int.negOfNat lit) : α)
wherelit
is a nonzero raw natural number literal(Rat.rawCast n d : α)
wheren
is a raw int cast,d
is a raw nat cast, andd
is not 1 or 0.
This representation is used by tactics like ring
to decrease the number of typeclass arguments
required in each use of a number literal at type α
.
Equations
- Rat.rawCast n d = ↑n / ↑d
Instances For
- isBool: Bool → Lean.Expr → Mathlib.Meta.NormNum.Result'
Untyped version of
Result.isBool
. - isNat: Lean.Expr → Lean.Expr → Lean.Expr → Mathlib.Meta.NormNum.Result'
Untyped version of
Result.isNat
. - isNegNat: Lean.Expr → Lean.Expr → Lean.Expr → Mathlib.Meta.NormNum.Result'
Untyped version of
Result.isNegNat
. - isRat: Lean.Expr → ℚ → Lean.Expr → Lean.Expr → Lean.Expr → Mathlib.Meta.NormNum.Result'
Untyped version of
Result.isRat
.
The result of norm_num
running on an expression x
of type α
.
Untyped version of Result
.
Instances For
Equations
- Mathlib.Meta.NormNum.instInhabitedResult' = { default := Mathlib.Meta.NormNum.Result'.isBool default default }
Equations
- Mathlib.Meta.NormNum.instInhabitedResult = inferInstanceAs (Inhabited Mathlib.Meta.NormNum.Result')
Equations
- One or more equations did not get rendered due to their size.
Returns the rational number that is the result of norm_num
evaluation.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Returns the rational number that is the result of norm_num
evaluation, along with a proof
that the denominator is nonzero in the isRat
case.
Instances For
Given Mathlib.Meta.NormNum.Result.isBool p b
, this is the type of p
.
Note that BoolResult p b
is definitionally equal to Expr
, and if you write match b with ...
,
then in the true
branch BoolResult p true
is reducibly equal to Q($p)
and
in the false
branch it is reducibly equal to Q(¬ $p)
.
Instances For
Obtain a Result
from a BoolResult
.