open import 1Lab.Reflection.Subst
open import 1Lab.Reflection
open import Cat.Functor.Naturality.Reflection
open import Cat.Instances.Shape.Terminal
open import Cat.Functor.Kan.Unique
open import Cat.Functor.Naturality
open import Cat.Functor.Kan.Base
open import Cat.Functor.Compose
open import Cat.Functor.Base
open import Cat.Reasoning
open import Cat.Prelude
module Cat.Functor.Kan.Reflection where
module _
{o ℓ o' ℓ' od ℓd}
{C : Precategory o ℓ} {C' : Precategory o' ℓ'} {D : Precategory od ℓd}
{p p' : Functor C C'} {F F' : Functor C D}
{G G' : Functor C' D} {eta : F => G F∘ p} {eta' : F' => G' F∘ p'}
where
cohere-eta! : Term → TC ⊤
cohere-eta! hole = do
`D ← quoteTC D
`G' ← quoteTC G'
unify hole $ def₀ (quote Nat-path)
##ₙ vlam "c" (def₀ (quote _··_··_)
##ₙ (def₀ (quote eliml)
##ₙ raise 1 `D
##ₙ (def₀ (quote eliml)
##ₙ raise 1 `D
##ₙ (def₀ (quote Functor.F-id) ##ₙ raise 1 `G')))
##ₙ def₀ (quote trivial!)
##ₙ (def₀ (quote idr) ##ₙ raise 1 `D ##ₙ unknown))
trivial-is-lan!
: {@(tactic trivial-isoⁿ p p') p-iso : p ≅ⁿ p'}
→ {@(tactic trivial-isoⁿ F F') F-iso : F ≅ⁿ F'}
→ {@(tactic trivial-isoⁿ G G') G-iso : G ≅ⁿ G'}
→ {@(tactic cohere-eta!) q : (Isoⁿ.to G-iso ◆ Isoⁿ.to p-iso) ∘nt eta ∘nt Isoⁿ.from F-iso ≡ eta'}
→ is-lan p F G eta
→ is-lan p' F' G' eta'
trivial-is-lan! {p-iso = p-iso} {F-iso} {G-iso} {q} =
natural-isos→is-lan p-iso F-iso G-iso q
trivial-lan-equiv!
: {@(tactic trivial-isoⁿ p p') p-iso : p ≅ⁿ p'}
→ {@(tactic trivial-isoⁿ F F') F-iso : F ≅ⁿ F'}
→ {@(tactic trivial-isoⁿ G G') G-iso : G ≅ⁿ G'}
→ {@(tactic cohere-eta!) q : (Isoⁿ.to G-iso ◆ Isoⁿ.to p-iso) ∘nt eta ∘nt Isoⁿ.from F-iso ≡ eta'}
→ is-lan p F G eta
≃ is-lan p' F' G' eta'
trivial-lan-equiv! {p-iso = p-iso} {F-iso} {G-iso} {q} =
natural-isos→lan-equiv p-iso F-iso G-iso q
module _
{o ℓ od ℓd}
{C : Precategory o ℓ} {D : Precategory od ℓd}
{F F' : Functor C D}
{G G' : Functor ⊤Cat D} {eta : F => G F∘ !F} {eta' : F' => G' F∘ !F}
where
trivial-is-colimit!
: {@(tactic trivial-isoⁿ F F') F-iso : F ≅ⁿ F'}
→ {@(tactic trivial-isoⁿ G G') G-iso : G ≅ⁿ G'}
→ {@(tactic cohere-eta! {eta = eta} {eta' = eta'}) q : (Isoⁿ.to G-iso ◆ Isoⁿ.to idni) ∘nt eta ∘nt Isoⁿ.from F-iso ≡ eta'}
→ is-lan !F F G eta
→ is-lan !F F' G' eta'
trivial-is-colimit! {F-iso = F-iso} {G-iso} {q} =
natural-isos→is-lan idni F-iso G-iso q
trivial-colimit-equiv!
: {@(tactic trivial-isoⁿ F F') F-iso : F ≅ⁿ F'}
→ {@(tactic trivial-isoⁿ G G') G-iso : G ≅ⁿ G'}
→ {@(tactic cohere-eta! {eta = eta} {eta' = eta'}) q : (Isoⁿ.to G-iso ◆ Isoⁿ.to idni) ∘nt eta ∘nt Isoⁿ.from F-iso ≡ eta'}
→ is-lan !F F G eta
≃ is-lan !F F' G' eta'
trivial-colimit-equiv! {F-iso = F-iso} {G-iso} {q} =
natural-isos→lan-equiv idni F-iso G-iso q
module _
{o ℓ o' ℓ' od ℓd}
{C : Precategory o ℓ} {C' : Precategory o' ℓ'} {D : Precategory od ℓd}
{p : Functor C C'} {F : Functor C D}
{G : Functor C' D} {eta}
where
_ : is-lan p F G eta → is-lan p F G eta
_ = trivial-is-lan!