lib.graph-definitions.Graph.EquivalencePrinciple.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 #-}
module lib.graph-definitions.Graph.EquivalencePrinciple
  where
  open import foundations.Core
  open import lib.graph-definitions.Graph
  open import lib.graph-homomorphisms.Hom
  open import lib.graph-homomorphisms.classes.Isomorphisms
  open import lib.graph-relations.Isomorphic
  module EquivPrinciple {ℓ : Level} (G H : Graph ℓ) where
    private
      F₁ : (X : Type ℓ) → Type (lsuc ℓ)
      F₁ X = (X → X → Type ℓ)
      F₂ : (X : Type ℓ)(R : (x y : X) → Type ℓ) → Type ℓ
      F₂ X R = (x y : X) → (R x y) is-set
      nG = Node G
      nH = Node H
      eG = Edge G
      eH = Edge H
      nG-set = Node-is-set G
      nH-set = Node-is-set H
      eG-set = Edge-is-set G
      eH-set = Edge-is-set H
    equiv-principle : (G ≡ H) ≃ (G ≅ H)
    equiv-principle =
      begin≃
        (G ≡ H)                                                      ≃⟨ i ⟩
        ∑[ α ∶ nG ≡ nH ] ∑[ β ∶ tr F₁ α eG ≡ eH ]
             (tr isSet α nG-set ≡ nH-set)
           × (tr₂ F₂ α β eG-set ≡ eH-set)                            ≃⟨ ii ⟩
        ∑[ α ] (tr F₁ α eG ≡ eH)                                     ≃⟨ sigma-preserves iii ⟩
        ∑[ α ] (∀ x y → eG x y ≡ eH (coe α x) (coe α y))             ≃⟨ sigma-preserves iv ⟩
        ∑[ α ] (∀ x y → eG x y ≃ eH (coe α x) (coe α y))             ≃⟨ v  ⟩
        ∑[ α ∶ nG ≃ nH ] (∀ x y → eG x y ≃ eH ((α ∙) x) ((α ∙) y))   ≃⟨⟩
        (G ≅ H)
        ≃∎
      where
      open import foundations.UnivalenceAxiom
      i : (G ≡ H)
          ≃ (Σ[ α ∶ nG ≡ nH ] Σ[ β ∶ tr F₁ α (eG) ≡ eH ] (tr isSet α (nG-set) ≡ nH-set)
                                                      × (tr₂ F₂ α β (eG-set) ≡ (eH-set)))
      i = ≃-sym (qinv-≃ (λ { (idp , idp , idp , idp) → idp})
          ( (λ {idp → idp , idp , idp , idp })
          , (λ { idp → idp}) , λ { (idp , idp , idp , idp) → idp}
          ))
      
      ii =  ≃-sym $
        qinv-≃
        -- functions:
          (λ {(α , β ) → α , β , set-is-prop _ _ 
                       , pi-is-prop (λ a → pi-is-prop (λ b → set-is-prop)) _ (eH-set) })
          ((λ { (α , β , _) → α , β })
        -- homotopies:
        , ((λ {(α , (β , _))
             → pair= (idp
             , pair= (idp , ispropA×B (prop-is-set 
                             (pi-is-prop (λ x → pi-is-prop (λ y → prop-is-prop))) _ (nH-set))
               (prop-is-set (pi-is-prop (λ x → pi-is-prop (λ y → set-is-prop))) _ (eH-set)) _ _))}
        ), λ {(a , b) → idp}))
      iii : (α : nG ≡ nH)  → (tr F₁ α (eG) ≡ eH) ≃ ((x y : nG) → eG x y ≡ eH (coe α x) (coe α y))
      iii idp =
        (eG ≡ eH)                    ≃⟨ eqFunExt ⟩
        (∀ x → (eG x ≡ eH x))        ≃⟨ pi-equivalence (λ w → eqFunExt) ⟩
        (∀ x y → (eG x y ≡ eH x y))  ≃∎ 
        where open import foundations.FunExtAxiom
      iv : (α : nG ≡ nH)
         →  ((x y : nG) → eG x y  ≡ eH (coe α x) (coe α y))
         ≃  ((x y : nG) → eG x y  ≃  eH (coe α x) (coe α y))
      iv idp = pi-equivalence $ λ x → pi-equivalence $ λ y → eqvUnivalence
        
      v  =  ≃-sym (sigma-preserves-≃ eqvUnivalence)
    -- Other alias
    ≡-≃-≅ : (G ≡ H) ≃ (G ≅ H)
    ≡-≃-≅ = equiv-principle
    ≡-from-iso : (G ≅ H) → (G ≡ H)
    ≡-from-iso = rapply equiv-principle
    ≡-→-≅ :  (G ≡ H) → (G ≅ H)
    ≡-→-≅ = apply equiv-principle
    computation-rule₁
      : (e : G ≅ H)
      → (≡-≃-≅ ∙→) ((≡-≃-≅ ∙←) e) ≡ e
    computation-rule₁ e = lrmap-inverse-h {A = G ≡ H} {B = G ≅ H} ≡-≃-≅ e
    computation-rule₂
      : (e : G ≡ H)
      → (≡-≃-≅ ∙←) ((≡-≃-≅ ∙→) e) ≡ e
    computation-rule₂ e = rlmap-inverse-h  {A = G ≡ H} {B = G ≅ H} ≡-≃-≅ e
    -- NOTE: If I replace ≡-≃-≅ ∙→ by ≡-≃-≅, this doesn't typecheck, why not?
    ≡-≡-≅ : (G ≡ H) ≡ ↑ _ (G ≅ H)
    ≡-≡-≅ = ua (≃-trans equiv-principle (lifting-equivalence _))
      where
      open import foundations.UnivalenceAxiom
Isomorphic graphs hold the same propositional properties.
  leibniz 
    : {ℓ : Level} (G H : Graph ℓ)
    → G ≅ H → (P : Graph ℓ → Type ℓ)  → (P G → P H)
  leibniz G H G≡H P PG = tr P (rapply (equiv-principle G H) G≡H) PG
    where open EquivPrinciple
(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