@@ -22,15 +22,14 @@ open import Relation.Binary.Core using (Rel)
22
22
open import Relation.Binary.Bundles using (Setoid)
23
23
open import Relation.Binary.Structures using (IsEquivalence)
24
24
25
-
26
25
private
27
26
28
27
variable
29
28
c ℓ : Level
30
29
C : Set c
31
30
_≈_ : Rel C ℓ
32
31
ε 0# 1# : C
33
- _⁻¹ -_ : Op₁ C
32
+ _⁻¹ -_ _⋆ : Op₁ C
34
33
_∙_ _+_ _*_ : Op₂ C
35
34
36
35
lift₀ : C → A → C
@@ -121,6 +120,36 @@ isAbelianGroup isAbelianGroup = record
121
120
}
122
121
where module M = IsAbelianGroup isAbelianGroup
123
122
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
+
124
153
isSemiringWithoutAnnihilatingZero : IsSemiringWithoutAnnihilatingZero _≈_ _+_ _*_ 0# 1# →
125
154
IsSemiringWithoutAnnihilatingZero (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#) (lift₀ 1#)
126
155
isSemiringWithoutAnnihilatingZero isSemiringWithoutAnnihilatingZero = record
@@ -140,6 +169,44 @@ isSemiring isSemiring = record
140
169
}
141
170
where module M = IsSemiring isSemiring
142
171
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
+
143
210
isRing : IsRing _≈_ _+_ _*_ -_ 0# 1# →
144
211
IsRing (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₁ -_) (lift₀ 0#) (lift₀ 1#)
145
212
isRing isRing = record
@@ -151,6 +218,13 @@ isRing isRing = record
151
218
}
152
219
where module M = IsRing isRing
153
220
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
154
228
155
229
------------------------------------------------------------------------
156
230
-- Bundles
@@ -170,15 +244,42 @@ commutativeSemigroup m = record { isCommutativeSemigroup = isCommutativeSemigrou
170
244
monoid : Monoid c ℓ → Monoid (a ⊔ c) (a ⊔ ℓ)
171
245
monoid m = record { isMonoid = isMonoid (Monoid.isMonoid m) }
172
246
247
+ commutativeMonoid : CommutativeMonoid c ℓ → CommutativeMonoid (a ⊔ c) (a ⊔ ℓ)
248
+ commutativeMonoid m = record { isCommutativeMonoid = isCommutativeMonoid (CommutativeMonoid.isCommutativeMonoid m) }
249
+
173
250
group : Group c ℓ → Group (a ⊔ c) (a ⊔ ℓ)
174
251
group m = record { isGroup = isGroup (Group.isGroup m) }
175
252
176
253
abelianGroup : AbelianGroup c ℓ → AbelianGroup (a ⊔ c) (a ⊔ ℓ)
177
254
abelianGroup m = record { isAbelianGroup = isAbelianGroup (AbelianGroup.isAbelianGroup m) }
178
255
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
+
179
266
semiring : Semiring c ℓ → Semiring (a ⊔ c) (a ⊔ ℓ)
180
267
semiring m = record { isSemiring = isSemiring (Semiring.isSemiring m) }
181
268
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
+
182
281
ring : Ring c ℓ → Ring (a ⊔ c) (a ⊔ ℓ)
183
282
ring m = record { isRing = isRing (Ring.isRing m) }
184
283
284
+ commutativeRing : CommutativeRing c ℓ → CommutativeRing (a ⊔ c) (a ⊔ ℓ)
285
+ commutativeRing m = record { isCommutativeRing = isCommutativeRing (CommutativeRing.isCommutativeRing m) }
0 commit comments