{-# OPTIONS --safe --cubical-compatible --guardedness --exact-split --double-check #-}
module ALMA.Cosmos.Carried.NontrivialPushTowerS where
open import Agda.Primitive using (Level; lzero; lsuc)
open import Agda.Builtin.Sigma using (Σ; _,_)
open import Agda.Builtin.Equality using (_≡_; refl)
open import Data.Product.Base using (proj₁; proj₂)
open import Data.Nat.Base using (ℕ; zero; suc; _+_)
open import Data.Nat.Properties using (+-comm)
open import Data.Fin.Base using (Fin; zero; suc; inject₁; toℕ)
open import Data.Unit.Polymorphic.Base using (⊤; tt)
open import Data.Sum.Base using (_⊎_; inj₁; inj₂)
open import Data.Empty using (⊥)
open import Relation.Nullary.Negation using (¬_)
open import Relation.Binary.PropositionalEquality.Core using (cong; trans; sym)
open import Categories.Category.Core using (Category)
open import Categories.Functor using (Functor)
open import ALMA.Base.MCorr using (M)
open import ALMA.Base.MCorrSetoid using
(SysEq; EqOn; propEqOn; _≈Mˢ_; ≈Mˢ-refl; ≈Mˢ-sym; ≈Mˢ-trans; idAdjˢ)
open import ALMA.Base.MCorrSetoidPush using (PushSimˢ)
open import ALMA.Base.MCorrSetoidCat using
(FMapˢ; FMˢ; compFMˢ; compFˢ; mapFˢ-comp; _≈FM_; relocateˢ; relocate-resp-≈Mˢ)
open import ALMA.Cosmos.Carried.ColimitPolarity using (no-FM-nonsurjective)
open import ALMA.Cosmos.Carried.SeqColimitS using (Chainˢ; Coconeˢ; Limitˢ)
open import ALMA.Cosmos.Carried.SeqColimitCat using (Chain⇒; ωCat; _∘ch_)
import ALMA.Cosmos.Carried.SeqColimitCat as SQC
open import ALMA.Cosmos.Carried.SameIndexCatS using
(LabelSys; dsys; Idx⇒; idxi; compi; _≈i_; ≈i-refl; ≈i-sym; ≈i-trans
; ∘-resp-≈i; assoc-i; identityˡ-i; identityʳ-i; SameIndexCat)
open import ALMA.Cosmos.Carried.LimitSystemS using (n-at)
import ALMA.Cosmos.Carried.LimitSystemS as LS
open SysEq
up : ∀ {n} → Fin n → Fin (suc n)
up zero = zero
up (suc i) = suc (up i)
up-toℕ : ∀ {n} (x : Fin n) → toℕ (up x) ≡ toℕ x
up-toℕ zero = refl
up-toℕ (suc x) = cong suc (up-toℕ x)
up-inject₁ : ∀ {n} (x : Fin n) → up x ≡ inject₁ x
up-inject₁ zero = refl
up-inject₁ (suc x) = cong suc (up-inject₁ x)
record LabeledFinTower (ℓ : Level) : Set (lsuc ℓ) where
field
t : (m : ℕ) → Fin (n-at m) → Fin (n-at m)
L : (m : ℕ) → ℕ → Set ℓ
l-emb : (m v : ℕ) → L m v → L (suc m) v
embed-compat :
(m : ℕ) (x : Fin (n-at m))
→ t (suc m) (inject₁ x) ≡ inject₁ (t m x)
module Tower {ℓ : Level} (T : LabeledFinTower ℓ) where
open LabeledFinTower T
open LS.LimitSystemS t embed-compat using (s∞; read-coh)
LStage : (m : ℕ) → SysEq lzero ℓ lzero ℓ lzero
LStage m = record
{ I = Fin (n-at m)
; A = λ x → L m (toℕ x)
; E = λ x _ y → Σ (⊤ {lzero}) λ _ → y ≡ t m x
; ≈A = λ x → propEqOn (L m (toℕ x))
; ≈E = λ x _ y → propEqOn (Σ (⊤ {lzero}) λ _ → y ≡ t m x)
}
orbit : (m : ℕ) (x : Fin (n-at m)) (lab : ∀ v → L m v)
→ M (A (LStage m)) (E (LStage m)) x
orbit m x lab .M.here = lab (toℕ x)
orbit m x lab .M.below y _ = orbit m y lab
up-compat : (m : ℕ) (x : Fin (n-at m))
→ t (suc m) (up x) ≡ up (t m x)
up-compat m x =
trans (cong (t (suc m)) (up-inject₁ x))
(trans (embed-compat m x) (sym (up-inject₁ (t m x))))
R-emb : (m : ℕ) → Fin (n-at m) → Fin (n-at (suc m)) → Set lzero
R-emb m x y = up x ≡ y
H-emb : (m : ℕ) (x : Fin (n-at m)) (y : Fin (n-at (suc m)))
→ R-emb m x y
→ A (LStage m) x → A (LStage (suc m)) y → Set ℓ
H-emb m x .(up x) refl a b rewrite up-toℕ x =
l-emb m (toℕ x) a ≡ b
emb-sim : (m : ℕ) (lab : ∀ v → L m v) (lab₁ : ∀ v → L (suc m) v)
→ (coh : ∀ v → l-emb m v (lab v) ≡ lab₁ v)
→ (x : Fin (n-at m))
→ PushSimˢ (LStage m) (LStage (suc m)) (R-emb m) (H-emb m)
refl (orbit m x lab) (orbit (suc m) (up x) lab₁)
emb-sim m lab lab₁ coh x .PushSimˢ.here-eq rewrite up-toℕ x =
coh (toℕ x)
emb-sim m lab lab₁ coh x .PushSimˢ.push y (_ , eq) =
up y , ((tt , edge) , (refl , emb-sim m lab lab₁ coh y))
where
edge : up y ≡ t (suc m) (up x)
edge = trans (cong up eq) (sym (up-compat m x))
record Thread (v : ℕ) : Set ℓ where
inductive
constructor mk
field
stage : ℕ
tlabel : L stage v
open Thread public
extend : ∀ {v} → Thread v → Thread v
extend {v} (mk m a) = mk (suc m) (l-emb m v a)
extend^ : ∀ {v} → ℕ → Thread v → Thread v
extend^ zero t = t
extend^ (suc n) t = extend (extend^ n t)
thread-at : (v : ℕ) (m : ℕ) → L m v → Thread v
thread-at v m a = mk m a
record _≈Thread_ {v : ℕ} (t u : Thread v) : Set ℓ where
field
dl : ℕ
dr : ℕ
same : extend^ dl t ≡ extend^ dr u
open _≈Thread_
extend^-comp : ∀ {v} (a b : ℕ) (t : Thread v)
→ extend^ a (extend^ b t) ≡ extend^ (a + b) t
extend^-comp zero b t = refl
extend^-comp (suc a) b t = cong extend (extend^-comp a b t)
iter-add-comm : ∀ {v} (a b : ℕ) (t : Thread v)
→ extend^ (a + b) t ≡ extend^ (b + a) t
iter-add-comm a b t rewrite +-comm a b = refl
≈Thread-refl : ∀ {v} {t : Thread v} → t ≈Thread t
≈Thread-refl = record { dl = zero ; dr = zero ; same = refl }
≈Thread-sym : ∀ {v} {t u : Thread v} → t ≈Thread u → u ≈Thread t
≈Thread-sym p = record { dl = dr p ; dr = dl p ; same = sym (same p) }
≈Thread-trans : ∀ {v} {t u w : Thread v}
→ t ≈Thread u → u ≈Thread w → t ≈Thread w
≈Thread-trans {u = u} p q = record
{ dl = c + a
; dr = b + d
; same =
trans (sym (extend^-comp c a _))
(trans (cong (extend^ c) (same p))
(trans (extend^-comp c b u)
(trans (iter-add-comm c b u)
(trans (sym (extend^-comp b c u))
(trans (cong (extend^ b) (same q))
(extend^-comp b d _))))))
}
where
a = dl p ; b = dr p ; c = dl q ; d = dr q
≈A∞ : (v : ℕ) → EqOn {ℓ = ℓ} (Thread v)
≈A∞ v = record
{ _≈_ = _≈Thread_
; isEquivalence = record
{ refl = ≈Thread-refl
; sym = ≈Thread-sym
; trans = ≈Thread-trans
}
}
nsys : (A₀ : ℕ → Set ℓ) → ((v : ℕ) → EqOn {ℓ = ℓ} (A₀ v))
→ SysEq lzero ℓ lzero ℓ lzero
nsys A₀ ≈A₀ = record
{ I = ℕ
; A = A₀
; E = λ v _ w → Σ (⊤ {lzero}) λ _ → w ≡ s∞ v
; ≈A = ≈A₀
; ≈E = λ v _ w → propEqOn (Σ (⊤ {lzero}) λ _ → w ≡ s∞ v)
}
L∞ : SysEq lzero ℓ lzero ℓ lzero
L∞ = nsys Thread ≈A∞
NStage : (m : ℕ) → SysEq lzero ℓ lzero ℓ lzero
NStage m = nsys (L m) (λ v → propEqOn (L m v))
Rn : ℕ → ℕ → Set lzero
Rn v w = v ≡ w
Hn : (m v w : ℕ) → Rn v w → L m v → L (suc m) w → Set ℓ
Hn m v .v refl a b = l-emb m v a ≡ b
Rl : ℕ → ℕ → Set lzero
Rl v w = v ≡ w
Hl : (m v w : ℕ) → Rl v w → L m v → Thread w → Set ℓ
Hl m v .v refl a τ = τ ≈Thread mk m a
idxFM : (A₀ : ℕ → Set ℓ) (≈A₀ : (v : ℕ) → EqOn {ℓ = ℓ} (A₀ v))
(A₁ : ℕ → Set ℓ) (≈A₁ : (v : ℕ) → EqOn {ℓ = ℓ} (A₁ v))
(sh : (v : ℕ) → A₀ v → A₁ v)
(shc : ∀ {v : ℕ} {a a' : A₀ v}
→ EqOn._≈_ (≈A₀ v) a a'
→ EqOn._≈_ (≈A₁ v) (sh v a) (sh v a'))
→ FMˢ (nsys A₀ ≈A₀) (nsys A₁ ≈A₁)
idxFM A₀ ≈A₀ A₁ ≈A₁ sh shc = record
{ mor = fmor
; shape-cong = λ e → shc e
; map-cong = go
}
where
fmor : FMapˢ (nsys A₀ ≈A₀) (nsys A₁ ≈A₁)
fmor = record
{ u = λ v → v
; shape = sh
; childF = λ v _ w → w , refl
; adjFˢ = λ v a w → idAdjˢ (≈E (nsys A₁ ≈A₁) v (sh v a) w)
}
mutual
go : ∀ {v : ℕ} {t s : M A₀ (E (nsys A₀ ≈A₀)) v}
→ _≈Mˢ_ ≈A₀ (≈E (nsys A₀ ≈A₀)) t s
→ _≈Mˢ_ ≈A₁ (≈E (nsys A₁ ≈A₁))
(FMapˢ.mapFˢ fmor v t) (FMapˢ.mapFˢ fmor v s)
go p ._≈Mˢ_.here-eq = shc (_≈Mˢ_.here-eq p)
go p ._≈Mˢ_.below-eq w =
let adj , fs = _≈Mˢ_.below-eq p w
fwd , bwd = fs
in adj , ((λ e₁ → go (fwd e₁)) , (λ e₂ → go (bwd e₂)))
embFM : (m : ℕ) → FMˢ (NStage m) (NStage (suc m))
embFM m =
idxFM (L m) (λ v → propEqOn (L m v))
(L (suc m)) (λ v → propEqOn (L (suc m) v))
(λ v a → l-emb m v a) (λ {v} e → cong (l-emb m v) e)
leg-shc : ∀ {m v : ℕ} {a a' : L m v}
→ a ≡ a' → mk m a ≈Thread mk m a'
leg-shc refl = ≈Thread-refl
legFM : (m : ℕ) → FMˢ (NStage m) L∞
legFM m =
idxFM (L m) (λ v → propEqOn (L m v)) Thread ≈A∞
(λ v a → mk m a) leg-shc
nchain : Chainˢ lzero ℓ lzero ℓ lzero
nchain = record { X = NStage ; emb = embFM }
nlimit : Limitˢ nchain
nlimit = record
{ L = L∞
; inj-u = λ _ v → v
; inj-shape = λ m v a → mk m a
; inj-coh = λ _ _ → refl
; rep = λ v → v , v , refl
}
one-ray : ∀ (m v : ℕ) (a : L m v)
→ mk (suc m) (l-emb m v a) ≈Thread mk m a
one-ray m v a = record { dl = zero ; dr = suc zero ; same = refl }
mutual
coh-go : ∀ (m v : ℕ) (t : M (A (NStage m)) (E (NStage m)) v)
→ _≈Mˢ_ (≈A L∞) (≈E L∞)
(FMapˢ.mapFˢ (FMˢ.mor
(compFMˢ (legFM (suc m)) (embFM m))) v t)
(FMapˢ.mapFˢ (FMˢ.mor (legFM m)) v t)
coh-go m v t ._≈Mˢ_.here-eq = one-ray m v (M.here t)
coh-go m v t ._≈Mˢ_.below-eq w =
idAdjˢ (propEqOn (Σ (⊤ {lzero}) λ _ → w ≡ s∞ v))
, ( (λ e₁ → coh-go m w (M.below t w e₁))
, (λ e₂ → coh-go˘ m w (M.below t w e₂)) )
coh-go˘ : ∀ (m v : ℕ) (t : M (A (NStage m)) (E (NStage m)) v)
→ _≈Mˢ_ (≈A L∞) (≈E L∞)
(FMapˢ.mapFˢ (FMˢ.mor (legFM m)) v t)
(FMapˢ.mapFˢ (FMˢ.mor
(compFMˢ (legFM (suc m)) (embFM m))) v t)
coh-go˘ m v t ._≈Mˢ_.here-eq =
EqOn.sym (≈A L∞ v) (one-ray m v (M.here t))
coh-go˘ m v t ._≈Mˢ_.below-eq w =
idAdjˢ (propEqOn (Σ (⊤ {lzero}) λ _ → w ≡ s∞ v))
, ( (λ e₁ → coh-go˘ m w (M.below t w e₁))
, (λ e₂ → coh-go m w (M.below t w e₂)) )
leg-coh-one : (m : ℕ)
→ compFMˢ (legFM (suc m)) (embFM m) ≈FM legFM m
leg-coh-one m v = refl , coh-go m v
ncocone : Coconeˢ nchain L∞
ncocone = record { leg = legFM ; coh = leg-coh-one }
module WithLabelling
(lab : (m v : ℕ) → L m v)
(lab-coh : (m v : ℕ) → lab (suc m) v ≡ l-emb m v (lab m v))
where
orbit∞ : (v : ℕ) → M (A L∞) (E L∞) v
orbit∞ v .M.here = mk v (lab v v)
orbit∞ v .M.below w _ = orbit∞ w
forward-to : (k m v : ℕ)
→ extend^ k (mk m (lab m v)) ≡ mk (k + m) (lab (k + m) v)
forward-to zero m v = refl
forward-to (suc k) m v =
trans (cong extend (forward-to k m v))
(cong (mk (suc (k + m))) (sym (lab-coh (k + m) v)))
leg-here : (m v : ℕ) → mk v (lab v v) ≈Thread mk m (lab m v)
leg-here m v = record { dl = m ; dr = v ; same = goal }
where
mk-eq : mk (m + v) (lab (m + v) v) ≡ mk (v + m) (lab (v + m) v)
mk-eq rewrite +-comm m v = refl
goal : extend^ m (mk v (lab v v)) ≡ extend^ v (mk m (lab m v))
goal = trans (forward-to m v v)
(trans mk-eq (sym (forward-to v m v)))
Rₙ : (m : ℕ) → Fin (n-at m) → ℕ → Set lzero
Rₙ m x v = toℕ x ≡ v
Hₙ : (m : ℕ) (x : Fin (n-at m)) (v : ℕ) → Rₙ m x v
→ A (LStage m) x → Thread v → Set ℓ
Hₙ m x .(toℕ x) refl a τ = τ ≈Thread mk m a
legₙ : (m : ℕ) (x : Fin (n-at m))
→ PushSimˢ (LStage m) L∞ (Rₙ m) (Hₙ m) refl
(orbit m x (lab m)) (orbit∞ (toℕ x))
legₙ m x .PushSimˢ.here-eq = leg-here m (toℕ x)
legₙ m x .PushSimˢ.push y (_ , eq) =
toℕ y , ((tt , edge) , (refl , legₙ m y))
where
edge : toℕ y ≡ s∞ (toℕ x)
edge = trans (cong toℕ eq) (read-coh m x)
norbit : (m v : ℕ) → M (A (NStage m)) (E (NStage m)) v
norbit m v .M.here = lab m v
norbit m v .M.below w _ = norbit m w
stage-ray : (m v : ℕ) (a : L m v)
→ M (A (NStage m)) (E (NStage m)) v
stage-ray m v a .M.here = a
stage-ray m v a .M.below w _ = norbit m w
n-sim : (m v : ℕ)
→ PushSimˢ (NStage m) (NStage (suc m)) Rn (Hn m) refl
(norbit m v) (norbit (suc m) v)
n-sim m v .PushSimˢ.here-eq = sym (lab-coh m v)
n-sim m v .PushSimˢ.push w (_ , eq) =
w , ((tt , eq) , (refl , n-sim m w))
nleg : (m v : ℕ)
→ PushSimˢ (NStage m) L∞ Rl (Hl m) refl
(norbit m v) (orbit∞ v)
nleg m v .PushSimˢ.here-eq = leg-here m v
nleg m v .PushSimˢ.push w (_ , eq) =
w , ((tt , eq) , (refl , nleg m w))
mutual
legray-go : (m v : ℕ)
→ _≈Mˢ_ (≈A L∞) (≈E L∞)
(FMapˢ.mapFˢ (FMˢ.mor (legFM m)) v (norbit m v))
(orbit∞ v)
legray-go m v ._≈Mˢ_.here-eq = ≈Thread-sym (leg-here m v)
legray-go m v ._≈Mˢ_.below-eq w =
idAdjˢ (≈E L∞ v (mk m (lab m v)) w)
, ( (λ _ → legray-go m w)
, (λ _ → legray-go˘ m w) )
legray-go˘ : (m v : ℕ)
→ _≈Mˢ_ (≈A L∞) (≈E L∞)
(orbit∞ v)
(FMapˢ.mapFˢ (FMˢ.mor (legFM m)) v (norbit m v))
legray-go˘ m v ._≈Mˢ_.here-eq = leg-here m v
legray-go˘ m v ._≈Mˢ_.below-eq w =
idAdjˢ (≈E L∞ v (mk v (lab v v)) w)
, ( (λ _ → legray-go˘ m w)
, (λ _ → legray-go m w) )
module SameIndexMediate
(ZL : ℕ → Set ℓ)
(≈ZL : (v : ℕ) → EqOn {ℓ = ℓ} (ZL v))
(zm : (m v : ℕ) → L m v → ZL v)
(zm-coh : (m v : ℕ) (a : L m v)
→ EqOn._≈_ (≈ZL v)
(zm (suc m) v (l-emb m v a)) (zm m v a))
where
Z : SysEq lzero ℓ lzero ℓ lzero
Z = record
{ I = ℕ
; A = ZL
; E = λ v _ w → Σ (⊤ {lzero}) λ _ → w ≡ s∞ v
; ≈A = ≈ZL
; ≈E = λ v _ w → propEqOn (Σ (⊤ {lzero}) λ _ → w ≡ s∞ v)
}
orbit-of : (zl : (v : ℕ) → ZL v) (v : ℕ)
→ M (A Z) (E Z) v
orbit-of zl v .M.here = zl v
orbit-of zl v .M.below w _ = orbit-of zl w
eval∞ : (v : ℕ) → ZL v
eval∞ v = zm v v (lab v v)
zorbit : (v : ℕ) → M (A Z) (E Z) v
zorbit = orbit-of eval∞
zorbit-stage : (m v : ℕ) → M (A Z) (E Z) v
zorbit-stage m = orbit-of (λ v → zm m v (lab m v))
Rz : ℕ → ℕ → Set lzero
Rz v w = v ≡ w
Hz : (m v w : ℕ) → Rz v w → L m v → ZL w → Set ℓ
Hz m v .v refl a b = EqOn._≈_ (≈ZL v) b (zm m v a)
zleg : (m v : ℕ)
→ PushSimˢ (NStage m) Z Rz (Hz m) refl
(norbit m v) (zorbit-stage m v)
zleg m v .PushSimˢ.here-eq = EqOn.refl (≈ZL v)
zleg m v .PushSimˢ.push w (_ , eq) =
w , ((tt , eq) , (refl , zleg m w))
eval-ray : ∀ {v : ℕ} → Thread v → ZL v
eval-ray {v} (mk m a) = zm m v a
H∞ : (v w : ℕ) → Rz v w → Thread v → ZL w → Set ℓ
H∞ v .v refl τ b = EqOn._≈_ (≈ZL v) b (eval-ray τ)
zmed : (v : ℕ)
→ PushSimˢ L∞ Z Rz H∞ refl (orbit∞ v) (zorbit v)
zmed v .PushSimˢ.here-eq = EqOn.refl (≈ZL v)
zmed v .PushSimˢ.push w (_ , eq) =
w , ((tt , eq) , (refl , zmed w))
mutual
orb-bisim : (zl₁ zl₂ : (v : ℕ) → ZL v)
→ (he : (v : ℕ) → EqOn._≈_ (≈ZL v) (zl₁ v) (zl₂ v))
→ (v : ℕ)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(orbit-of zl₁ v) (orbit-of zl₂ v)
orb-bisim zl₁ zl₂ he v ._≈Mˢ_.here-eq = he v
orb-bisim zl₁ zl₂ he v ._≈Mˢ_.below-eq w =
idAdjˢ (propEqOn (Σ (⊤ {lzero}) λ _ → w ≡ s∞ v))
, ( (λ _ → orb-bisim zl₁ zl₂ he w)
, (λ _ → orb-bisim˘ zl₁ zl₂ he w) )
orb-bisim˘ : (zl₁ zl₂ : (v : ℕ) → ZL v)
→ (he : (v : ℕ) → EqOn._≈_ (≈ZL v) (zl₁ v) (zl₂ v))
→ (v : ℕ)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(orbit-of zl₂ v) (orbit-of zl₁ v)
orb-bisim˘ zl₁ zl₂ he v ._≈Mˢ_.here-eq =
EqOn.sym (≈ZL v) (he v)
orb-bisim˘ zl₁ zl₂ he v ._≈Mˢ_.below-eq w =
idAdjˢ (propEqOn (Σ (⊤ {lzero}) λ _ → w ≡ s∞ v))
, ( (λ _ → orb-bisim˘ zl₁ zl₂ he w)
, (λ _ → orb-bisim zl₁ zl₂ he w) )
mediate-unique : (zl : (v : ℕ) → ZL v)
→ (he : (v : ℕ) → EqOn._≈_ (≈ZL v) (zl v) (eval∞ v))
→ (v : ℕ)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(orbit-of zl v) (zorbit v)
mediate-unique zl he v = orb-bisim zl eval∞ he v
legF : (m : ℕ) → FMapˢ (NStage m) Z
legF m = record
{ u = λ v → v
; shape = λ v a → zm m v a
; childF = λ v _ w → w , refl
; adjFˢ = λ v a w → idAdjˢ (≈E Z v (zm m v a) w)
}
leg-shape-cong : (m : ℕ) → ∀ {v : ℕ} {a a' : L m v}
→ EqOn._≈_ (≈A (NStage m) v) a a'
→ EqOn._≈_ (≈ZL v) (zm m v a) (zm m v a')
leg-shape-cong m ea = EqOn.reflexive (≈ZL _) (cong (zm m _) ea)
leg-map-cong : (m : ℕ) → ∀ {v : ℕ}
{t s : M (A (NStage m)) (E (NStage m)) v}
→ _≈Mˢ_ (≈A (NStage m)) (≈E (NStage m)) t s
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ (legF m) v t)
(FMapˢ.mapFˢ (legF m) v s)
leg-map-cong m h ._≈Mˢ_.here-eq =
leg-shape-cong m (h ._≈Mˢ_.here-eq)
leg-map-cong m {v} h ._≈Mˢ_.below-eq w =
let adj , (fs , bs) = h ._≈Mˢ_.below-eq w
in adj
, ( (λ e₁ → leg-map-cong m (fs e₁))
, (λ e₂ → leg-map-cong m (bs e₂)) )
zlegFM : (m : ℕ) → FMˢ (NStage m) Z
zlegFM m = record
{ mor = legF m
; shape-cong = leg-shape-cong m
; map-cong = leg-map-cong m
}
eval-ext : ∀ {v : ℕ} (τ : Thread v)
→ EqOn._≈_ (≈ZL v) (eval-ray (extend τ)) (eval-ray τ)
eval-ext {v} (mk m a) = zm-coh m v a
eval-ext^ : ∀ (k : ℕ) {v : ℕ} (τ : Thread v)
→ EqOn._≈_ (≈ZL v) (eval-ray (extend^ k τ)) (eval-ray τ)
eval-ext^ zero τ = EqOn.refl (≈ZL _)
eval-ext^ (suc k) τ =
EqOn.trans (≈ZL _) (eval-ext (extend^ k τ)) (eval-ext^ k τ)
med-shape-cong : ∀ {v : ℕ} {τ τ' : Thread v}
→ τ ≈Thread τ'
→ EqOn._≈_ (≈ZL v) (eval-ray τ) (eval-ray τ')
med-shape-cong {v} {τ} {τ'} r =
EqOn.trans (≈ZL v)
(EqOn.sym (≈ZL v) (eval-ext^ dl0 τ))
(EqOn.trans (≈ZL v)
(EqOn.reflexive (≈ZL v) (cong eval-ray same0))
(eval-ext^ dr0 τ'))
where
dl0 = _≈Thread_.dl r
dr0 = _≈Thread_.dr r
same0 = _≈Thread_.same r
medF : FMapˢ L∞ Z
medF = record
{ u = λ v → v
; shape = λ v τ → eval-ray τ
; childF = λ v _ w → w , refl
; adjFˢ = λ v τ w → idAdjˢ (≈E Z v (eval-ray τ) w)
}
med-map-cong : ∀ {v : ℕ} {t s : M (A L∞) (E L∞) v}
→ _≈Mˢ_ (≈A L∞) (≈E L∞) t s
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ medF v t)
(FMapˢ.mapFˢ medF v s)
med-map-cong h ._≈Mˢ_.here-eq =
med-shape-cong (h ._≈Mˢ_.here-eq)
med-map-cong {v} h ._≈Mˢ_.below-eq w =
let adj , (fs , bs) = h ._≈Mˢ_.below-eq w
in adj
, ( (λ e₁ → med-map-cong (fs e₁))
, (λ e₂ → med-map-cong (bs e₂)) )
zmedFM : FMˢ L∞ Z
zmedFM = record
{ mor = medF
; shape-cong = med-shape-cong
; map-cong = med-map-cong
}
comp-leg : (m : ℕ) → FMˢ (NStage m) Z
comp-leg m = compFMˢ (zlegFM (suc m)) (embFM m)
mutual
coc-go : (m v : ℕ) (t : M (A (NStage m)) (E (NStage m)) v)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ (FMˢ.mor (comp-leg m)) v t)
(FMapˢ.mapFˢ (FMˢ.mor (zlegFM m)) v t)
coc-go m v t ._≈Mˢ_.here-eq = zm-coh m v (M.here t)
coc-go m v t ._≈Mˢ_.below-eq w =
idAdjˢ (≈E Z v (zm m v (M.here t)) w)
, ( (λ e → coc-go m w (M.below t w e))
, (λ e → coc-go˘ m w (M.below t w e)) )
coc-go˘ : (m v : ℕ) (t : M (A (NStage m)) (E (NStage m)) v)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ (FMˢ.mor (zlegFM m)) v t)
(FMapˢ.mapFˢ (FMˢ.mor (comp-leg m)) v t)
coc-go˘ m v t ._≈Mˢ_.here-eq =
EqOn.sym (≈ZL v) (zm-coh m v (M.here t))
coc-go˘ m v t ._≈Mˢ_.below-eq w =
idAdjˢ (≈E Z v (zm m v (M.here t)) w)
, ( (λ e → coc-go˘ m w (M.below t w e))
, (λ e → coc-go m w (M.below t w e)) )
zcocone : Coconeˢ nchain Z
zcocone = record
{ leg = zlegFM
; coh = λ m v → refl , λ t → coc-go m v t
}
med-leg : (m : ℕ) → FMˢ (NStage m) Z
med-leg m = compFMˢ zmedFM (legFM m)
mutual
tri-go : (m v : ℕ) (t : M (A (NStage m)) (E (NStage m)) v)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ (FMˢ.mor (med-leg m)) v t)
(FMapˢ.mapFˢ (FMˢ.mor (zlegFM m)) v t)
tri-go m v t ._≈Mˢ_.here-eq = EqOn.refl (≈ZL v)
tri-go m v t ._≈Mˢ_.below-eq w =
idAdjˢ (≈E Z v (zm m v (M.here t)) w)
, ( (λ e → tri-go m w (M.below t w e))
, (λ e → tri-go˘ m w (M.below t w e)) )
tri-go˘ : (m v : ℕ) (t : M (A (NStage m)) (E (NStage m)) v)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ (FMˢ.mor (zlegFM m)) v t)
(FMapˢ.mapFˢ (FMˢ.mor (med-leg m)) v t)
tri-go˘ m v t ._≈Mˢ_.here-eq = EqOn.refl (≈ZL v)
tri-go˘ m v t ._≈Mˢ_.below-eq w =
idAdjˢ (≈E Z v (zm m v (M.here t)) w)
, ( (λ e → tri-go˘ m w (M.below t w e))
, (λ e → tri-go m w (M.below t w e)) )
triangle : (m : ℕ) → med-leg m ≈FM zlegFM m
triangle m v = refl , λ t → tri-go m v t
zfwd : (k m w : ℕ)
→ EqOn._≈_ (≈ZL w)
(zm (k + m) w (lab (k + m) w)) (zm m w (lab m w))
zfwd zero m w = EqOn.refl (≈ZL w)
zfwd (suc k) m w =
EqOn.trans (≈ZL w) step (zfwd k m w)
where
eq : l-emb (k + m) w (lab (k + m) w) ≡ lab (suc (k + m)) w
eq = sym (lab-coh (k + m) w)
step : EqOn._≈_ (≈ZL w)
(zm (suc (k + m)) w (lab (suc (k + m)) w))
(zm (k + m) w (lab (k + m) w))
step =
EqOn.trans (≈ZL w)
(EqOn.sym (≈ZL w)
(EqOn.reflexive (≈ZL w)
(cong (zm (suc (k + m)) w) eq)))
(zm-coh (k + m) w (lab (k + m) w))
zray-he : (m w : ℕ)
→ EqOn._≈_ (≈ZL w) (zm m w (lab m w)) (eval∞ w)
zray-he m w =
EqOn.trans (≈ZL w)
(EqOn.sym (≈ZL w) (zfwd w m w))
(EqOn.trans (≈ZL w)
(EqOn.reflexive (≈ZL w)
(cong (λ k → zm k w (lab k w)) (+-comm w m)))
(zfwd m w w))
mutual
zlegray-go : (m v : ℕ)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ (legF m) v (norbit m v))
(FMapˢ.mapFˢ medF v (orbit∞ v))
zlegray-go m v ._≈Mˢ_.here-eq = zray-he m v
zlegray-go m v ._≈Mˢ_.below-eq w =
idAdjˢ (≈E Z v (zm m v (lab m v)) w)
, ( (λ _ → zlegray-go m w)
, (λ _ → zlegray-go˘ m w) )
zlegray-go˘ : (m v : ℕ)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ medF v (orbit∞ v))
(FMapˢ.mapFˢ (legF m) v (norbit m v))
zlegray-go˘ m v ._≈Mˢ_.here-eq =
EqOn.sym (≈ZL v) (zray-he m v)
zlegray-go˘ m v ._≈Mˢ_.below-eq w =
idAdjˢ (≈E Z v (eval∞ v) w)
, ( (λ _ → zlegray-go˘ m w)
, (λ _ → zlegray-go m w) )
zlegray : (m v : ℕ)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ (legF m) v (norbit m v))
(FMapˢ.mapFˢ medF v (orbit∞ v))
zlegray = zlegray-go
unique-ray : (h : FMˢ L∞ Z)
(tr : (m : ℕ) → compFMˢ h (legFM m) ≈FM zlegFM m)
(v : ℕ)
→ Σ (FMapˢ.u (FMˢ.mor h) v ≡ v)
(λ r → _≈Mˢ_ (≈A Z) (≈E Z)
(relocateˢ r
(FMapˢ.mapFˢ (FMˢ.mor h) v (orbit∞ v)))
(FMapˢ.mapFˢ medF v (orbit∞ v)))
unique-ray h tr v = r , goal
where
hmor = FMˢ.mor h
fmor = FMˢ.mor (legFM v)
cf = compFˢ hmor fmor
r = proj₁ (tr v v)
hm = proj₂ (tr v v)
legImg = FMapˢ.mapFˢ fmor v (norbit v v)
O = orbit∞ v
ZLg = FMapˢ.mapFˢ (legF v) v (norbit v v)
ZO = FMapˢ.mapFˢ medF v (orbit∞ v)
c1 : _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ hmor v legImg) (FMapˢ.mapFˢ hmor v O)
c1 = FMˢ.map-cong h (legray-go v v)
c1r : _≈Mˢ_ (≈A Z) (≈E Z)
(relocateˢ r (FMapˢ.mapFˢ hmor v legImg))
(relocateˢ r (FMapˢ.mapFˢ hmor v O))
c1r = relocate-resp-≈Mˢ (≈A Z) (≈E Z) r c1
cmp : _≈Mˢ_ (≈A Z) (≈E Z)
(relocateˢ r (FMapˢ.mapFˢ cf v (norbit v v)))
(relocateˢ r (FMapˢ.mapFˢ hmor v legImg))
cmp = relocate-resp-≈Mˢ (≈A Z) (≈E Z) r
(mapFˢ-comp hmor fmor v (norbit v v))
p0 : _≈Mˢ_ (≈A Z) (≈E Z)
(relocateˢ r (FMapˢ.mapFˢ cf v (norbit v v))) ZLg
p0 = hm (norbit v v)
goal : _≈Mˢ_ (≈A Z) (≈E Z)
(relocateˢ r (FMapˢ.mapFˢ hmor v O)) ZO
goal = ≈Mˢ-trans (≈A Z) (≈E Z)
(≈Mˢ-trans (≈A Z) (≈E Z)
(≈Mˢ-sym (≈A Z) (≈E Z) c1r)
(≈Mˢ-trans (≈A Z) (≈E Z)
(≈Mˢ-sym (≈A Z) (≈E Z) cmp) p0))
(zlegray-go v v)
mkHFM : (H : (v : ℕ) → Thread v → ZL v)
(Hc : ∀ {v : ℕ} {τ τ' : Thread v}
→ τ ≈Thread τ'
→ EqOn._≈_ (≈ZL v) (H v τ) (H v τ'))
→ FMˢ L∞ Z
mkHFM H Hc = record
{ mor = hF
; shape-cong = Hc
; map-cong = hmc
}
where
hF : FMapˢ L∞ Z
hF = record
{ u = λ v → v
; shape = λ v τ → H v τ
; childF = λ v _ w → w , refl
; adjFˢ = λ v τ w → idAdjˢ (≈E Z v (H v τ) w)
}
hmc : ∀ {v : ℕ} {t s : M (A L∞) (E L∞) v}
→ _≈Mˢ_ (≈A L∞) (≈E L∞) t s
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ hF v t) (FMapˢ.mapFˢ hF v s)
hmc p ._≈Mˢ_.here-eq = Hc (_≈Mˢ_.here-eq p)
hmc {v = v} p ._≈Mˢ_.below-eq w =
let adj , (fs , bs) = _≈Mˢ_.below-eq p w
in adj , ((λ e → hmc (fs e)) , (λ e → hmc (bs e)))
module FullUniqueness
(H : (v : ℕ) → Thread v → ZL v)
(Hc : ∀ {v : ℕ} {τ τ' : Thread v}
→ τ ≈Thread τ'
→ EqOn._≈_ (≈ZL v) (H v τ) (H v τ'))
(tr : (m v : ℕ) (t : M (A (NStage m)) (E (NStage m)) v)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ (FMˢ.mor (mkHFM H Hc)) v
(FMapˢ.mapFˢ (FMˢ.mor (legFM m)) v t))
(FMapˢ.mapFˢ (legF m) v t))
where
hFM : FMˢ L∞ Z
hFM = mkHFM H Hc
here-force : (m v : ℕ) (a : L m v)
→ EqOn._≈_ (≈ZL v) (H v (mk m a)) (zm m v a)
here-force m v a =
_≈Mˢ_.here-eq (tr m v (stage-ray m v a))
mutual
uniq : (v : ℕ) (t : M (A L∞) (E L∞) v)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ (FMˢ.mor hFM) v t)
(FMapˢ.mapFˢ medF v t)
uniq v t ._≈Mˢ_.here-eq with M.here t
... | mk m a = here-force m v a
uniq v t ._≈Mˢ_.below-eq w =
idAdjˢ (≈E Z v (H v (M.here t)) w)
, ( (λ e₁ → uniq w (M.below t w e₁))
, (λ e₂ → uniq˘ w (M.below t w e₂)) )
uniq˘ : (v : ℕ) (t : M (A L∞) (E L∞) v)
→ _≈Mˢ_ (≈A Z) (≈E Z)
(FMapˢ.mapFˢ medF v t)
(FMapˢ.mapFˢ (FMˢ.mor hFM) v t)
uniq˘ v t ._≈Mˢ_.here-eq with M.here t
... | mk m a = EqOn.sym (≈ZL v) (here-force m v a)
uniq˘ v t ._≈Mˢ_.below-eq w =
idAdjˢ (≈E Z v (eval-ray (M.here t)) w)
, ( (λ e₁ → uniq˘ w (M.below t w e₁))
, (λ e₂ → uniq w (M.below t w e₂)) )
unique-full : hFM ≈FM zmedFM
unique-full v = refl , λ t → uniq v t
private
cat = SameIndexCat s∞ {ℓ = ℓ}
reflc : ∀ {X Y : LabelSys ℓ} {f : Idx⇒ s∞ X Y} → _≈i_ s∞ f f
reflc {f = f} = ≈i-refl s∞ {ℓ = ℓ} f
symc : ∀ {X Y : LabelSys ℓ} {f g : Idx⇒ s∞ X Y}
→ _≈i_ s∞ f g → _≈i_ s∞ g f
symc {f = f} {g = g} p = ≈i-sym s∞ {ℓ = ℓ} {f = f} {g = g} p
transc : ∀ {X Y : LabelSys ℓ} {f g h : Idx⇒ s∞ X Y}
→ _≈i_ s∞ f g → _≈i_ s∞ g h → _≈i_ s∞ f h
transc {f = f} {g = g} {h = h} p q =
≈i-trans s∞ {ℓ = ℓ} {f = f} {g = g} {h = h} p q
respc : ∀ {X Y Z : LabelSys ℓ}
{F₁ F₂ : Idx⇒ s∞ X Y} {G₁ G₂ : Idx⇒ s∞ Y Z}
→ _≈i_ s∞ F₁ F₂ → _≈i_ s∞ G₁ G₂
→ _≈i_ s∞ (compi s∞ G₁ F₁) (compi s∞ G₂ F₂)
respc {F₁ = F₁} {F₂ = F₂} {G₁ = G₁} {G₂ = G₂} p q =
∘-resp-≈i s∞ {ℓ = ℓ} {F₁ = F₁} {F₂ = F₂} {G₁ = G₁} {G₂ = G₂} p q
stageLS : ℕ → LabelSys ℓ
stageLS m = record { A₀ = L m ; ≈A₀ = λ v → propEqOn (L m v) }
apexLS : LabelSys ℓ
apexLS = record { A₀ = Thread ; ≈A₀ = ≈A∞ }
embIdx : (m : ℕ) → Idx⇒ s∞ (stageLS m) (stageLS (suc m))
embIdx m = record
{ shape = λ v a → l-emb m v a
; shape-cong = λ {v} e → cong (l-emb m v) e
}
legIdx : (m : ℕ) → Idx⇒ s∞ (stageLS m) apexLS
legIdx m = record
{ shape = λ v a → mk m a
; shape-cong = λ {v} {a} {a'} e → leg-shc e
}
fold-emb : ∀ {m n : ℕ} → Chain⇒ m n
→ Idx⇒ s∞ (stageLS m) (stageLS n)
fold-emb SQC.stop = idxi s∞ (stageLS _)
fold-emb (SQC.step {n = n} p) = compi s∞ (embIdx n) (fold-emb p)
fold-hom : ∀ {m y n : ℕ} (g : Chain⇒ y n) (f : Chain⇒ m y)
→ _≈i_ s∞ (fold-emb (g ∘ch f))
(compi s∞ (fold-emb g) (fold-emb f))
fold-hom {m} {y} {.y} SQC.stop f =
symc {X = stageLS m} {Y = stageLS y}
{f = compi s∞ (idxi s∞ (stageLS y)) (fold-emb f)}
{g = fold-emb f}
(reflc {f = compi s∞ (idxi s∞ (stageLS y)) (fold-emb f)})
fold-hom {m} {y} {.(suc t)} (SQC.step {n = t} g) f =
transc {X = stageLS m} {Y = stageLS (suc t)}
{f = compi s∞ (embIdx t) (fold-emb (g ∘ch f))}
{g = compi s∞ (embIdx t)
(compi s∞ (fold-emb g) (fold-emb f))}
{h = compi s∞ (compi s∞ (embIdx t) (fold-emb g)) (fold-emb f)}
(respc {X = stageLS m} {Y = stageLS t} {Z = stageLS (suc t)}
{F₁ = fold-emb (g ∘ch f)}
{F₂ = compi s∞ (fold-emb g) (fold-emb f)}
{G₁ = embIdx t} {G₂ = embIdx t}
(fold-hom g f) (reflc {f = embIdx t}))
(reflc {f = compi s∞ (embIdx t)
(compi s∞ (fold-emb g) (fold-emb f))})
fold-resp-i : ∀ {m n : ℕ} {p q : Chain⇒ m n}
→ p ≡ q → _≈i_ s∞ (fold-emb p) (fold-emb q)
fold-resp-i {p = p} refl = reflc {f = fold-emb p}
chainFun : Functor ωCat cat
chainFun = record
{ F₀ = stageLS
; F₁ = fold-emb
; identity = λ {m} → reflc {f = fold-emb {m = m} SQC.stop}
; homomorphism = λ {m y n f g} → fold-hom g f
; F-resp-≈ = λ {m n p q} eq → fold-resp-i {p = p} {q = q} eq
}
open import Categories.Diagram.Cocone chainFun
open import Categories.Category.Construction.Cocones chainFun
using (Cocones)
open import Categories.Object.Initial Cocones
open import Categories.Diagram.Colimit chainFun using (Colimit)
one-coh-i : (m : ℕ)
→ _≈i_ s∞ (compi s∞ (legIdx (suc m)) (embIdx m)) (legIdx m)
one-coh-i m v t = coh-go m v t
leg-path : ∀ {m n : ℕ} (p : Chain⇒ m n)
→ _≈i_ s∞ (compi s∞ (legIdx n) (fold-emb p)) (legIdx m)
leg-path {m} {.m} SQC.stop =
reflc {f = compi s∞ (legIdx m) (idxi s∞ (stageLS m))}
leg-path {m} {.(suc t)} (SQC.step {n = t} p) =
transc {X = stageLS m} {Y = apexLS}
{f = compi s∞ (legIdx (suc t))
(compi s∞ (embIdx t) (fold-emb p))}
{g = compi s∞ (compi s∞ (legIdx (suc t)) (embIdx t)) (fold-emb p)}
{h = legIdx m}
(reflc {f = compi s∞ (legIdx (suc t))
(compi s∞ (embIdx t) (fold-emb p))})
(transc {X = stageLS m} {Y = apexLS}
{f = compi s∞ (compi s∞ (legIdx (suc t)) (embIdx t)) (fold-emb p)}
{g = compi s∞ (legIdx t) (fold-emb p)}
{h = legIdx m}
(respc {X = stageLS m} {Y = stageLS t} {Z = apexLS}
{F₁ = fold-emb p} {F₂ = fold-emb p}
{G₁ = compi s∞ (legIdx (suc t)) (embIdx t)} {G₂ = legIdx t}
(reflc {f = fold-emb p}) (one-coh-i t))
(leg-path p))
nCocone : Cocone
nCocone = record
{ coapex = record { ψ = legIdx ; commute = λ {m n} p → leg-path p } }
module _ (K : Cocone) where
ψK : (m : ℕ) → Idx⇒ s∞ (stageLS m) (Cocone.N K)
ψK = Cocone.ψ K
private
N = Cocone.N K
ZL = LabelSys.A₀ N
≈ZL = LabelSys.≈A₀ N
zm : (m v : ℕ) → L m v → ZL v
zm m v a = Idx⇒.shape (ψK m) v a
zm-coh : (m v : ℕ) (a : L m v)
→ EqOn._≈_ (≈ZL v)
(zm (suc m) v (l-emb m v a)) (zm m v a)
zm-coh m v a =
_≈Mˢ_.here-eq
(Cocone.commute K (SQC.succ {m = m}) v (stage-ray m v a))
module Q = SameIndexMediate ZL ≈ZL zm zm-coh
medArr : Idx⇒ s∞ apexLS N
medArr = record
{ shape = λ v τ → Q.eval-ray τ
; shape-cong = Q.med-shape-cong
}
med-comm : ∀ {m : ℕ}
→ _≈i_ s∞ (compi s∞ medArr (legIdx m)) (ψK m)
med-comm {m} v t = Q.tri-go m v t
mkMediate : Cocone⇒ nCocone K
mkMediate = record { arr = medArr ; commute = λ {m} → med-comm {m} }
unique : (f' : Cocone⇒ nCocone K)
→ _≈i_ s∞ medArr (Cocone⇒.arr f')
unique f' = unique-i
where
farr : Idx⇒ s∞ apexLS N
farr = Cocone⇒.arr f'
H : (v : ℕ) → Thread v → ZL v
H = Idx⇒.shape farr
Hc : ∀ {v : ℕ} {τ τ' : Thread v}
→ τ ≈Thread τ'
→ EqOn._≈_ (≈ZL v) (H v τ) (H v τ')
Hc = Idx⇒.shape-cong farr
farr′ : Idx⇒ s∞ apexLS N
farr′ = record { shape = H ; shape-cong = Hc }
tr : (m v : ℕ) (t : M (A (NStage m)) (E (NStage m)) v)
→ _≈Mˢ_ (≈A (dsys s∞ N)) (≈E (dsys s∞ N))
(FMapˢ.mapFˢ (FMˢ.mor (Q.mkHFM H Hc)) v
(FMapˢ.mapFˢ (FMˢ.mor (legFM m)) v t))
(FMapˢ.mapFˢ (Q.legF m) v t)
legEta : (m : ℕ)
→ _≈i_ s∞ (Cocone.ψ nCocone m) (legIdx m)
legEta m = reflc {f = legIdx m}
fEta : _≈i_ s∞ farr farr′
fEta = reflc {f = farr′}
rdx : (m : ℕ)
→ _≈i_ s∞ (Category._∘_ cat farr (Cocone.ψ nCocone m))
(compi s∞ farr′ (legIdx m))
rdx m = respc {X = stageLS m} {Y = apexLS} {Z = N}
{F₁ = Cocone.ψ nCocone m} {F₂ = legIdx m}
{G₁ = farr} {G₂ = farr′}
(legEta m) fEta
tri : (m : ℕ)
→ _≈i_ s∞ (compi s∞ farr′ (legIdx m)) (ψK m)
tri m =
transc {X = stageLS m} {Y = N}
{f = compi s∞ farr′ (legIdx m)}
{g = Category._∘_ cat farr (Cocone.ψ nCocone m)}
{h = ψK m}
(symc {X = stageLS m} {Y = N}
{f = Category._∘_ cat farr (Cocone.ψ nCocone m)}
{g = compi s∞ farr′ (legIdx m)}
(rdx m))
(Cocone⇒.commute f' {m})
tr m v t =
≈Mˢ-trans ≈AZ ≈EZ
(≈Mˢ-trans ≈AZ ≈EZ c1 (≈Mˢ-sym ≈AZ ≈EZ c2))
(≈Mˢ-trans ≈AZ ≈EZ (tri m v t) leg-b)
where
≈AZ = ≈A (dsys s∞ N)
≈EZ = ≈E (dsys s∞ N)
hmor = FMˢ.mor (Q.mkHFM H Hc)
fmor = FMˢ.mor (legFM m)
compFMor = compFˢ hmor fmor
compImg = FMapˢ.mapFˢ (FMˢ.mor (Idx⇒.mor (compi s∞ farr′ (legIdx m)))) v t
tgtImg = FMapˢ.mapFˢ (Q.legF m) v t
c1 : _≈Mˢ_ ≈AZ ≈EZ
(FMapˢ.mapFˢ hmor v (FMapˢ.mapFˢ fmor v t))
(FMapˢ.mapFˢ compFMor v t)
c1 = ≈Mˢ-sym ≈AZ ≈EZ (mapFˢ-comp hmor fmor v t)
c2 : _≈Mˢ_ ≈AZ ≈EZ compImg (FMapˢ.mapFˢ compFMor v t)
c2 = ≈Mˢ-refl ≈AZ ≈EZ (FMapˢ.mapFˢ compFMor v t)
leg-b : _≈Mˢ_ ≈AZ ≈EZ
(FMapˢ.mapFˢ (FMˢ.mor (Idx⇒.mor (ψK m))) v t) tgtImg
leg-b = ≈Mˢ-refl ≈AZ ≈EZ tgtImg
module QF = Q.FullUniqueness H Hc tr
unique-i : _≈i_ s∞ medArr farr
unique-i v t =
≈Mˢ-sym (≈A (dsys s∞ N)) (≈E (dsys s∞ N))
(proj₂ (QF.unique-full v) t)
nColimit : Colimit
nColimit = record
{ initial = record
{ ⊥ = nCocone
; ⊥-is-initial = record
{ ! = λ {K} → mkMediate K
; !-unique = λ {K} f' → unique K f'
}
}
}
module ExtraPointObstruction where
J : Set lzero
J = ℕ ⊎ ⊤ {lzero}
stepZ : J → J
stepZ (inj₁ n) = inj₁ (s∞ n)
stepZ (inj₂ _) = inj₂ tt
q : ℕ → J
q v = inj₁ v
q-coh : (v : ℕ) → q (s∞ v) ≡ stepZ (q v)
q-coh _ = refl
ZJ : SysEq lzero lzero lzero lzero lzero
ZJ = record
{ I = J
; A = λ _ → ⊤ {lzero}
; E = λ j _ j' → Σ (⊤ {lzero}) λ _ → j' ≡ stepZ j
; ≈A = λ _ → propEqOn (⊤ {lzero})
; ≈E = λ j _ j' → propEqOn (Σ (⊤ {lzero}) λ _ → j' ≡ stepZ j)
}
zj-orbit : (w : J) → M (A ZJ) (E ZJ) w
zj-orbit w .M.here = tt
zj-orbit w .M.below w' _ = zj-orbit w'
Rj : ℕ → J → Set lzero
Rj v w = w ≡ q v
Hj : (v : ℕ) (w : J) → Rj v w → Thread v → ⊤ {lzero} → Set lzero
Hj _ _ _ _ _ = ⊤ {lzero}
medj : (v : ℕ)
→ PushSimˢ L∞ ZJ Rj Hj refl (orbit∞ v) (zj-orbit (q v))
medj v .PushSimˢ.here-eq = tt
medj v .PushSimˢ.push w (_ , eq) =
q w , ((tt , cong inj₁ eq) , (refl , medj w))
q-miss : ¬ Σ ℕ λ v → q v ≡ inj₂ tt
q-miss (_ , ())
no-FM-mediate : (g : FMˢ L∞ ZJ)
→ ((x : ℕ) → FMapˢ.u (FMˢ.mor g) x ≡ q x)
→ ⊥
no-FM-mediate =
no-FM-nonsurjective {X = L∞} {Y = ZJ}
0 (M.here (orbit∞ 0)) q (inj₂ tt) q-miss