Documentation

Mathlib.Tactic.NormNum.Basic

norm_num basic plugins #

This file adds norm_num plugins for

See other files in this directory for many more plugins.

Constructors and constants #

The norm_num extension which identifies the expression Zero.zero, returning 0.

Equations
  • One or more equations did not get rendered due to their size.

The norm_num extension which identifies the expression One.one, returning 1.

Equations
  • One or more equations did not get rendered due to their size.
theorem Mathlib.Meta.NormNum.isNat_ofNat (α : Type u) [AddMonoidWithOne α] {a : α} {n : } (h : n = a) :
IsNat a n

The norm_num extension which identifies an expression OfNat.ofNat n, returning n.

The norm_num extension which identifies the constructor application Int.ofNat n such that norm_num successfully recognizes n, returning n.

Equations
  • One or more equations did not get rendered due to their size.

The norm_num extension which identifies the expression Int.natAbs n such that norm_num successfully recognizes n.

Equations
  • One or more equations did not get rendered due to their size.

Casts #

theorem Mathlib.Meta.NormNum.isNat_natCast {R : Type u_1} [AddMonoidWithOne R] (n m : ) :
IsNat n mIsNat (↑n) m

The norm_num extension which identifies an expression Nat.cast n, returning n.

Equations
  • One or more equations did not get rendered due to their size.
theorem Mathlib.Meta.NormNum.isNat_intCast {R : Type u_1} [Ring R] (n : ) (m : ) :
IsNat n mIsNat (↑n) m
theorem Mathlib.Meta.NormNum.isintCast {R : Type u_1} [Ring R] (n m : ) :
IsInt n mIsInt (↑n) m

The norm_num extension which identifies an expression Int.cast n, returning n.

Equations
  • One or more equations did not get rendered due to their size.

Arithmetic #

theorem Mathlib.Meta.NormNum.isNat_add {α : Type u_1} [AddMonoidWithOne α] {f : ααα} {a b : α} {a' b' c : } :
f = HAdd.hAddIsNat a a'IsNat b b'a'.add b' = cIsNat (f a b) c
theorem Mathlib.Meta.NormNum.isInt_add {α : Type u_1} [Ring α] {f : ααα} {a b : α} {a' b' c : } :
f = HAdd.hAddIsInt a a'IsInt b b'a'.add b' = cIsInt (f a b) c
def Mathlib.Meta.NormNum.invertibleOfMul {α : Type u_1} [Semiring α] (k : ) (b a : α) [Invertible a] :
a = k * bInvertible b

If b divides a and a is invertible, then b is invertible.

Equations
def Mathlib.Meta.NormNum.invertibleOfMul' {α : Type u_1} [Semiring α] {a k b : } [Invertible a] (h : a = k * b) :

If b divides a and a is invertible, then b is invertible.

Equations
theorem Mathlib.Meta.NormNum.isRat_add {α : Type u_1} [Ring α] {f : ααα} {a b : α} {na nb nc : } {da db dc k : } :
f = HAdd.hAddIsRat a na daIsRat b nb db(na.mul db).add (nb.mul da) = (↑k).mul ncda.mul db = k.mul dcIsRat (f a b) nc dc

Consider an Option as an object in the MetaM monad, by throwing an error on none.

Equations

The norm_num extension which identifies expressions of the form a + b, such that norm_num successfully recognises both a and b.

Equations
  • One or more equations did not get rendered due to their size.
def Mathlib.Meta.NormNum.evalAdd.core {u : Lean.Level} {α : Q(Type u)} (e : Q(«$α»)) (f : Q(«$α»«$α»«$α»)) (a b : Q(«$α»)) (ra : Result a) (rb : Result b) :

Main part of evalAdd.

def Mathlib.Meta.NormNum.evalAdd.core.intArm {u : Lean.Level} {α : Q(Type u)} (e : Q(«$α»)) (f : Q(«$α»«$α»«$α»)) (a b : Q(«$α»)) (ra : Result a) (rb : Result b) ( : Q(Ring «$α»)) :
Equations
  • One or more equations did not get rendered due to their size.
def Mathlib.Meta.NormNum.evalAdd.core.ratArm {u : Lean.Level} {α : Q(Type u)} (e : Q(«$α»)) (f : Q(«$α»«$α»«$α»)) (a b : Q(«$α»)) (ra : Result a) (rb : Result b) ( : Q(DivisionRing «$α»)) :
Equations
  • One or more equations did not get rendered due to their size.
theorem Mathlib.Meta.NormNum.isInt_neg {α : Type u_1} [Ring α] {f : αα} {a : α} {a' b : } :
f = Neg.negIsInt a a'a'.neg = bIsInt (-a) b
theorem Mathlib.Meta.NormNum.isRat_neg {α : Type u_1} [Ring α] {f : αα} {a : α} {n n' : } {d : } :
f = Neg.negIsRat a n dn.neg = n'IsRat (-a) n' d

The norm_num extension which identifies expressions of the form -a, such that norm_num successfully recognises a.

Equations
  • One or more equations did not get rendered due to their size.
def Mathlib.Meta.NormNum.evalNeg.core {u : Lean.Level} {α : Q(Type u)} (e : Q(«$α»)) (f : Q(«$α»«$α»)) (a : Q(«$α»)) (ra : Result a) ( : Q(Ring «$α»)) :

Main part of evalNeg.

Equations
theorem Mathlib.Meta.NormNum.isInt_sub {α : Type u_1} [Ring α] {f : ααα} {a b : α} {a' b' c : } :
f = HSub.hSubIsInt a a'IsInt b b'a'.sub b' = cIsInt (f a b) c
theorem Mathlib.Meta.NormNum.isRat_sub {α : Type u_1} [Ring α] {f : ααα} {a b : α} {na nb nc : } {da db dc k : } (hf : f = HSub.hSub) (ra : IsRat a na da) (rb : IsRat b nb db) (h₁ : (na.mul db).sub (nb.mul da) = (↑k).mul nc) (h₂ : da.mul db = k.mul dc) :
IsRat (f a b) nc dc

The norm_num extension which identifies expressions of the form a - b in a ring, such that norm_num successfully recognises both a and b.

Equations
  • One or more equations did not get rendered due to their size.
def Mathlib.Meta.NormNum.evalSub.core {u : Lean.Level} {α : Q(Type u)} (e : Q(«$α»)) (f : Q(«$α»«$α»«$α»)) (a b : Q(«$α»)) ( : Q(Ring «$α»)) (ra : Result a) (rb : Result b) :

Main part of evalAdd.

theorem Mathlib.Meta.NormNum.isNat_mul {α : Type u_1} [Semiring α] {f : ααα} {a b : α} {a' b' c : } :
f = HMul.hMulIsNat a a'IsNat b b'a'.mul b' = cIsNat (a * b) c
theorem Mathlib.Meta.NormNum.isInt_mul {α : Type u_1} [Ring α] {f : ααα} {a b : α} {a' b' c : } :
f = HMul.hMulIsInt a a'IsInt b b'a'.mul b' = cIsInt (a * b) c
theorem Mathlib.Meta.NormNum.isRat_mul {α : Type u_1} [Ring α] {f : ααα} {a b : α} {na nb nc : } {da db dc k : } :
f = HMul.hMulIsRat a na daIsRat b nb dbna.mul nb = (↑k).mul ncda.mul db = k.mul dcIsRat (f a b) nc dc

The norm_num extension which identifies expressions of the form a * b, such that norm_num successfully recognises both a and b.

Equations
  • One or more equations did not get rendered due to their size.
def Mathlib.Meta.NormNum.evalMul.core {u : Lean.Level} {α : Q(Type u)} (e : Q(«$α»)) (f : Q(«$α»«$α»«$α»)) (a b : Q(«$α»)) ( : Q(Semiring «$α»)) (ra : Result a) (rb : Result b) :

Main part of evalMul.

def Mathlib.Meta.NormNum.evalMul.core.intArm {u : Lean.Level} {α : Q(Type u)} (e : Q(«$α»)) (f : Q(«$α»«$α»«$α»)) (a b : Q(«$α»)) ( : Q(Semiring «$α»)) (ra : Result a) (rb : Result b) ( : Q(Ring «$α»)) :
Equations
  • One or more equations did not get rendered due to their size.
def Mathlib.Meta.NormNum.evalMul.core.ratArm {u : Lean.Level} {α : Q(Type u)} (e : Q(«$α»)) (f : Q(«$α»«$α»«$α»)) (a b : Q(«$α»)) ( : Q(Semiring «$α»)) (ra : Result a) (rb : Result b) ( : Q(DivisionRing «$α»)) :
Equations
  • One or more equations did not get rendered due to their size.
theorem Mathlib.Meta.NormNum.isRat_div {α : Type u} [DivisionRing α] {a b : α} {cn : } {cd : } :
IsRat (a * b⁻¹) cn cdIsRat (a / b) cn cd

Helper function to synthesize a typed DivisionRing α expression.

Equations

The norm_num extension which identifies expressions of the form a / b, such that norm_num successfully recognises both a and b.

Equations
  • One or more equations did not get rendered due to their size.

Logic #

The norm_num extension which identifies True.

Equations
  • One or more equations did not get rendered due to their size.

The norm_num extension which identifies False.

Equations
  • One or more equations did not get rendered due to their size.

The norm_num extension which identifies expressions of the form ¬a, such that norm_num successfully recognises a.

Equations
  • One or more equations did not get rendered due to their size.

(In)equalities #

theorem Mathlib.Meta.NormNum.isNat_eq_true {α : Type u} [AddMonoidWithOne α] {a b : α} {c : } :
IsNat a cIsNat b ca = b
theorem Mathlib.Meta.NormNum.isInt_eq_true {α : Type u} [Ring α] {a b : α} {z : } :
IsInt a zIsInt b za = b
theorem Mathlib.Meta.NormNum.isRat_eq_true {α : Type u} [Ring α] {a b : α} {n : } {d : } :
IsRat a n dIsRat b n da = b
theorem Mathlib.Meta.NormNum.eq_of_true {a b : Prop} (ha : a) (hb : b) :
a = b
theorem Mathlib.Meta.NormNum.ne_of_false_of_true {a b : Prop} (ha : ¬a) (hb : b) :
a b
theorem Mathlib.Meta.NormNum.ne_of_true_of_false {a b : Prop} (ha : a) (hb : ¬b) :
a b
theorem Mathlib.Meta.NormNum.eq_of_false {a b : Prop} (ha : ¬a) (hb : ¬b) :
a = b

Nat operations #

theorem Mathlib.Meta.NormNum.isNat_natSucc {a a' c : } :
IsNat a a'a'.succ = cIsNat a.succ c

The norm_num extension which identifies expressions of the form Nat.succ a, such that norm_num successfully recognises a.

Equations
  • One or more equations did not get rendered due to their size.
theorem Mathlib.Meta.NormNum.isNat_natSub {a b a' b' c : } :
IsNat a a'IsNat b b'a'.sub b' = cIsNat (a - b) c

The norm_num extension which identifies expressions of the form Nat.sub a b, such that norm_num successfully recognises both a and b.

Equations
  • One or more equations did not get rendered due to their size.
theorem Mathlib.Meta.NormNum.isNat_natMod {a b a' b' c : } :
IsNat a a'IsNat b b'a'.mod b' = cIsNat (a % b) c

The norm_num extension which identifies expressions of the form Nat.mod a b, such that norm_num successfully recognises both a and b.

Equations
  • One or more equations did not get rendered due to their size.
theorem Mathlib.Meta.NormNum.isNat_natDiv {a b a' b' c : } :
IsNat a a'IsNat b b'a'.div b' = cIsNat (a / b) c

The norm_num extension which identifies expressions of the form Nat.div a b, such that norm_num successfully recognises both a and b.

Equations
  • One or more equations did not get rendered due to their size.
theorem Mathlib.Meta.NormNum.isNat_dvd_true {a b a' b' : } :
IsNat a a'IsNat b b'b'.mod a' = 0a b
theorem Mathlib.Meta.NormNum.isNat_dvd_false {a b a' b' c : } :
IsNat a a'IsNat b b'b'.mod a' = c.succ¬a b

The norm_num extension which identifies expressions of the form (a : ℕ) | b, such that norm_num successfully recognises both a and b.

Equations
  • One or more equations did not get rendered due to their size.