Module docstring
{"# NeZero typeclass
We create a typeclass NeZero n which carries around the fact that (n : R) ≠ 0.
Main declarations
NeZero:n ≠ 0as a typeclass. "}
{"# NeZero typeclass
We create a typeclass NeZero n which carries around the fact that (n : R) ≠ 0.
NeZero: n ≠ 0 as a typeclass.
"}NeZero
structure
(n : R)
NeZero.ne
theorem
(n : R) [h : NeZero n] : n ≠ 0
NeZero.ne'
theorem
(n : R) [h : NeZero n] : 0 ≠ n
theorem NeZero.ne' (n : R) [h : NeZero n] : 0 ≠ n :=
h.out.symm
neZero_iff
theorem
{n : R} : NeZero n ↔ n ≠ 0
theorem neZero_iff {n : R} : NeZeroNeZero n ↔ n ≠ 0 :=
⟨fun h ↦ h.out, NeZero.mk⟩
neZero_zero_iff_false
theorem
{α : Type _} [Zero α] : NeZero (0 : α) ↔ False
@[simp] theorem neZero_zero_iff_false {α : Type _} [Zero α] : NeZeroNeZero (0 : α) ↔ False :=
⟨fun _ ↦ NeZero.ne (0 : α) rfl, fun h ↦ h.elim⟩
instNeZeroNatIte
instance
{p : Prop} [Decidable p] {n m : Nat} [NeZero n] [NeZero m] : NeZero (if p then n else m)
instance {p : Prop} [Decidable p] {n m : Nat} [NeZero n] [NeZero m] :
NeZero (if p then n else m) := by
split <;> infer_instance
instNeZeroNatHAdd
instance
{n m : Nat} [h : NeZero n] : NeZero (n + m)
instNeZeroNatHAdd_1
instance
{n m : Nat} [h : NeZero m] : NeZero (n + m)
instNeZeroNatHMul
instance
{n m : Nat} [hn : NeZero n] [hm : NeZero m] : NeZero (n * m)