Skip to content

Commit abff2b2

Browse files
Add Kleene Algebra morphism with composition and identity construct (#1936)
1 parent 8582957 commit abff2b2

File tree

6 files changed

+149
-7
lines changed

6 files changed

+149
-7
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -988,6 +988,7 @@ Major improvements
988988
* `RawRing`
989989
* `RawQuasigroup`
990990
* `RawLoop`
991+
* `RawKleeneAlgebra`
991992
* A new module `Algebra.Lattice.Bundles.Raw` is also introduced.
992993
* `RawLattice` has been moved from `Algebra.Lattice.Bundles` to this new module.
993994
@@ -2059,6 +2060,9 @@ Additions to existing modules
20592060
record IsRingWithoutOneHomomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
20602061
record IsRingWithoutOneMonomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
20612062
record IsRingWithoutOneIsoMorphism (⟦_⟧ : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂)
2063+
record IsKleeneAlgebraHomomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
2064+
record IsKleeneAlgebraMonomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
2065+
record IsKleeneAlgebraIsomorphism (⟦_⟧ : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂)
20622066
```
20632067

20642068
* Added new proofs in `Data.Bool.Properties`:

src/Algebra/Bundles.agda

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ open Raw public
2626
using (RawMagma; RawMonoid; RawGroup
2727
; RawNearSemiring; RawSemiring
2828
; RawRingWithoutOne; RawRing
29-
; RawQuasigroup; RawLoop)
29+
; RawQuasigroup; RawLoop; RawKleeneAlgebra)
3030

3131
------------------------------------------------------------------------
3232
-- Bundles with 1 binary operation

src/Algebra/Bundles/Raw.agda

+36-6
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,12 @@ record RawRingWithoutOne c ℓ : Set (suc (c ⊔ ℓ)) where
153153
infixl 6 _+_
154154
infix 4 _≈_
155155
field
156-
Carrier : Set c
157-
_≈_ : Rel Carrier ℓ
158-
_+_ : Op₂ Carrier
159-
_*_ : Op₂ Carrier
160-
-_ : Op₁ Carrier
161-
0# : Carrier
156+
Carrier : Set c
157+
_≈_ : Rel Carrier ℓ
158+
_+_ : Op₂ Carrier
159+
_*_ : Op₂ Carrier
160+
-_ : Op₁ Carrier
161+
0# : Carrier
162162

163163
+-rawGroup : RawGroup c ℓ
164164
+-rawGroup = record
@@ -289,3 +289,33 @@ record RawLoop c ℓ : Set (suc (c ⊔ ℓ)) where
289289

290290
open RawQuasigroup rawQuasigroup public
291291
using (_≉_ ; ∙-rawMagma; \\-rawMagma; //-rawMagma)
292+
293+
record RawKleeneAlgebra c ℓ : Set (suc (c ⊔ ℓ)) where
294+
infix 8 _⋆
295+
infixl 7 _*_
296+
infixl 6 _+_
297+
infix 4 _≈_
298+
field
299+
Carrier : Set c
300+
_≈_ : Rel Carrier ℓ
301+
_+_ : Op₂ Carrier
302+
_*_ : Op₂ Carrier
303+
_⋆ : Op₁ Carrier
304+
0# : Carrier
305+
1# : Carrier
306+
307+
rawSemiring : RawSemiring c ℓ
308+
rawSemiring = record
309+
{ _≈_ = _≈_
310+
; _+_ = _+_
311+
; _*_ = _*_
312+
; 0# = 0#
313+
; 1# = 1#
314+
}
315+
316+
open RawSemiring rawSemiring public
317+
using
318+
( _≉_
319+
; +-rawMagma; +-rawMonoid
320+
; *-rawMagma; *-rawMonoid
321+
)

src/Algebra/Morphism/Construct/Composition.agda

+40
Original file line numberDiff line numberDiff line change
@@ -383,3 +383,43 @@ module _ {L₁ : RawLoop a ℓ₁}
383383
{ isLoopMonomorphism = isLoopMonomorphism F.isLoopMonomorphism G.isLoopMonomorphism
384384
; surjective = Func.surjective _ _ (_≈_ L₃) F.surjective G.surjective
385385
} where module F = IsLoopIsomorphism f-iso; module G = IsLoopIsomorphism g-iso
386+
387+
------------------------------------------------------------------------
388+
-- KleeneAlgebra
389+
390+
module _ {K₁ : RawKleeneAlgebra a ℓ₁}
391+
{K₂ : RawKleeneAlgebra b ℓ₂}
392+
{K₃ : RawKleeneAlgebra c ℓ₃}
393+
(open RawKleeneAlgebra)
394+
(≈₃-trans : Transitive (_≈_ K₃))
395+
{f : Carrier K₁ Carrier K₂}
396+
{g : Carrier K₂ Carrier K₃}
397+
where
398+
399+
isKleeneAlgebraHomomorphism
400+
: IsKleeneAlgebraHomomorphism K₁ K₂ f
401+
IsKleeneAlgebraHomomorphism K₂ K₃ g
402+
IsKleeneAlgebraHomomorphism K₁ K₃ (g ∘ f)
403+
isKleeneAlgebraHomomorphism f-homo g-homo = record
404+
{ isSemiringHomomorphism = isSemiringHomomorphism ≈₃-trans F.isSemiringHomomorphism G.isSemiringHomomorphism
405+
; ⋆-homo = λ x ≈₃-trans (G.⟦⟧-cong (F.⋆-homo x)) (G.⋆-homo (f x))
406+
} where module F = IsKleeneAlgebraHomomorphism f-homo; module G = IsKleeneAlgebraHomomorphism g-homo
407+
408+
isKleeneAlgebraMonomorphism
409+
: IsKleeneAlgebraMonomorphism K₁ K₂ f
410+
IsKleeneAlgebraMonomorphism K₂ K₃ g
411+
IsKleeneAlgebraMonomorphism K₁ K₃ (g ∘ f)
412+
isKleeneAlgebraMonomorphism f-mono g-mono = record
413+
{ isKleeneAlgebraHomomorphism = isKleeneAlgebraHomomorphism F.isKleeneAlgebraHomomorphism G.isKleeneAlgebraHomomorphism
414+
; injective = F.injective ∘ G.injective
415+
} where module F = IsKleeneAlgebraMonomorphism f-mono; module G = IsKleeneAlgebraMonomorphism g-mono
416+
417+
isKleeneAlgebraIsomorphism
418+
: IsKleeneAlgebraIsomorphism K₁ K₂ f
419+
IsKleeneAlgebraIsomorphism K₂ K₃ g
420+
IsKleeneAlgebraIsomorphism K₁ K₃ (g ∘ f)
421+
isKleeneAlgebraIsomorphism f-iso g-iso = record
422+
{ isKleeneAlgebraMonomorphism = isKleeneAlgebraMonomorphism F.isKleeneAlgebraMonomorphism G.isKleeneAlgebraMonomorphism
423+
; surjective = Func.surjective (_≈_ K₁) (_≈_ K₂) (_≈_ K₃) F.surjective G.surjective
424+
} where module F = IsKleeneAlgebraIsomorphism f-iso; module G = IsKleeneAlgebraIsomorphism g-iso
425+

src/Algebra/Morphism/Construct/Identity.agda

+26
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ open import Algebra.Morphism.Structures
1919
; module RingMorphisms
2020
; module QuasigroupMorphisms
2121
; module LoopMorphisms
22+
; module KleeneAlgebraMorphisms
2223
)
2324
open import Data.Product.Base using (_,_)
2425
open import Function.Base using (id)
@@ -248,3 +249,28 @@ module _ (L : RawLoop c ℓ) (open RawLoop L) (refl : Reflexive _≈_) where
248249
{ isLoopMonomorphism = isLoopMonomorphism
249250
; surjective = Id.surjective _
250251
}
252+
253+
------------------------------------------------------------------------
254+
-- KleeneAlgebra
255+
256+
module _ (K : RawKleeneAlgebra c ℓ) (open RawKleeneAlgebra K) (refl : Reflexive _≈_) where
257+
open KleeneAlgebraMorphisms K K
258+
259+
isKleeneAlgebraHomomorphism : IsKleeneAlgebraHomomorphism id
260+
isKleeneAlgebraHomomorphism = record
261+
{ isSemiringHomomorphism = isSemiringHomomorphism _ refl
262+
; ⋆-homo = λ _ refl
263+
}
264+
265+
isKleeneAlgebraMonomorphism : IsKleeneAlgebraMonomorphism id
266+
isKleeneAlgebraMonomorphism = record
267+
{ isKleeneAlgebraHomomorphism = isKleeneAlgebraHomomorphism
268+
; injective = id
269+
}
270+
271+
isKleeneAlgebraIsomorphism : IsKleeneAlgebraIsomorphism id
272+
isKleeneAlgebraIsomorphism = record
273+
{ isKleeneAlgebraMonomorphism = isKleeneAlgebraMonomorphism
274+
; surjective = Id.surjective _
275+
}
276+

src/Algebra/Morphism/Structures.agda

+42
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,47 @@ module LoopMorphisms (L₁ : RawLoop a ℓ₁) (L₂ : RawLoop b ℓ₂) where
685685

686686
open IsLoopMonomorphism isLoopMonomorphism public
687687

688+
------------------------------------------------------------------------
689+
-- Morphisms over Kleene algebra structures
690+
------------------------------------------------------------------------
691+
module KleeneAlgebraMorphisms (R₁ : RawKleeneAlgebra a ℓ₁) (R₂ : RawKleeneAlgebra b ℓ₂) where
692+
693+
open RawKleeneAlgebra R₁ renaming
694+
( Carrier to A; _≈_ to _≈₁_
695+
; _⋆ to _⋆₁
696+
; rawSemiring to rawSemiring₁
697+
)
698+
699+
open RawKleeneAlgebra R₂ renaming
700+
( Carrier to B; _≈_ to _≈₂_
701+
; _⋆ to _⋆₂
702+
; rawSemiring to rawSemiring₂
703+
)
704+
705+
open MorphismDefinitions A B _≈₂_
706+
open SemiringMorphisms rawSemiring₁ rawSemiring₂
707+
708+
record IsKleeneAlgebraHomomorphism (⟦_⟧ : A B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂) where
709+
field
710+
isSemiringHomomorphism : IsSemiringHomomorphism ⟦_⟧
711+
⋆-homo : Homomorphic₁ ⟦_⟧ _⋆₁ _⋆₂
712+
713+
open IsSemiringHomomorphism isSemiringHomomorphism public
714+
715+
record IsKleeneAlgebraMonomorphism (⟦_⟧ : A B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂) where
716+
field
717+
isKleeneAlgebraHomomorphism : IsKleeneAlgebraHomomorphism ⟦_⟧
718+
injective : Injective _≈₁_ _≈₂_ ⟦_⟧
719+
720+
open IsKleeneAlgebraHomomorphism isKleeneAlgebraHomomorphism public
721+
722+
record IsKleeneAlgebraIsomorphism (⟦_⟧ : A B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂) where
723+
field
724+
isKleeneAlgebraMonomorphism : IsKleeneAlgebraMonomorphism ⟦_⟧
725+
surjective : Surjective _≈₁_ _≈₂_ ⟦_⟧
726+
727+
open IsKleeneAlgebraMonomorphism isKleeneAlgebraMonomorphism public
728+
688729
------------------------------------------------------------------------
689730
-- Re-export contents of modules publicly
690731

@@ -697,3 +738,4 @@ open RingWithoutOneMorphisms public
697738
open RingMorphisms public
698739
open QuasigroupMorphisms public
699740
open LoopMorphisms public
741+
open KleeneAlgebraMorphisms public

0 commit comments

Comments
 (0)