lib.graph-homomorphisms.classes.EdgeInjective.Lemmas.md.
Version of Sunday, January 22, 2023, 10:42 PM
Powered by agda version 2.6.2.2-442c76b and pandoc 2.14.0.3
{-# OPTIONS --without-K --exact-split #-} open import foundations.Core module lib.graph-homomorphisms.classes.EdgeInjective.Lemmas (ℓ : Level) where open import lib.graph-homomorphisms.classes.EdgeInjective open import foundations.Nat ℓ open import foundations.Fin ℓ open import lib.graph-definitions.Graph open import lib.graph-homomorphisms.Hom open Hom open import lib.graph-families.CycleGraph ℓ open import lib.graph-families.CycleGraph.RotHom open import lib.graph-families.CycleGraph.Isomorphisms.Lemmas open import lib.graph-relations.Isomorphic
The following is a particular case of cospan with domain Cn to a graph G where the arrows are edge-injective. The resulting identity type is a prop.
module _ (n : ℕ) (n>0 : n > 0) (G : Graph ℓ) ----------------------------------------- (f : Hom (Cycle n) G) (f-fact : isEdgeInj f) ----------------------------------------- (g : Hom (Cycle n) G) (g-fact : isEdgeInj g) where open import lib.graph-homomorphisms.Lemmas module _ where abstract ∑-≡-rot^k-is-prop : isProp (∑[ (k , _ ) ∶ ⟦ n ⟧ ] (f ≡ ((rot ℓ n ^-hom k) ∘Hom g))) ∑-≡-rot^k-is-prop (k₁ , p₁) (k₂ , p₂) = pair= (k₁≡k₂ , Hom-is-set (Cycle n) G f _ (tr _ k₁≡k₂ p₁) p₂) where open Hom-Lemma-1 (Cycle n) G eq-1 : ((rot ℓ n ^-hom (π₁ k₁)) ∘Hom g) ≡ ((rot ℓ n ^-hom (π₁ k₂)) ∘Hom g) eq-1 = ! p₁ · p₂ eq-2 : let h₁ = (rot ℓ n ^-hom (π₁ k₁)) h₂ = (rot ℓ n ^-hom (π₁ k₂)) in ∑[ p ∶ Hom.α (h₁ ∘Hom g) ≡ Hom.α (h₂ ∘Hom g) ] (tr (λ w → (x y : Node (Cycle n)) → (e : Edge (Cycle n) x y) → Edge G (w x) (w y)) p (Hom.β (h₁ ∘Hom g)) ≡ Hom.β (h₂ ∘Hom g)) eq-2 = (≡-of-homs-≃-≡-∑ (h₁ ∘Hom g) (h₂ ∘Hom g) ∙→) eq-1 where h₁ h₂ : Hom (Cycle n) (Cycle n) h₁ = (rot ℓ n ^-hom (π₁ k₁)) h₂ = (rot ℓ n ^-hom (π₁ k₂)) eq-3 : {x y : Node (Cycle n)} (e : Edge (Cycle n) x y) → let h₁ = (rot ℓ n ^-hom (π₁ k₁)) h₂ = (rot ℓ n ^-hom (π₁ k₂)) in Path {A = ∑[ x ] ∑[ y ] Edge G x y } ( (α (h₁ ∘Hom g) x) , (α (h₁ ∘Hom g) y) , Hom.β g _ _ (β h₁ x y e)) ( (α (h₂ ∘Hom g) x) , (α (h₂ ∘Hom g) y) , Hom.β g _ _ (β h₂ x y e)) eq-3 {x = x}{y} e = ≡-of-homs-to-triples (h₁ ∘Hom g) (h₂ ∘Hom g) (π₁ (eq-2)) (π₂ eq-2) x y e where h₁ h₂ : Hom (Cycle n) (Cycle n) h₁ = (rot ℓ n ^-hom (π₁ k₁)) h₂ = (rot ℓ n ^-hom (π₁ k₂)) eq-4 : (x y : Node (Cycle n)) (e : Edge (Cycle n) x y) → let h₁ = (rot ℓ n ^-hom (π₁ k₁)) h₂ = (rot ℓ n ^-hom (π₁ k₂)) in Path {A = ∑[ x ] ∑[ y ] Edge (Cycle n) x y } ((α h₁ x) , (α h₁ y) , (β h₁ x y e)) ((α h₂ x) , (α h₂ y) , (β h₂ x y e)) eq-4 x y e = g-fact _ _ (eq-3 e) where h₁ h₂ : Hom (Cycle n) (Cycle n) h₁ = (rot ℓ n ^-hom (π₁ k₁)) h₂ = (rot ℓ n ^-hom (π₁ k₂)) k₁≡k₂ : k₁ ≡ k₂ k₁≡k₂ = L1-hom ℓ n n>0 eq-4 module _ where private g∘ = Hom-Lemma-2.g∘ (Cycle n) (Cycle n) G f g ∑-change-≡-≅ = Hom-Lemma-1.∑-change-≡-≅ (Cycle n) (Cycle n) ∑-Cn-isos-is-prop' : isProp (∑[ α ∶ Cycle n ≅ Cycle n ] (f ≡ g∘ (≡-from-iso ℓ n n>0 α))) ∑-Cn-isos-is-prop' = isProp-≃ (≃-sym (m₁ ℓ n n>0 G f g)) ∑-≡-rot^k-is-prop ∑-Cn-isos-is-prop : isProp (∑[ α ∶ Cycle n ≡ Cycle n ] (f ≡ (g∘ α))) ∑-Cn-isos-is-prop = isProp-≃ (≃-sym ( ∑-change-≡-≅ f g)) ∑-Cn-isos-is-prop'
paso-a
: (Path {A = ∑[ H ∶ Graph ℓ ] ∑[ h ∶ Hom H G ] isEdgeInj h}
(A , (f , f-fact))
(B , (g , g-fact)))
≃ (∑[ α ∶ A ≡ B ]
(tr (λ H → ∑[ h ∶ Hom H G ] isEdgeInj h)
α
(f , f-fact)) ≡ g , g-fact)
paso-a = ≃-sym $ pair=Equiv (Graph ℓ) λ H → ∑[ h ∶ Hom H G ] isEdgeInj h
paso-d
: (α : A ≡ B)
→ (∑[ p ∶ tr (λ H → Hom H G) α f ≡ g ]
(Path {A = isEdgeInj g}
(tr (λ h → isEdgeInj h) p
(tr (λ p → isEdgeInj (π₂ p))
(pair= ((α , refl (tr (λ X → Hom X G) α f)))) f-fact))
g-fact))
≃ (tr (λ H → Hom H G) α f ≡ g)
paso-d idp = ∑-≃-base λ {idp →
(being-edge-inj-is-prop g _ g-fact ,
prop-is-set (being-edge-inj-is-prop g) _ g-fact
(being-edge-inj-is-prop g _ g-fact))}
module _ (α : A ≡ B) where
open Hom-Lemma-1 A B
open Hom-Lemma-2 A B G f g
cal :
(Path {A = ∑[ H ∶ Graph ℓ ] ∑[ h ∶ Hom H G ] isEdgeInj h}
(A , f , f-fact)
(B , g , g-fact))
≃ (∑[ α ∶ A ≡ B ]
(∑[ p ∶ Hom.α f ≡ Hom.α (g∘ α) ]
(tr (λ e → (x y : Node A)
→ Edge A x y → Edge G (e x) (e y)) p
(Hom.β f) ≡ Hom.β (g∘ α))))
cal =
begin≃
(Path {A = ∑[ H ∶ Graph ℓ ] ∑[ h ∶ Hom H G ] isEdgeInj h}
(A , (f , f-fact))
(B , (g , g-fact)))
≃⟨ paso-a ⟩
((∑[ α ∶ A ≡ B ]
(tr (λ H → ∑[ h ∶ Hom H G ] isEdgeInj h)
α
(f , f-fact)) ≡ g , g-fact))
{-
The following steps can be skiped until next comment.
-}
≃⟨ sigma-preserves (λ {idp → idtoeqv idp }) ⟩
(∑[ α ∶ A ≡ B ]
(Path {A = ∑[ h ∶ Hom B G ] (isEdgeInj h)}
(tr (λ H → Hom H G) α f , tr (λ p → isEdgeInj (π₂ p) )
(pair= ((α , refl (tr (λ X → Hom X G) α f)))) f-fact)
(g , g-fact)))
≃⟨ sigma-preserves (λ { idp → pair-≃-∑}) ⟩
(∑[ α ∶ A ≡ B ] (∑[ p ∶ tr (λ H → Hom H G) α f ≡ g ]
(Path {A = isEdgeInj g}
(tr (λ h → isEdgeInj h) p
(tr (λ p → isEdgeInj (π₂ p))
(pair= ((α , refl (tr (λ X → Hom X G) α f))))
f-fact))
g-fact)))
≃⟨ sigma-preserves paso-d ⟩
(∑[ α ∶ A ≡ B ] ((tr (λ H → Hom H G) α f ≡ g)))
≃⟨ sigma-preserves (λ {idp → idEqv}) ⟩
(∑[ α ∶ A ≡ B ] (f ≡ g∘ α) )
{-
From here, we must remember α is an equality between two graphs,
and we have also an equality between two graph-morphisms.
Now, in order to use the fiberwise equivalence, we need to
unfold the base type A ≡ B.
-}
≃⟨ sigma-preserves (λ α → Hom-Lemma-1.≡-of-homs-≃-≡-∑ A G f (g∘ α)) ⟩
(∑[ α ∶ A ≡ B ]
(∑[ p ∶ Hom.α f ≡ Hom.α (g∘ α) ]
(tr (λ e → (x y : Node A)
→ Edge A x y
→ Edge G (e x) (e y)) p
(Hom.β f) ≡ Hom.β (g∘ α))))
≃∎ where open import foundations.UnivalenceAxiom
-}
(2022-12-28)(57c278b4) Last updated: 2021-09-16 15:00:00 by jonathan.cubides (2022-07-06)(d3a4a8cf) minors by jonathan.cubides (2022-01-26)(4aef326b) [ reports ] added some revisions by jonathan.cubides (2021-12-20)(049db6a8) Added code of cubical experiments. by jonathan.cubides (2021-12-20)(961730c9) [ html ] regular update by jonathan.cubides (2021-12-20)(e0ef9faa) Fixed compilation and format, remove hidden parts by jonathan.cubides (2021-12-20)(5120e5d1) Added cubical experiment to the master by jonathan.cubides (2021-12-17)(828fdd0a) More revisions added for CPP by jonathan.cubides (2021-12-15)(0d6a99d8) Fixed some broken links and descriptions by jonathan.cubides (2021-12-15)(662a1f2d) [ .gitignore ] add by jonathan.cubides (2021-12-15)(0630ce66) Minor fixes by jonathan.cubides (2021-12-13)(04f10eba) Fixed a lot of details by jonathan.cubides (2021-12-10)(24195c9f) [ .gitignore ] ignore .zip and arxiv related files by jonathan.cubides (2021-12-09)(538d2859) minor fixes before dinner by jonathan.cubides (2021-12-09)(36a1a69f) [ planar.pdf ] w.i.p revisions to share on arxiv first by jonathan.cubides