Skip to content

Commit ba2bf2f

Browse files
committed
refactor: polish the McBride monad
1 parent b3495c8 commit ba2bf2f

2 files changed

Lines changed: 30 additions & 28 deletions

File tree

src/Mugen/Algebra/Displacement.agda

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ record is-displacement
5050

5151
open is-monoid has-is-monoid hiding (has-is-set) public
5252

53+
abstract
54+
right-contract : {x e} e ≤ ε (x ⊗ e) ≤ x
55+
right-contract e≤ε = ≤+=→≤ (left-invariant e≤ε) idr
56+
57+
right-expand : {x e} ε ≤ e x ≤ (x ⊗ e)
58+
right-expand ε≤e = =+≤→≤ (sym idr) (left-invariant ε≤e)
59+
5360
record Displacement-on (A : Poset o r) : Type (o ⊔ lsuc r) where
5461
field
5562
ε : ⌞ A ⌟

src/Mugen/Cat/HierarchyTheory/McBride.agda

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,22 @@ module _ {A : Poset o r} (𝒟 : Displacement-on A) where
3434
private
3535
module ⋉A (L : Poset o (o ⊔ r)) = LeftInvariantRightCentred L A ε
3636

37+
⋉A-map-fst : {L N : Poset o (o ⊔ r)} Strictly-monotone L N Strictly-monotone (⋉A.poset L) (⋉A.poset N)
38+
⋉A-map-fst f .hom (l , d) = f .hom l , d
39+
⋉A-map-fst {L} f .pres-≤[]-equal {l1 , d1} {l2 , d2} =
40+
let module N⋉A = Reasoning (⋉A.poset _) in
41+
∥-∥-rec (N⋉A.≤[]-is-hlevel 0 $ Poset.Ob-is-set (⋉A.poset L) _ _) λ where
42+
(⋉A.biased l1=l2 d1≤d2)
43+
inc (⋉A.biased (ap (f .hom) l1=l2) d1≤d2) , λ p ap₂ _,_ l1=l2 (ap snd p)
44+
(⋉A.centred l1≤l2 d1≤ε ε≤d2)
45+
inc (⋉A.centred (pres-≤ f l1≤l2) d1≤ε ε≤d2) , λ p
46+
ap₂ _,_ (injective-on-related f l1≤l2 (ap fst p)) (ap snd p)
47+
3748
McBride : Hierarchy-theory-on _
3849
McBride = ht where
3950
M : Functor (Strict-orders o (o ⊔ r)) (Strict-orders o (o ⊔ r))
4051
M .F₀ L = ⋉A.poset L
41-
M .F₁ f .hom (l , d) = (f .hom l) , d
42-
M .F₁ {L} {N} f .pres-≤[]-equal {l1 , d1} {l2 , d2} =
43-
let module N⋉A = Reasoning (⋉A.poset N) in
44-
∥-∥-rec (N⋉A.≤[]-is-hlevel 0 $ Poset.Ob-is-set (⋉A.poset L) _ _) λ where
45-
(⋉A.biased l1=l2 d1≤d2) inc (⋉A.biased (ap (f .hom) l1=l2) d1≤d2) , λ p ap₂ _,_ l1=l2 (ap snd p)
46-
(⋉A.centred l1≤l2 d1≤ε ε≤d2) inc (⋉A.centred (pres-≤ f l1≤l2) d1≤ε ε≤d2) , λ p
47-
ap₂ _,_ (injective-on-related f l1≤l2 (ap fst p)) (ap snd p)
52+
M .F₁ = ⋉A-map-fst
4853
M .F-id = trivial!
4954
M .F-∘ f g = trivial!
5055

@@ -57,35 +62,25 @@ module _ {A : Poset o r} (𝒟 : Displacement-on A) where
5762
mult .η L .hom ((l , x) , y) = l , (x ⊗ y)
5863
mult .η L .pres-≤[]-equal {(a1 , d1) , e1} {(a2 , d2) , e2} =
5964
let module L⋉A = Reasoning (⋉A.poset L) in
60-
∥-∥-rec (L⋉A.≤[]-is-hlevel 0 $ Poset.Ob-is-set (M .F₀ (M .F₀ L)) _ _) lemma where
61-
lemma : ⋉A._≤'_ (M .F₀ L) ((a1 , d1) , e1) ((a2 , d2) , e2)
65+
∥-∥-rec (L⋉A.≤[]-is-hlevel 0 $ Poset.Ob-is-set (M .F₀ (M .F₀ L)) _ _) mult-pres where
66+
mult-pres : ⋉A._≤'_ (M .F₀ L) ((a1 , d1) , e1) ((a2 , d2) , e2)
6267
⋉A._≤_ L (a1 , (d1 ⊗ e1)) (a2 , (d2 ⊗ e2))
6368
× ((a1 , (d1 ⊗ e1)) ≡ (a2 , (d2 ⊗ e2)) ((a1 , d1) , e1) ≡ ((a2 , d2) , e2))
64-
lemma (⋉A.biased ad1=ad2 e1≤e2) =
69+
mult-pres (⋉A.biased ad1=ad2 e1≤e2) =
6570
inc (⋉A.biased (ap fst ad1=ad2) (=+≤→≤ (ap (_⊗ e1) (ap snd ad1=ad2)) (left-invariant e1≤e2))) ,
6671
λ p i ad1=ad2 i , injectiver-on-related e1≤e2 (ap snd p ∙ ap (_⊗ e2) (sym $ ap snd ad1=ad2)) i
67-
lemma (⋉A.centred ad1≤ad2 e1≤ε ε≤e2) = ∥-∥-map lemma₂ ad1≤ad2 , lemma₃ where
68-
d1⊗e1≤d1 : (d1 ⊗ e1) ≤ d1
69-
d1⊗e1≤d1 = ≤+=→≤ (left-invariant e1≤ε) idr
70-
71-
d2≤d2⊗e2 : d2 ≤ (d2 ⊗ e2)
72-
d2≤d2⊗e2 = =+≤→≤ (sym idr) (left-invariant ε≤e2)
73-
74-
lemma₂ : ⋉A._≤'_ L (a1 , d1) (a2 , d2)
75-
⋉A._≤'_ L (a1 , (d1 ⊗ e1)) (a2 , (d2 ⊗ e2))
76-
lemma₂ (⋉A.biased a1=a2 d1≤d2) = ⋉A.biased a1=a2 (≤-trans d1⊗e1≤d1 (≤-trans d1≤d2 d2≤d2⊗e2))
77-
lemma₂ (⋉A.centred a1≤a2 d1≤ε ε≤d2) = ⋉A.centred a1≤a2 (≤-trans d1⊗e1≤d1 d1≤ε) (≤-trans ε≤d2 d2≤d2⊗e2)
78-
79-
lemma₃ : (a1 , (d1 ⊗ e1)) ≡ (a2 , (d2 ⊗ e2)) ((a1 , d1) , e1) ≡ ((a2 , d2) , e2)
80-
lemma₃ p i = (a1=a2 i , d1=d2 i) , e1=e2 i where
81-
a1=a2 : a1 ≡ a2
82-
a1=a2 = ap fst p
72+
mult-pres (⋉A.centred ad1≤ad2 e1≤ε ε≤e2) = ∥-∥-map push-⊗ ad1≤ad2 , mult-inj where
73+
push-⊗ : ⋉A._≤'_ L (a1 , d1) (a2 , d2) ⋉A._≤'_ L (a1 , (d1 ⊗ e1)) (a2 , (d2 ⊗ e2))
74+
push-⊗ (⋉A.biased a1=a2 d1≤d2) = ⋉A.biased a1=a2 (≤-trans (right-contract e1≤ε) (≤-trans d1≤d2 (right-expand ε≤e2)))
75+
push-⊗ (⋉A.centred a1≤a2 d1≤ε ε≤d2) = ⋉A.centred a1≤a2 (≤-trans (right-contract e1≤ε) d1≤ε) (≤-trans ε≤d2 (right-expand ε≤e2))
8376

77+
mult-inj : (a1 , (d1 ⊗ e1)) ≡ (a2 , (d2 ⊗ e2)) ((a1 , d1) , e1) ≡ ((a2 , d2) , e2)
78+
mult-inj p i = (fst (p i) , d1=d2 i) , e1=e2 i where
8479
d2≤d1 : d2 ≤ d1
8580
d2≤d1 = begin-≤
86-
d2 ≤⟨ d2≤d2⊗e2 ⟩
81+
d2 ≤⟨ right-expand ε≤e2 ⟩
8782
d2 ⊗ e2 ≐⟨ sym $ ap snd p ⟩
88-
d1 ⊗ e1 ≤⟨ d1⊗e1≤d1
83+
d1 ⊗ e1 ≤⟨ right-contract e1≤ε
8984
d1 ≤∎
9085

9186
d1=d2 : d1 ≡ d2

0 commit comments

Comments
 (0)