-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSemiring.v
36 lines (24 loc) · 1.25 KB
/
Semiring.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
(* Semiring *)
(** A semiring is an algebraic structure ([R], [➕], [•]) consisting of:
- a set [R].
- two binary operations [➕] and [•] on [R], such that
- ([R], [➕]) is a commutative monoid with identity element 0.
- ([R], [•]) is a monoid with identity element 1.
- Multiplication left and right distributes over addition.
- Multiplication by 0 annihilates [R].
*)
Parameter R : Set.
Parameter O : R.
Parameter I : R.
Parameter add : R -> R -> R.
Infix "➕" := add (left associativity, at level 50): type_scope.
Parameter mult : R -> R -> R.
Infix "•" := mult (left associativity, at level 50): type_scope.
Axiom addition_associativity : forall a b c, a ➕ (b ➕ c) = (a ➕ b) ➕ c.
Axiom addition_identity_element_existence : forall a, a ➕ O = a.
Axiom addition_commutativity : forall a b, a ➕ b = b ➕ a.
Axiom multiplication_associativity : forall a b c, a • (b • c) = (a • b) • c.
Axiom multiplication_identity_element_existence : forall a, a • I = a /\ I • a = a.
Axiom left_distributivity : forall a b c, a • (b ➕ c) = (a • b) ➕ (a • c).
Axiom right_distributivity: forall a b c, (a ➕ b) • c = (a • c) ➕ (b • c).
Axiom annihilativity : forall a, a • O = O /\ O • a = O.