Files
agdaproofs/Semirings/Definition.agda
2020-01-05 15:06:35 +00:00

28 lines
1.1 KiB
Agda

{-# OPTIONS --safe --warning=error --without-K #-}
open import LogicalFormulae
open import Monoids.Definition
module Semirings.Definition where
record Semiring {a : _} {A : Set a} (Zero One : A) (_+_ : A A A) (_*_ : A A A) : Set a where
field
monoid : Monoid Zero _+_
commutative : (a b : A) a + b b + a
multMonoid : Monoid One _*_
productZeroLeft : (a : A) Zero * a Zero
productZeroRight : (a : A) a * Zero Zero
+DistributesOver* : (a b c : A) a * (b + c) (a * b) + (a * c)
+DistributesOver*' : (a b c : A) (a + b) * c (a * c) + (b * c)
+Associative = Monoid.associative monoid
*Associative = Monoid.associative multMonoid
productOneLeft = Monoid.idLeft multMonoid
productOneRight = Monoid.idRight multMonoid
sumZeroLeft = Monoid.idLeft monoid
sumZeroRight = Monoid.idRight monoid
+WellDefined : {a b c d : A} (a c) (b d) (a + b) (c + d)
+WellDefined refl refl = refl
-- (b+c)(a+a) == b(a+a) + c(a+a) == ba+ba+ca+ca == (ba+ca) + (ba+ca)
-- (b+c)(a+a) ==? (b+c)a+(b+c)a