test(tests/lean/run): add structure command test
This commit is contained in:
parent
f8a2bc41a5
commit
354baf4d13
1 changed files with 62 additions and 0 deletions
62
tests/lean/run/algebra3.lean
Normal file
62
tests/lean/run/algebra3.lean
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
import logic
|
||||||
|
|
||||||
|
structure has_mul [class] (A : Type) :=
|
||||||
|
(mul : A → A → A)
|
||||||
|
|
||||||
|
structure has_one [class] (A : Type) :=
|
||||||
|
(one : A)
|
||||||
|
|
||||||
|
structure has_inv [class] (A : Type) :=
|
||||||
|
(inv : A → A)
|
||||||
|
|
||||||
|
infixl `*` := has_mul.mul
|
||||||
|
postfix `⁻¹` := has_inv.inv
|
||||||
|
notation 1 := has_one.one
|
||||||
|
|
||||||
|
structure semigroup [class] (A : Type) extends has_mul A :=
|
||||||
|
(assoc : ∀ a b c, mul (mul a b) c = mul a (mul b c))
|
||||||
|
|
||||||
|
structure comm_semigroup [class] (A : Type) extends semigroup A renaming mul→add:=
|
||||||
|
(comm : ∀a b, add a b = add b a)
|
||||||
|
|
||||||
|
infixl `+` := comm_semigroup.add
|
||||||
|
|
||||||
|
structure monoid [class] (A : Type) extends semigroup A, has_one A :=
|
||||||
|
(right_id : ∀a, mul a one = a) (left_id : ∀a, mul one a = a)
|
||||||
|
|
||||||
|
-- We can suppress := and :: when we are not declaring any new field.
|
||||||
|
structure comm_monoid [class] (A : Type) extends monoid A renaming mul→add, comm_semigroup A
|
||||||
|
|
||||||
|
structure group [class] (A : Type) extends monoid A, has_inv A :=
|
||||||
|
(is_inv : ∀ a, mul a (inv a) = one)
|
||||||
|
|
||||||
|
structure abelian_group [class] (A : Type) extends group A renaming mul→add, comm_monoid A
|
||||||
|
|
||||||
|
structure ring [class] (A : Type)
|
||||||
|
extends abelian_group A renaming
|
||||||
|
assoc→add.assoc
|
||||||
|
comm→add.comm
|
||||||
|
one→zero
|
||||||
|
right_id→add.right_id
|
||||||
|
left_id→add.left_id
|
||||||
|
inv→uminus
|
||||||
|
is_inv→uminus_is_inv,
|
||||||
|
monoid A renaming
|
||||||
|
assoc→mul.assoc
|
||||||
|
right_id→mul.right_id
|
||||||
|
left_id→mul.left_id
|
||||||
|
:=
|
||||||
|
(dist_left : ∀ a b c, mul a (add b c) = add (mul a b) (mul a c))
|
||||||
|
(dist_right : ∀ a b c, mul (add a b) c = add (mul a c) (mul b c))
|
||||||
|
|
||||||
|
variable A : Type₁
|
||||||
|
variables a b c d : A
|
||||||
|
variable R : ring A
|
||||||
|
|
||||||
|
check a + b * c
|
||||||
|
|
||||||
|
set_option pp.implicit true
|
||||||
|
set_option pp.notation false
|
||||||
|
set_option pp.coercions true
|
||||||
|
|
||||||
|
check a + b * c
|
Loading…
Reference in a new issue