@@ -22,15 +22,14 @@ open import Relation.Binary.Core using (Rel)
2222open import Relation.Binary.Bundles using (Setoid)
2323open import Relation.Binary.Structures using (IsEquivalence)
2424
25-
2625private
2726
2827 variable
2928 c ℓ : Level
3029 C : Set c
3130 _≈_ : Rel C ℓ
3231 ε 0# 1# : C
33- _⁻¹ -_ : Op₁ C
32+ _⁻¹ -_ _⋆ : Op₁ C
3433 _∙_ _+_ _*_ : Op₂ C
3534
3635 lift₀ : C → A → C
@@ -121,6 +120,36 @@ isAbelianGroup isAbelianGroup = record
121120 }
122121 where module M = IsAbelianGroup isAbelianGroup
123122
123+ isNearSemiring : IsNearSemiring _≈_ _+_ _*_ 0# →
124+ IsNearSemiring (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#)
125+ isNearSemiring isNearSemiring = record
126+ { +-isMonoid = isMonoid M.+-isMonoid
127+ ; *-cong = λ g h _ → M.*-cong (g _) (h _)
128+ ; *-assoc = λ f g h _ → M.*-assoc (f _) (g _) (h _)
129+ ; distribʳ = λ f g h _ → M.distribʳ (f _) (g _) (h _)
130+ ; zeroˡ = λ f _ → M.zeroˡ (f _)
131+ }
132+ where module M = IsNearSemiring isNearSemiring
133+
134+ isSemiringWithoutOne : IsSemiringWithoutOne _≈_ _+_ _*_ 0# →
135+ IsSemiringWithoutOne (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#)
136+ isSemiringWithoutOne isSemiringWithoutOne = record
137+ { +-isCommutativeMonoid = isCommutativeMonoid M.+-isCommutativeMonoid
138+ ; *-cong = λ g h _ → M.*-cong (g _) (h _)
139+ ; *-assoc = λ f g h _ → M.*-assoc (f _) (g _) (h _)
140+ ; distrib = (λ f g h _ → M.distribˡ (f _) (g _) (h _)) , (λ f g h _ → M.distribʳ (f _) (g _) (h _))
141+ ; zero = (λ f _ → M.zeroˡ (f _)) , (λ f _ → M.zeroʳ (f _))
142+ }
143+ where module M = IsSemiringWithoutOne isSemiringWithoutOne
144+
145+ isCommutativeSemiringWithoutOne : IsCommutativeSemiringWithoutOne _≈_ _+_ _*_ 0# →
146+ IsCommutativeSemiringWithoutOne (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#)
147+ isCommutativeSemiringWithoutOne isCommutativeSemiringWithoutOne = record
148+ { isSemiringWithoutOne = isSemiringWithoutOne M.isSemiringWithoutOne
149+ ; *-comm = λ f g _ → M.*-comm (f _) (g _)
150+ }
151+ where module M = IsCommutativeSemiringWithoutOne isCommutativeSemiringWithoutOne
152+
124153isSemiringWithoutAnnihilatingZero : IsSemiringWithoutAnnihilatingZero _≈_ _+_ _*_ 0# 1# →
125154 IsSemiringWithoutAnnihilatingZero (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#) (lift₀ 1#)
126155isSemiringWithoutAnnihilatingZero isSemiringWithoutAnnihilatingZero = record
@@ -140,6 +169,44 @@ isSemiring isSemiring = record
140169 }
141170 where module M = IsSemiring isSemiring
142171
172+ isCommutativeSemiring : IsCommutativeSemiring _≈_ _+_ _*_ 0# 1# →
173+ IsCommutativeSemiring (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#) (lift₀ 1#)
174+ isCommutativeSemiring isCommutativeSemiring = record
175+ { isSemiring = isSemiring M.isSemiring
176+ ; *-comm = λ f g _ → M.*-comm (f _) (g _)
177+ }
178+ where module M = IsCommutativeSemiring isCommutativeSemiring
179+
180+ isIdempotentSemiring : IsIdempotentSemiring _≈_ _+_ _*_ 0# 1# →
181+ IsIdempotentSemiring (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#) (lift₀ 1#)
182+ isIdempotentSemiring isIdempotentSemiring = record
183+ { isSemiring = isSemiring M.isSemiring
184+ ; +-idem = λ f _ → M.+-idem (f _)
185+ }
186+ where module M = IsIdempotentSemiring isIdempotentSemiring
187+
188+ isKleeneAlgebra : IsKleeneAlgebra _≈_ _+_ _*_ _⋆ 0# 1# →
189+ IsKleeneAlgebra (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₁ _⋆) (lift₀ 0#) (lift₀ 1#)
190+ isKleeneAlgebra isKleeneAlgebra = record
191+ { isIdempotentSemiring = isIdempotentSemiring M.isIdempotentSemiring
192+ ; starExpansive = (λ f _ → M.starExpansiveˡ (f _)) , λ f _ → M.starExpansiveʳ (f _)
193+ ; starDestructive = (λ f g h i _ → M.starDestructiveˡ (f _) (g _) (h _) (i _))
194+ , (λ f g h i _ → M.starDestructiveʳ (f _) (g _) (h _) (i _))
195+ }
196+ where module M = IsKleeneAlgebra isKleeneAlgebra
197+
198+ isQuasiring : IsQuasiring _≈_ _+_ _*_ 0# 1# →
199+ IsQuasiring (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#) (lift₀ 1#)
200+ isQuasiring isQuasiring = record
201+ { +-isMonoid = isMonoid M.+-isMonoid
202+ ; *-cong = λ g h _ → M.*-cong (g _) (h _)
203+ ; *-assoc = λ f g h _ → M.*-assoc (f _) (g _) (h _)
204+ ; *-identity = (λ f _ → M.*-identityˡ (f _)) , λ f _ → M.*-identityʳ (f _)
205+ ; distrib = (λ f g h _ → M.distribˡ (f _) (g _) (h _)) , λ f g h _ → M.distribʳ (f _) (g _) (h _)
206+ ; zero = (λ f _ → M.zeroˡ (f _)) , λ f _ → M.zeroʳ (f _)
207+ }
208+ where module M = IsQuasiring isQuasiring
209+
143210isRing : IsRing _≈_ _+_ _*_ -_ 0# 1# →
144211 IsRing (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₁ -_) (lift₀ 0#) (lift₀ 1#)
145212isRing isRing = record
@@ -151,6 +218,13 @@ isRing isRing = record
151218 }
152219 where module M = IsRing isRing
153220
221+ isCommutativeRing : IsCommutativeRing _≈_ _+_ _*_ -_ 0# 1# →
222+ IsCommutativeRing (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₁ -_) (lift₀ 0#) (lift₀ 1#)
223+ isCommutativeRing isCommutativeRing = record
224+ { isRing = isRing M.isRing
225+ ; *-comm = λ f g _ → M.*-comm (f _) (g _)
226+ }
227+ where module M = IsCommutativeRing isCommutativeRing
154228
155229------------------------------------------------------------------------
156230-- Bundles
@@ -170,15 +244,42 @@ commutativeSemigroup m = record { isCommutativeSemigroup = isCommutativeSemigrou
170244monoid : Monoid c ℓ → Monoid (a ⊔ c) (a ⊔ ℓ)
171245monoid m = record { isMonoid = isMonoid (Monoid.isMonoid m) }
172246
247+ commutativeMonoid : CommutativeMonoid c ℓ → CommutativeMonoid (a ⊔ c) (a ⊔ ℓ)
248+ commutativeMonoid m = record { isCommutativeMonoid = isCommutativeMonoid (CommutativeMonoid.isCommutativeMonoid m) }
249+
173250group : Group c ℓ → Group (a ⊔ c) (a ⊔ ℓ)
174251group m = record { isGroup = isGroup (Group.isGroup m) }
175252
176253abelianGroup : AbelianGroup c ℓ → AbelianGroup (a ⊔ c) (a ⊔ ℓ)
177254abelianGroup m = record { isAbelianGroup = isAbelianGroup (AbelianGroup.isAbelianGroup m) }
178255
256+ nearSemiring : NearSemiring c ℓ → NearSemiring (a ⊔ c) (a ⊔ ℓ)
257+ nearSemiring m = record { isNearSemiring = isNearSemiring (NearSemiring.isNearSemiring m) }
258+
259+ semiringWithoutOne : SemiringWithoutOne c ℓ → SemiringWithoutOne (a ⊔ c) (a ⊔ ℓ)
260+ semiringWithoutOne m = record { isSemiringWithoutOne = isSemiringWithoutOne (SemiringWithoutOne.isSemiringWithoutOne m) }
261+
262+ commutativeSemiringWithoutOne : CommutativeSemiringWithoutOne c ℓ → CommutativeSemiringWithoutOne (a ⊔ c) (a ⊔ ℓ)
263+ commutativeSemiringWithoutOne m = record
264+ { isCommutativeSemiringWithoutOne = isCommutativeSemiringWithoutOne (CommutativeSemiringWithoutOne.isCommutativeSemiringWithoutOne m) }
265+
179266semiring : Semiring c ℓ → Semiring (a ⊔ c) (a ⊔ ℓ)
180267semiring m = record { isSemiring = isSemiring (Semiring.isSemiring m) }
181268
269+ commutativeSemiring : CommutativeSemiring c ℓ → CommutativeSemiring (a ⊔ c) (a ⊔ ℓ)
270+ commutativeSemiring m = record { isCommutativeSemiring = isCommutativeSemiring (CommutativeSemiring.isCommutativeSemiring m) }
271+
272+ idempotentSemiring : IdempotentSemiring c ℓ → IdempotentSemiring (a ⊔ c) (a ⊔ ℓ)
273+ idempotentSemiring m = record { isIdempotentSemiring = isIdempotentSemiring (IdempotentSemiring.isIdempotentSemiring m) }
274+
275+ kleeneAlgebra : KleeneAlgebra c ℓ → KleeneAlgebra (a ⊔ c) (a ⊔ ℓ)
276+ kleeneAlgebra m = record { isKleeneAlgebra = isKleeneAlgebra (KleeneAlgebra.isKleeneAlgebra m) }
277+
278+ quasiring : Quasiring c ℓ → Quasiring (a ⊔ c) (a ⊔ ℓ)
279+ quasiring m = record { isQuasiring = isQuasiring (Quasiring.isQuasiring m) }
280+
182281ring : Ring c ℓ → Ring (a ⊔ c) (a ⊔ ℓ)
183282ring m = record { isRing = isRing (Ring.isRing m) }
184283
284+ commutativeRing : CommutativeRing c ℓ → CommutativeRing (a ⊔ c) (a ⊔ ℓ)
285+ commutativeRing m = record { isCommutativeRing = isCommutativeRing (CommutativeRing.isCommutativeRing m) }
0 commit comments