Skip to content

Commit 6619f11

Browse files
port over two modules
1 parent e72c08e commit 6619f11

File tree

3 files changed

+80
-47
lines changed

3 files changed

+80
-47
lines changed

src/Algebra/Morphism/Structures.agda

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@ module MagmaMorphisms (M₁ : RawMagma a ℓ₁) (M₂ : RawMagma b ℓ₂) wher
6868
; surjective = surjective
6969
}
7070

71+
IsSemigroupHomomorphism : (⟦_⟧ : A B) Set (a ⊔ ℓ₁ ⊔ ℓ₂)
72+
IsSemigroupHomomorphism = IsMagmaHomomorphism
73+
74+
IsSemigroupMonomorphism : (⟦_⟧ : A B) Set (a ⊔ ℓ₁ ⊔ ℓ₂)
75+
IsSemigroupMonomorphism = IsMagmaMonomorphism
76+
77+
IsSemigroupIsomorphism : (⟦_⟧ : A B) Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂)
78+
IsSemigroupIsomorphism = IsMagmaIsomorphism
7179

7280
------------------------------------------------------------------------
7381
-- Morphisms over monoid-like structures

src/Function/Endomorphism/Propositional.agda

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,19 @@
55
------------------------------------------------------------------------
66

77
{-# OPTIONS --cubical-compatible --safe #-}
8-
9-
-- Disabled to prevent warnings from deprecated names
10-
{-# OPTIONS --warn=noUserWarning #-}
11-
128
module Function.Endomorphism.Propositional {a} (A : Set a) where
139

1410
open import Algebra
15-
open import Algebra.Morphism; open Definitions
11+
open import Algebra.Structures
12+
open import Algebra.Morphism
13+
open Definitions
1614

17-
open import Data.Nat.Base using (ℕ; zero; suc; _+_)
15+
open import Data.Nat.Base using (ℕ; _+_; zero; suc; +-rawMagma; +-0-rawMonoid)
1816
open import Data.Nat.Properties using (+-0-monoid; +-semigroup)
1917
open import Data.Product.Base using (_,_)
2018

2119
open import Function.Base using (id; _∘′_; _∋_)
22-
open import Function.Equality using (_⟨$⟩_)
20+
open import Function.Bundles using (Func; _⟶ₛ_; _⟨$⟩_)
2321
open import Relation.Binary.Core using (_Preserves_⟶_)
2422
open import Relation.Binary.PropositionalEquality.Core using (_≡_; refl; cong; cong₂)
2523
import Relation.Binary.PropositionalEquality.Properties as ≡
@@ -37,7 +35,7 @@ fromSetoidEndo = _⟨$⟩_
3735

3836
toSetoidEndo : Endo Setoid.Endo
3937
toSetoidEndo f = record
40-
{ _⟨$⟩_ = f
38+
{ to = f
4139
; cong = cong f
4240
}
4341

@@ -84,17 +82,24 @@ f ^ suc n = f ∘′ (f ^ n)
8482
∘-id-monoid : Monoid _ _
8583
∘-id-monoid = record { isMonoid = ∘-id-isMonoid }
8684

85+
private
86+
∘-rawMagma : RawMagma a a
87+
∘-rawMagma = Semigroup.rawMagma ∘-semigroup
88+
89+
∘-id-rawMonoid : RawMonoid a a
90+
∘-id-rawMonoid = Monoid.rawMonoid ∘-id-monoid
91+
8792
------------------------------------------------------------------------
8893
-- Homomorphism
8994

90-
^-isSemigroupMorphism : f IsSemigroupMorphism +-semigroup ∘-semigroup (f ^_)
95+
^-isSemigroupMorphism : f IsSemigroupHomomorphism +-rawMagma ∘-rawMagma (f ^_)
9196
^-isSemigroupMorphism f = record
92-
{ ⟦⟧-cong = cong (f ^_)
93-
; ∙-homo = ^-homo f
97+
{ isRelHomomorphism = record { cong = cong (f ^_) }
98+
; homo = ^-homo f
9499
}
95-
96-
^-isMonoidMorphism : f IsMonoidMorphism +-0-monoid ∘-id-monoid (f ^_)
100+
101+
^-isMonoidMorphism : f IsMonoidHomomorphism +-0-rawMonoid ∘-id-rawMonoid (f ^_)
97102
^-isMonoidMorphism f = record
98-
{ sm-homo = ^-isSemigroupMorphism f
99-
; ε-homo = refl
103+
{ isMagmaHomomorphism = ^-isSemigroupMorphism f
104+
; ε-homo = refl
100105
}

src/Function/Endomorphism/Setoid.agda

Lines changed: 52 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,90 +6,110 @@
66

77
{-# OPTIONS --cubical-compatible --safe #-}
88

9-
-- Disabled to prevent warnings from deprecated names
10-
{-# OPTIONS --warn=noUserWarning #-}
11-
12-
open import Relation.Binary.Core using (_Preserves_⟶_)
139
open import Relation.Binary.Bundles using (Setoid)
1410

1511
module Function.Endomorphism.Setoid {c e} (S : Setoid c e) where
1612

1713
open import Agda.Builtin.Equality
1814

19-
open import Algebra
20-
open import Algebra.Structures
21-
open import Algebra.Morphism; open Definitions
22-
open import Function.Equality using (setoid; _⟶_; id; _∘_; cong)
23-
open import Data.Nat.Base using (ℕ; _+_); open
24-
open import Data.Nat.Properties
15+
open import Algebra using (Semigroup; Magma; RawMagma; Monoid; RawMonoid)
16+
open import Algebra.Structures using (IsMagma; IsSemigroup; IsMonoid)
17+
open import Algebra.Morphism
18+
using (module Definitions; IsSemigroupHomomorphism; IsMonoidHomomorphism)
19+
open Definitions using (Homomorphic₂)
20+
open import Data.Nat.Base using (ℕ; _+_; +-rawMagma; +-0-rawMonoid)
21+
open
22+
open import Data.Nat.Properties using (+-semigroup; +-identityʳ)
2523
open import Data.Product.Base using (_,_)
26-
27-
import Relation.Binary.Indexed.Heterogeneous.Construct.Trivial as Trivial
24+
open import Function.Bundles using (Func; _⟶ₛ_; _⟨$⟩_)
25+
open import Function.Construct.Identity using () renaming (function to identity)
26+
open import Function.Construct.Composition using () renaming (function to _∘_)
27+
open import Function.Relation.Binary.Setoid.Equality as Eq using (_⇨_)
28+
open import Level using (Level; _⊔_)
29+
open import Relation.Binary.Core using (_Preserves_⟶_)
2830

2931
private
30-
module E = Setoid (setoid S (Trivial.indexedSetoid S))
32+
module E = Setoid (S ⇨ S)
3133
open E hiding (refl)
32-
34+
open Func using (cong)
3335
------------------------------------------------------------------------
3436
-- Basic type and functions
3537

3638
Endo : Set _
37-
Endo = S ⟶ S
39+
Endo = S ⟶ S
3840

3941
infixr 8 _^_
4042

43+
private
44+
id : Endo
45+
id = identity S
46+
4147
_^_ : Endo Endo
4248
f ^ zero = id
4349
f ^ suc n = f ∘ (f ^ n)
4450

4551
^-cong₂ : f (f ^_) Preserves _≡_ ⟶ _≈_
46-
^-cong₂ f {n} refl = cong (f ^ n)
52+
^-cong₂ f {n} refl = cong (f ^ n) (Setoid.refl S)
4753

4854
^-homo : f Homomorphic₂ ℕ Endo _≈_ (f ^_) _+_ _∘_
49-
^-homo f zero n x≈y = cong (f ^ n) x≈y
50-
^-homo f (suc m) n x≈y = cong f (^-homo f m n x≈y)
55+
^-homo f zero n = Setoid.refl S
56+
^-homo f (suc m) zero = ^-cong₂ f (+-identityʳ m)
57+
^-homo f (suc m) (suc n) = ^-homo f m (suc n)
5158

5259
------------------------------------------------------------------------
5360
-- Structures
5461

5562
∘-isMagma : IsMagma _≈_ _∘_
5663
∘-isMagma = record
5764
{ isEquivalence = isEquivalence
58-
; ∙-cong = λ g f x g (f x)
65+
; ∙-cong = λ {_} {_} {_} {v} x≈y u≈v S.trans u≈v (cong v x≈y)
5966
}
67+
where
68+
module S = Setoid S
6069

61-
∘-magma : Magma _ _
70+
∘-magma : Magma (c ⊔ e) (c ⊔ e)
6271
∘-magma = record { isMagma = ∘-isMagma }
6372

6473
∘-isSemigroup : IsSemigroup _≈_ _∘_
6574
∘-isSemigroup = record
6675
{ isMagma = ∘-isMagma
67-
; assoc = λ h g f x≈y cong h (cong g (cong f x≈y))
76+
; assoc = λ h g f {s} Setoid.refl S
6877
}
6978

70-
∘-semigroup : Semigroup _ _
79+
∘-semigroup : Semigroup (c ⊔ e) (c ⊔ e)
7180
∘-semigroup = record { isSemigroup = ∘-isSemigroup }
7281

7382
∘-id-isMonoid : IsMonoid _≈_ _∘_ id
7483
∘-id-isMonoid = record
7584
{ isSemigroup = ∘-isSemigroup
76-
; identity = cong , cong
85+
; identity = (λ f Setoid.refl S) , (λ _ Setoid.refl S)
7786
}
7887

79-
∘-id-monoid : Monoid _ _
88+
∘-id-monoid : Monoid (c ⊔ e) (c ⊔ e)
8089
∘-id-monoid = record { isMonoid = ∘-id-isMonoid }
8190

91+
private
92+
∘-rawMagma : RawMagma (c ⊔ e) (c ⊔ e)
93+
∘-rawMagma = Semigroup.rawMagma ∘-semigroup
94+
95+
∘-id-rawMonoid : RawMonoid (c ⊔ e) (c ⊔ e)
96+
∘-id-rawMonoid = Monoid.rawMonoid ∘-id-monoid
97+
8298
------------------------------------------------------------------------
8399
-- Homomorphism
84100

85-
^-isSemigroupMorphism : f IsSemigroupMorphism +-semigroup ∘-semigroup (f ^_)
86-
^-isSemigroupMorphism f = record
87-
{ ⟦⟧-cong = ^-cong₂ f
88-
; ∙-homo = ^-homo f
101+
^-isSemigroupHomomorphism : f IsSemigroupHomomorphism +-rawMagma ∘-rawMagma (f ^_)
102+
^-isSemigroupHomomorphism f = record
103+
{ isRelHomomorphism = record { cong = ^-cong₂ f }
104+
; homo = ^-homo f
89105
}
90106

91-
^-isMonoidMorphism : f IsMonoidMorphism +-0-monoid ∘-id-monoid (f ^_)
92-
^-isMonoidMorphism f = record
93-
{ sm-homo = ^-isSemigroupMorphism f
94-
; ε-homo = λ x≈y x≈y
107+
^-isMonoidHomoorphism : f IsMonoidHomomorphism +-0-rawMonoid ∘-id-rawMonoid (f ^_)
108+
^-isMonoidHomoorphism f = record
109+
{ isMagmaHomomorphism = record
110+
{ isRelHomomorphism = record { cong = ^-cong₂ f }
111+
; homo = ^-homo f
112+
}
113+
; ε-homo = Setoid.refl S
95114
}
115+

0 commit comments

Comments
 (0)