blob: 00a943e3b93474a9da584e51442470c791b9431c [file] [edit]
class Semigroup (α : Type u) extends Mul α where
mul_assoc (a b c : α) : a * b * c = a * (b * c)
class CommSemigroup (α : Type u) extends Semigroup α where
mul_comm (a b : α) : a * b = b * a
class One (α : Type u) where
one : α
instance [One α] : OfNat α (nat_lit 1) where
ofNat := One.one
class Monoid (α : Type u) extends Semigroup α, One α where
one_mul (a : α) : 1 * a = a
mul_one (a : α) : a * 1 = a
class CommMonoid (α : Type u) extends Monoid α, CommSemigroup α
set_option pp.all true
#check CommMonoid.mk
#print CommMonoid.toCommSemigroup
class Inv (α : Type u) where
inv : α → α
postfix:100 "⁻¹" => Inv.inv
class Group (α : Type u) extends Monoid α, Inv α where
mul_left_inv (a : α) : a⁻¹ * a = 1
class CommGroup (α : Type u) extends Group α, CommMonoid α
#check CommGroup.mk
#print CommGroup.toCommMonoid
class AddSemigroup (α : Type u) extends Add α where
add_assoc (a b c : α) : a + b + c = a + (b + c)
class AddCommSemigroup (α : Type u) extends AddSemigroup α where
add_comm (a b : α) : a + b = b + a
class AddMonoid (α : Type u) extends AddSemigroup α, Zero α where
zero_add (a : α) : 0 + a = a
add_zero (a : α) : a + 0 = a
class AddCommMonoid (α : Type u) extends AddMonoid α, AddCommSemigroup α
class AddGroup (α : Type u) extends AddMonoid α, Neg α where
add_left_neg (a : α) : -a + a = 0
class AddCommGroup (α : Type u) extends AddGroup α, AddCommMonoid α
class Distrib (α : Type u) extends Mul α, Add α where
left_distrib ( a b c : α) : a * (b + c) = (a * b) + (a * c)
right_distrib (a b c : α) : (a + b) * c = (a * c) + (b * c)
class MulZero (α : Type u) extends Mul α, Zero α where
zero_mul (a : α) : 0 * a = 0
mul_zero (a : α) : a * 0 = 0
class ZeroNeOne (α : Type u) extends Zero α, One α where
zero_ne_one : (0:α) ≠ 1
class Semiring (α : Type u) extends AddCommMonoid α, Monoid α, Distrib α, MulZero α
class CommSemiring (α : Type u) extends Semiring α, CommMonoid α
class Ring (α : Type u) extends AddCommGroup α, Monoid α, Distrib α
class CommRing (α : Type u) extends Ring α, CommSemigroup α
class NoZeroDivisors (α : Type u) extends Mul α, Zero α where
eq_zero_or_eq_zero_of_mul_eq_zero (a b : α) : a * b = 0 → a = 0 ∨ b = 0
class IntegralDomain (α : Type u) extends CommRing α, NoZeroDivisors α, ZeroNeOne α
class DivisionRing (α : Type u) extends Ring α, Inv α, ZeroNeOne α where
mul_inv_cancel {a : α} : a ≠ 0 → a * a⁻¹ = 1
inv_mul_cancel {a : α} : a ≠ 0 → a⁻¹ * a = 1
class Field (α : Type u) extends DivisionRing α, CommRing α
set_option pp.all false in
#check Field.mk
#print Field.toDivisionRing
#print Field.toCommRing