HepLean Documentation

Mathlib.Algebra.CharZero.Defs

Characteristic zero #

A ring R is called of characteristic zero if every natural number n is non-zero when considered as an element of R. Since this definition doesn't mention the multiplicative structure of R except for the existence of 1 in this file characteristic zero is defined for additive monoids with 1.

Main definition #

CharZero is the typeclass of an additive monoid with one such that the natural homomorphism from the natural numbers into it is injective.

TODO #

class CharZero (R : Type u_1) [AddMonoidWithOne R] :

Typeclass for monoids with characteristic zero. (This is usually stated on fields but it makes sense for any additive monoid with 1.)

Warning: for a semiring R, CharZero R and CharP R 0 need not coincide.

  • CharZero R requires an injection ℕ ↪ R;
  • CharP R 0 asks that only 0 : ℕ maps to 0 : R under the map ℕ → R. For instance, endowing {0, 1} with addition given by max (i.e. 1 is absorbing), shows that CharZero {0, 1} does not hold and yet CharP {0, 1} 0 does. This example is formalized in Counterexamples/CharPZeroNeCharZero.lean.
  • cast_injective : Function.Injective Nat.cast

    An additive monoid with one has characteristic zero if the canonical map ℕ → R is injective.

Instances
    theorem charZero_of_inj_zero {R : Type u_1} [AddGroupWithOne R] (H : ∀ (n : ), n = 0n = 0) :
    @[simp]
    theorem Nat.cast_inj {R : Type u_1} [AddMonoidWithOne R] [CharZero R] {m n : } :
    m = n m = n
    @[simp]
    theorem Nat.cast_eq_zero {R : Type u_1} [AddMonoidWithOne R] [CharZero R] {n : } :
    n = 0 n = 0
    theorem Nat.cast_ne_zero {R : Type u_1} [AddMonoidWithOne R] [CharZero R] {n : } :
    n 0 n 0
    theorem Nat.cast_add_one_ne_zero {R : Type u_1} [AddMonoidWithOne R] [CharZero R] (n : ) :
    n + 1 0
    @[simp]
    theorem Nat.cast_eq_one {R : Type u_1} [AddMonoidWithOne R] [CharZero R] {n : } :
    n = 1 n = 1
    theorem Nat.cast_ne_one {R : Type u_1} [AddMonoidWithOne R] [CharZero R] {n : } :
    n 1 n 1
    @[instance 100]
    instance Nat.AtLeastTwo.toNeZero (n : ) [n.AtLeastTwo] :
    Equations
    • =
    @[simp]
    theorem OfNat.ofNat_ne_zero {R : Type u_1} [AddMonoidWithOne R] [CharZero R] (n : ) [n.AtLeastTwo] :
    @[simp]
    theorem OfNat.zero_ne_ofNat {R : Type u_1} [AddMonoidWithOne R] [CharZero R] (n : ) [n.AtLeastTwo] :
    @[simp]
    theorem OfNat.ofNat_ne_one {R : Type u_1} [AddMonoidWithOne R] [CharZero R] (n : ) [n.AtLeastTwo] :
    @[simp]
    theorem OfNat.one_ne_ofNat {R : Type u_1} [AddMonoidWithOne R] [CharZero R] (n : ) [n.AtLeastTwo] :
    @[simp]
    theorem OfNat.ofNat_eq_ofNat {R : Type u_1} [AddMonoidWithOne R] [CharZero R] {m n : } [m.AtLeastTwo] [n.AtLeastTwo] :
    instance NeZero.charZero {M : Type u_2} {n : } [NeZero n] [AddMonoidWithOne M] [CharZero M] :
    NeZero n
    Equations
    • =
    Equations
    • =
    instance NeZero.charZero_ofNat {M : Type u_2} {n : } [n.AtLeastTwo] [AddMonoidWithOne M] [CharZero M] :
    Equations
    • =