Skip to content

Commit 908e015

Browse files
authored
Add a few algebraic structures missing from the Algebra.Construct.Pointwise (#2555)
* add a few algebraic structures missing from the Pointwise construct * update CHANGELOG * fix ws violation * resolve conflicts
1 parent a787006 commit 908e015

File tree

2 files changed

+132
-2
lines changed

2 files changed

+132
-2
lines changed

CHANGELOG.md

+29
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,32 @@ New modules
2626

2727
Additions to existing modules
2828
-----------------------------
29+
30+
* In `Algebra.Construct.Pointwise`:
31+
```agda
32+
isNearSemiring : IsNearSemiring _≈_ _+_ _*_ 0# →
33+
IsNearSemiring (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#)
34+
isSemiringWithoutOne : IsSemiringWithoutOne _≈_ _+_ _*_ 0# →
35+
IsSemiringWithoutOne (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#)
36+
isCommutativeSemiringWithoutOne : IsCommutativeSemiringWithoutOne _≈_ _+_ _*_ 0# →
37+
IsCommutativeSemiringWithoutOne (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#)
38+
isCommutativeSemiring : IsCommutativeSemiring _≈_ _+_ _*_ 0# 1# →
39+
IsCommutativeSemiring (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#) (lift₀ 1#)
40+
isIdempotentSemiring : IsIdempotentSemiring _≈_ _+_ _*_ 0# 1# →
41+
IsIdempotentSemiring (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#) (lift₀ 1#)
42+
isKleeneAlgebra : IsKleeneAlgebra _≈_ _+_ _*_ _⋆ 0# 1# →
43+
IsKleeneAlgebra (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₁ _⋆) (lift₀ 0#) (lift₀ 1#)
44+
isQuasiring : IsQuasiring _≈_ _+_ _*_ 0# 1# →
45+
IsQuasiring (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#) (lift₀ 1#)
46+
isCommutativeRing : IsCommutativeRing _≈_ _+_ _*_ -_ 0# 1# →
47+
IsCommutativeRing (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₁ -_) (lift₀ 0#) (lift₀ 1#)
48+
commutativeMonoid : CommutativeMonoid c ℓ → CommutativeMonoid (a ⊔ c) (a ⊔ ℓ)
49+
nearSemiring : NearSemiring c ℓ → NearSemiring (a ⊔ c) (a ⊔ ℓ)
50+
semiringWithoutOne : SemiringWithoutOne c ℓ → SemiringWithoutOne (a ⊔ c) (a ⊔ ℓ)
51+
commutativeSemiringWithoutOne : CommutativeSemiringWithoutOne c ℓ → CommutativeSemiringWithoutOne (a ⊔ c) (a ⊔ ℓ)
52+
commutativeSemiring : CommutativeSemiring c ℓ → CommutativeSemiring (a ⊔ c) (a ⊔ ℓ)
53+
idempotentSemiring : IdempotentSemiring c ℓ → IdempotentSemiring (a ⊔ c) (a ⊔ ℓ)
54+
kleeneAlgebra : KleeneAlgebra c ℓ → KleeneAlgebra (a ⊔ c) (a ⊔ ℓ)
55+
quasiring : Quasiring c ℓ → Quasiring (a ⊔ c) (a ⊔ ℓ)
56+
commutativeRing : CommutativeRing c ℓ → CommutativeRing (a ⊔ c) (a ⊔ ℓ)
57+
```

src/Algebra/Construct/Pointwise.agda

+103-2
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,14 @@ open import Relation.Binary.Core using (Rel)
2222
open import Relation.Binary.Bundles using (Setoid)
2323
open import Relation.Binary.Structures using (IsEquivalence)
2424

25-
2625
private
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+
124153
isSemiringWithoutAnnihilatingZero : IsSemiringWithoutAnnihilatingZero _≈_ _+_ _*_ 0# 1#
125154
IsSemiringWithoutAnnihilatingZero (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₀ 0#) (lift₀ 1#)
126155
isSemiringWithoutAnnihilatingZero 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+
143210
isRing : IsRing _≈_ _+_ _*_ -_ 0# 1#
144211
IsRing (liftRel _≈_) (lift₂ _+_) (lift₂ _*_) (lift₁ -_) (lift₀ 0#) (lift₀ 1#)
145212
isRing 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
170244
monoid : Monoid c ℓ Monoid (a ⊔ c) (a ⊔ ℓ)
171245
monoid 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+
173250
group : Group c ℓ Group (a ⊔ c) (a ⊔ ℓ)
174251
group m = record { isGroup = isGroup (Group.isGroup m) }
175252

176253
abelianGroup : AbelianGroup c ℓ AbelianGroup (a ⊔ c) (a ⊔ ℓ)
177254
abelianGroup 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+
179266
semiring : Semiring c ℓ Semiring (a ⊔ c) (a ⊔ ℓ)
180267
semiring 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+
182281
ring : Ring c ℓ Ring (a ⊔ c) (a ⊔ ℓ)
183282
ring 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

Comments
 (0)