Skip to content

Commit 8b5b303

Browse files
committed
using RawMonoid multiplication
1 parent b28f62d commit 8b5b303

File tree

2 files changed

+82
-62
lines changed

2 files changed

+82
-62
lines changed

src/Function/Endo/Propositional.agda

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ module Function.Endo.Propositional {a} (A : Set a) where
1010

1111
open import Algebra using (Semigroup; Magma; RawMagma; Monoid; RawMonoid)
1212
open import Algebra.Core
13+
import Algebra.Definitions.RawMonoid as RawMonoidDefinitions
14+
import Algebra.Properties.Monoid.Mult as MonoidMultProperties
1315
open import Algebra.Structures using (IsMagma; IsSemigroup; IsMonoid)
1416
open import Algebra.Morphism
1517
using (module Definitions; IsMagmaHomomorphism; IsMonoidHomomorphism)
@@ -19,17 +21,33 @@ open import Data.Nat.Base using (ℕ; zero; suc; _+_; +-rawMagma; +-0-rawMonoid)
1921
open import Data.Nat.Properties using (+-0-monoid; +-semigroup)
2022
open import Data.Product.Base using (_,_)
2123

22-
open import Function.Base using (id; _∘′_; _∋_)
24+
open import Function.Base using (id; _∘′_; _∋_; flip)
2325
open import Function.Bundles using (Func; _⟶ₛ_; _⟨$⟩_)
2426
open import Relation.Binary.Core using (_Preserves_⟶_)
2527
open import Relation.Binary.PropositionalEquality.Core using (_≡_; refl; cong; cong₂)
2628
import Relation.Binary.PropositionalEquality.Properties as ≡
2729

2830
import Function.Endo.Setoid (≡.setoid A) as Setoid
2931

32+
------------------------------------------------------------------------
33+
-- Basic type and raw bundles
34+
3035
Endo : Set a
3136
Endo = A A
3237

38+
private
39+
40+
_∘_ : Op₂ Endo
41+
_∘_ = _∘′_
42+
43+
∘-id-rawMonoid : RawMonoid a a
44+
∘-id-rawMonoid = record { Carrier = Endo; _≈_ = _≡_ ; _∙_ = _∘_ ; ε = id }
45+
46+
open RawMonoid ∘-id-rawMonoid
47+
using ()
48+
renaming (rawMagma to ∘-rawMagma)
49+
50+
3351
------------------------------------------------------------------------
3452
-- Conversion back and forth with the Setoid-based notion of Endomorphism
3553

@@ -42,32 +60,19 @@ toSetoidEndo f = record
4260
; cong = cong f
4361
}
4462

45-
------------------------------------------------------------------------
46-
-- N-th composition
47-
48-
infixr 8 _^_
49-
50-
_^_ : Endo Endo
51-
f ^ zero = id
52-
f ^ suc n = f ∘′ (f ^ n)
53-
54-
^-homo : f Homomorphic₂ ℕ Endo _≡_ (f ^_) _+_ _∘′_
55-
^-homo f zero n = refl
56-
^-homo f (suc m) n = cong (f ∘′_) (^-homo f m n)
57-
5863
------------------------------------------------------------------------
5964
-- Structures
6065

61-
∘-isMagma : IsMagma _≡_ (Op₂ Endo ∋ _∘′_)
66+
∘-isMagma : IsMagma _≡_ _∘_
6267
∘-isMagma = record
6368
{ isEquivalence = ≡.isEquivalence
64-
; ∙-cong = cong₂ _∘_
69+
; ∙-cong = cong₂ _∘_
6570
}
6671

6772
∘-magma : Magma _ _
6873
∘-magma = record { isMagma = ∘-isMagma }
6974

70-
∘-isSemigroup : IsSemigroup _≡_ (Op₂ Endo ∋ _∘′_)
75+
∘-isSemigroup : IsSemigroup _≡_ _∘_
7176
∘-isSemigroup = record
7277
{ isMagma = ∘-isMagma
7378
; assoc = λ _ _ _ refl
@@ -76,7 +81,7 @@ f ^ suc n = f ∘′ (f ^ n)
7681
∘-semigroup : Semigroup _ _
7782
∘-semigroup = record { isSemigroup = ∘-isSemigroup }
7883

79-
∘-id-isMonoid : IsMonoid _≡_ _∘_ id
84+
∘-id-isMonoid : IsMonoid _≡_ _∘_ id
8085
∘-id-isMonoid = record
8186
{ isSemigroup = ∘-isSemigroup
8287
; identity = (λ _ refl) , (λ _ refl)
@@ -85,24 +90,32 @@ f ^ suc n = f ∘′ (f ^ n)
8590
∘-id-monoid : Monoid _ _
8691
∘-id-monoid = record { isMonoid = ∘-id-isMonoid }
8792

88-
private
89-
∘-rawMagma : RawMagma a a
90-
∘-rawMagma = Semigroup.rawMagma ∘-semigroup
93+
------------------------------------------------------------------------
94+
-- n-th iterated composition
9195

92-
∘-id-rawMonoid : RawMonoid a a
93-
∘-id-rawMonoid = Monoid.rawMonoid ∘-id-monoid
96+
infixr 8 _^_
97+
98+
_^_ : Endo Endo
99+
_^_ = flip _×_ where open RawMonoidDefinitions ∘-id-rawMonoid
94100

95101
------------------------------------------------------------------------
96102
-- Homomorphism
97103

98-
^-isMagmaHomomorphism : f IsMagmaHomomorphism +-rawMagma ∘-rawMagma (f ^_)
99-
^-isMagmaHomomorphism f = record
100-
{ isRelHomomorphism = record { cong = cong (f ^_) }
101-
; homo = ^-homo f
102-
}
104+
module _ (f : Endo) where
103105

104-
^-isMonoidHomomorphism : f IsMonoidHomomorphism +-0-rawMonoid ∘-id-rawMonoid (f ^_)
105-
^-isMonoidHomomorphism f = record
106-
{ isMagmaHomomorphism = ^-isMagmaHomomorphism f
107-
; ε-homo = refl
108-
}
106+
open MonoidMultProperties ∘-id-monoid
107+
108+
^-homo : Homomorphic₂ ℕ Endo _≡_ (f ^_) _+_ _∘_
109+
^-homo = ×-homo-+ f
110+
111+
^-isMagmaHomomorphism : IsMagmaHomomorphism +-rawMagma ∘-rawMagma (f ^_)
112+
^-isMagmaHomomorphism = record
113+
{ isRelHomomorphism = record { cong = cong (f ^_) }
114+
; homo = ^-homo
115+
}
116+
117+
^-isMonoidHomomorphism : IsMonoidHomomorphism +-0-rawMonoid ∘-id-rawMonoid (f ^_)
118+
^-isMonoidHomomorphism = record
119+
{ isMagmaHomomorphism = ^-isMagmaHomomorphism
120+
; ε-homo = refl
121+
}

src/Function/Endo/Setoid.agda

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ module Function.Endo.Setoid {c e} (S : Setoid c e) where
1313
open import Agda.Builtin.Equality
1414

1515
open import Algebra using (Semigroup; Magma; RawMagma; Monoid; RawMonoid)
16+
import Algebra.Definitions.RawMonoid as RawMonoidDefinitions
17+
import Algebra.Properties.Monoid.Mult as MonoidMultProperties
1618
open import Algebra.Structures using (IsMagma; IsSemigroup; IsMonoid)
1719
open import Algebra.Morphism
1820
using (module Definitions; IsMagmaHomomorphism; IsMonoidHomomorphism)
@@ -34,30 +36,23 @@ private
3436

3537

3638
------------------------------------------------------------------------
37-
-- Basic type and functions
39+
-- Basic type and raw bundles
3840

3941
Endo : Set _
4042
Endo = S ⟶ₛ S
4143

42-
infixr 8 _^_
43-
4444
private
4545
id : Endo
4646
id = identity S
4747

48-
_^_ : Endo Endo
49-
f ^ zero = id
50-
f ^ suc n = f ∘ (f ^ n)
51-
52-
^-cong₂ : f (f ^_) Preserves _≡_ ⟶ _≈_
53-
^-cong₂ f {n} refl = cong (f ^ n) S.refl
48+
∘-id-rawMonoid : RawMonoid (c ⊔ e) (c ⊔ e)
49+
∘-id-rawMonoid = record { Carrier = Endo; _≈_ = _≈_ ; _∙_ = _∘_ ; ε = id }
5450

55-
^-homo : f Homomorphic₂ ℕ Endo _≈_ (f ^_) _+_ _∘_
56-
^-homo f zero n = S.refl
57-
^-homo f (suc m) zero = ^-cong₂ f (+-identityʳ m)
58-
^-homo f (suc m) (suc n) = ^-homo f m (suc n)
51+
open RawMonoid ∘-id-rawMonoid
52+
using ()
53+
renaming (rawMagma to ∘-rawMagma)
5954

60-
------------------------------------------------------------------------
55+
--------------------------------------------------------------
6156
-- Structures
6257

6358
∘-isMagma : IsMagma _≈_ _∘_
@@ -87,24 +82,36 @@ f ^ suc n = f ∘ (f ^ n)
8782
∘-id-monoid : Monoid (c ⊔ e) (c ⊔ e)
8883
∘-id-monoid = record { isMonoid = ∘-id-isMonoid }
8984

90-
private
91-
∘-rawMagma : RawMagma (c ⊔ e) (c ⊔ e)
92-
∘-rawMagma = Semigroup.rawMagma ∘-semigroup
85+
------------------------------------------------------------------------
86+
-- -- n-th iterated composition
9387

94-
∘-id-rawMonoid : RawMonoid (c ⊔ e) (c ⊔ e)
95-
∘-id-rawMonoid = Monoid.rawMonoid ∘-id-monoid
88+
infixr 8 _^_
89+
90+
_^_ : Endo Endo
91+
f ^ n = n × f where open RawMonoidDefinitions ∘-id-rawMonoid
9692

9793
------------------------------------------------------------------------
9894
-- Homomorphism
9995

100-
^-isMagmaHomomorphism : f IsMagmaHomomorphism +-rawMagma ∘-rawMagma (f ^_)
101-
^-isMagmaHomomorphism f = record
102-
{ isRelHomomorphism = record { cong = ^-cong₂ f }
103-
; homo = ^-homo f
104-
}
96+
module _ (f : Endo) where
97+
98+
open MonoidMultProperties ∘-id-monoid
99+
100+
^-cong₂ : (f ^_) Preserves _≡_ ⟶ _≈_
101+
^-cong₂ = ×-congˡ {f}
102+
103+
^-homo : Homomorphic₂ ℕ Endo _≈_ (f ^_) _+_ _∘_
104+
^-homo = ×-homo-+ f
105+
106+
^-isMagmaHomomorphism : IsMagmaHomomorphism +-rawMagma ∘-rawMagma (f ^_)
107+
^-isMagmaHomomorphism = record
108+
{ isRelHomomorphism = record { cong = ^-cong₂ }
109+
; homo = ^-homo
110+
}
111+
112+
^-isMonoidHomomorphism : IsMonoidHomomorphism +-0-rawMonoid ∘-id-rawMonoid (f ^_)
113+
^-isMonoidHomomorphism = record
114+
{ isMagmaHomomorphism = ^-isMagmaHomomorphism
115+
; ε-homo = S.refl
116+
}
105117

106-
^-isMonoidHomomorphism : f IsMonoidHomomorphism +-0-rawMonoid ∘-id-rawMonoid (f ^_)
107-
^-isMonoidHomomorphism f = record
108-
{ isMagmaHomomorphism = ^-isMagmaHomomorphism f
109-
; ε-homo = S.refl
110-
}

0 commit comments

Comments
 (0)