{-# OPTIONS --type-in-type
#-}
open import NeilPrelude
module SemiRing {A : Set}
(_⊕_ : Op A)
(⊕assoc : Associative _⊕_)
(⊕comm : Commutative _⊕_)
(zero : A) (unit⊕ : {a : A} → zero ⊕ a ≡ a)
(_⊗_ : Op A)
(⊗assoc : Associative _⊗_)
(zero⊗ : {a : A} → zero ⊗ a ≡ zero) (⊗zero : {a : A} → a ⊗ zero ≡ zero)
(distrL : {a b c : A} → a ⊗ (b ⊕ c) ≡ (a ⊗ b) ⊕ (a ⊗ c))
(distrR : {a b c : A} → (a ⊕ b) ⊗ c ≡ (a ⊗ c) ⊕ (b ⊗ c))
where
distr : {a b c : A} → a ⊗ (b ⊕ c) ≡ (a ⊗ b) ⊕ (a ⊗ c)
distr = distrL
import CommMonoid
open CommMonoid _⊕_ ⊕assoc ⊕comm zero unit⊕ public
import SemiGroup
open SemiGroup _⊗_ ⊗assoc
lem-[a⊕0]⊗b=a⊗b : {a b : A} → (a ⊕ zero) ⊗ b ≡ a ⊗ b
lem-[a⊕0]⊗b=a⊗b = cong2R _⊗_ ⊕unit