lib.graph-embeddings.Map.Spherical-is-enough.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


Investigations on graph-theoretical constructions in Homotopy type theory

Jonathan Prieto-Cubides j.w.w. Håkon Robbestad Gylterud

Department of Informatics

University of Bergen, Norway

{-# OPTIONS --without-K --exact-split #-}

module lib.graph-embeddings.Map.Spherical-is-enough
  where
  open import foundations.Core
  open import lib.graph-definitions.Graph
  open import lib.graph-transformations.U
  open Graph

  open import lib.graph-embeddings.Map
  open import lib.graph-embeddings.Map.Face.Walk.Homotopy
  open import lib.graph-embeddings.Map.Spherical
  module
    hom-normalisation
    {ℓ : Level} (G : Graph ℓ)
      (_≟Node_ : (x y : Node (U G)) → (x ≡ y) + (x ≠ y))
      (M : Map G)
      (M-is-spherical : isSphericalMap G M)
    where

    open import lib.graph-walks.Walk.QuasiSimple
    open WR (U G) (_≟Node_)
    open quasi-simple-walks {ℓ}{G = U G}
    open import lib.graph-walks.Walk hiding (length)
    open import lib.graph-walks.Walk.Composition

    open ∈-walk (U G)
    open ∙-walk (U G)

    open import foundations.Nat ℓ
    open dec-<

    open import lib.graph-embeddings.Map.Face.Walk.Homotopy
    open import lib.graph-embeddings.Map.Face.Walk.Whiskering

    e⊙∼ : ∀ {x}{e : Edge (U G) x x} → ∥ (e ⊙ ⟨ _ ⟩)  ∼⟨ M ⟩∼ ⟨ _ ⟩ ∥
    e⊙∼ {x = x} {e  = e} = M-is-spherical _ _ _ _ (one-edge-is-quasi-simple e) (one-point-walk-is-quasi-simple x)

    PNom : ∀ {x z : Node (U G)}
            → Walk (U G) x z
            → Type (lsuc ℓ)
    PNom {x = x}{z} = λ w → ∑[ v ∶ Walk (U G) x z ] ((w →r* v) × ((Normal v) × ∥ w ∼⟨ M ⟩∼ v ∥))

    hom-normalize : ∀ {x z} → (w : Walk (U G) x z) → PNom w
    hom-normalize = ∑∑walk-rec PNom body
      where
      open HomotopyWalks {ℓ = ℓ}{G} M
      open Whiskering {ℓ = ℓ}{G} M
      body
        : ∀ {x z : Node G} (b : Walk (U G) x z)
        → ({x' z' : Node G} (a : Walk (U G) x' z') → ∑∑walk a ⊰ ∑∑walk b → PNom a)
        -------------------------------------------------------------------------
        → PNom b

      body ⟨ x ⟩ φ =
          ⟨ x ⟩
        , (⟨ _ ⟩ →r*∎)
        , (normal (one-point-walk-is-quasi-simple x) (No-reduce-no-step ⟨ x ⟩ is-dot))
        , ∣ hwalk-refl ∣
      body {x = x}{z} (e ⊙ ⟨ _ ⟩) φ
        with x ≟Node z
      ...  |  inl idp = ⟨ x ⟩
                , one-step (ξ₁ _ _ (is-loop idp ⟨ x ⟩) (is-dot idp))
                , (normal (one-point-walk-is-quasi-simple x) (No-reduce-no-step ⟨ x ⟩ is-dot))
                ,  M-is-spherical _ _ (e ⊙ ⟨ x ⟩ ) ⟨ x ⟩ (one-edge-is-quasi-simple e) (one-point-walk-is-quasi-simple x)
      ...  | inr x≠z = (e ⊙ ⟨ _ ⟩)
                      , ((e ⊙ ⟨ z ⟩) →r*∎)
                      , (normal (one-edge-is-quasi-simple e)  (No-reduce-no-step _ (is-edge x≠z)))
                      , ∣ whiskerL (e ⊙ ⟨ _ ⟩ ) hwalk-refl ∣
      body {x = x}{z} (e ⊙ w@(_ ⊙ _)) φ
        with (let y = start-of (U G) w
        in
        x ≟Node y)
      ... | inl idp = helper
        where
        helper : PNom (e ⊙ w)
        helper with φ w (<-succ (length w))
        ... | (w' , w→w' , (WR.normal w'-is-quasi-simple no-red) , w∼w')
            with x ≟Node z
        ... | inl idp =
                    ⟨ x ⟩
                  , one-step (ξ₁ (e ⊙ w) ⟨ x ⟩ (is-loop idp _) (is-dot idp))
                  , (normal (one-point-walk-is-quasi-simple x) (No-reduce-no-step ⟨ x ⟩ is-dot))
                  , trunc-elim trunc-is-prop (λ e∼ →
                                trunc-elim trunc-is-prop (λ w∼ →
                                trunc-elim trunc-is-prop (λ w'∼ → ∣ whisker-h e∼ (hwalk-trans w∼ w'∼) ∣)
                                w'∼dot)
                                w∼w')
                      (e⊙∼ {e = e})
                  where
                  w'∼dot : ∥ w' ∼⟨ M ⟩∼ ⟨ x ⟩ ∥
                  w'∼dot = M-is-spherical _ _ w' ⟨ x ⟩ w'-is-quasi-simple (one-point-walk-is-quasi-simple x)

        ... | inr x≠z
              = w'
            ,  (begin→r*
                e ⊙ w              →r*⟨ (e ⊙ w) →r*∎ ⟩
                (e ⊙ ⟨ x ⟩) ∙w w   →r*⟨ one-step (ξ₃ _ ⟨ _ ⟩  _ (λ { (is-loop x) → x≠z x})
                                                      (is-loop idp) (has-edge _) _ idp) ⟩
                w                  →r*⟨ w→w' ⟩
                w'                 →r*∎)
            , (normal w'-is-quasi-simple no-red)
            , trunc-elim trunc-is-prop (λ ew∼w →
              trunc-elim trunc-is-prop (λ w∼ → ∣ whisker-h ew∼w w∼ ∣ )
                w∼w')
                e⊙∼

      ... | inr x≠y
          with split w at x
      ...    | just w1 w1prefix w1∌x = helper
            where
            helper : _
            helper with find-suffix w1 w w1prefix
            ...  | (w2 , w≡w1∙w2) = helper2
                where
                helper2 : PNom (e ⊙ w)
                helper2 with φ w2 (right-part<whole w w1 w2 w≡w1∙w2)
                ... | (w' , w2→w' , (normal w'-is-quasi-simple no-red) , w2∼w')
                    with x ≟Node z
                ... | inl idp =
                      ⟨ x ⟩
                    , one-step (ξ₁ (e ⊙ w) ⟨ x ⟩ (is-loop idp _) (is-dot idp))
                    , (normal (one-point-walk-is-quasi-simple x) (No-reduce-no-step ⟨ x ⟩ is-dot))
                    , trunc-elim trunc-is-prop
                                  (λ e⊙w∼ →
                                  trunc-elim trunc-is-prop (λ w'∼ → ∣  hwalk-trans e⊙w∼ w'∼ ∣)
                                    w'∼dot)
                            helper3
                    where
                    w'∼dot : ∥ w' ∼⟨ M ⟩∼ ⟨ x ⟩ ∥
                    w'∼dot = M-is-spherical _ _ w' ⟨ x ⟩ w'-is-quasi-simple (one-point-walk-is-quasi-simple x)

                    helper3 : ∥ (e ⊙ w) ∼⟨ M ⟩∼ w' ∥
                    helper3 with φ w1 (left-part<whole w w1 w2 w≡w1∙w2)
                    ... | v , w1→v , (normal v-is-quasi-simple no-red) , w1∼v
                              = trunc-elim trunc-is-prop (λ ev∼dot
                                            → trunc-elim trunc-is-prop (λ w1∼
                                            → trunc-elim trunc-is-prop (λ w2∼
                                            → ∣ hwalk-trans (tr (λ o → (e ⊙ o) ∼⟨ M ⟩∼ w2) (! w≡w1∙w2)
                                                            (whiskerR (hwalk-trans
                                                              (whiskerL (e ⊙ ⟨ _ ⟩) w1∼) ev∼dot)
                                                              w2))
                                                            w2∼ ∣)
                                w2∼w')
                                w1∼v )
                                e⊙v∼dot
                            where
                            e⊙v-is-quasi-simple : (e ⊙ v) is-quasi-simple
                            e⊙v-is-quasi-simple = ⊙-quasi-simple-is-quasi-simple {e = e} v-is-quasi-simple (nf-¬∈ w1 w1∌x v w1→v)

                            e⊙v∼dot : ∥ (e ⊙ v) ∼⟨ M ⟩∼ ⟨ x ⟩ ∥
                            e⊙v∼dot = M-is-spherical _ _ (e ⊙ v) ⟨ x ⟩
                                          e⊙v-is-quasi-simple
                                          (one-point-walk-is-quasi-simple x)

                ... | inr x≠z
                      = w'
                        , (begin→r*
                            e ⊙ w           →r*⟨ ξ₂-⊙ {a≠b = x≠y}{x≠z}(subs w≡w1∙w2) e ⟩
                            (e ⊙ w1) ·w w2  →r*⟨ one-step (ξ₃ _ _ _ (λ { (is-loop x) → x≠z x}) (is-loop idp)
                                                              (different-endpoints-is-nontrivial x≠z w2) _ idp) ⟩
                            w2              →r*⟨ w2→w' ⟩
                            w'              →r*∎)
                        , (normal w'-is-quasi-simple  no-red)
                        ,  helper3 -- Need two extra lemmas.
                        where
                        helper3 : ∥ (e ⊙ w) ∼⟨ M ⟩∼ w' ∥
                        helper3 with φ w1 (left-part<whole w w1 w2 w≡w1∙w2)
                        ... | v , w1→v , (normal v-is-quasi-simple no-red) , w1∼v
                              = trunc-elim trunc-is-prop (λ ev∼dot
                                            → trunc-elim trunc-is-prop (λ w1∼
                                            → trunc-elim trunc-is-prop (λ w2∼
                                            → ∣ hwalk-trans (tr (λ o → (e ⊙ o) ∼⟨ M ⟩∼ w2) (! w≡w1∙w2)
                                                            (whiskerR (hwalk-trans
                                                              (whiskerL (e ⊙ ⟨ _ ⟩) w1∼) ev∼dot)
                                                              w2))
                                                            w2∼ ∣)
                                w2∼w')
                                w1∼v )
                                e⊙v∼dot
                            where
                            e⊙v-is-quasi-simple : (e ⊙ v) is-quasi-simple
                            e⊙v-is-quasi-simple = ⊙-quasi-simple-is-quasi-simple {e = e} v-is-quasi-simple (nf-¬∈ w1 w1∌x v w1→v)

                            e⊙v∼dot : ∥ (e ⊙ v) ∼⟨ M ⟩∼ ⟨ x ⟩ ∥
                            e⊙v∼dot = M-is-spherical _ _ (e ⊙ v) ⟨ x ⟩
                                          e⊙v-is-quasi-simple
                                          (one-point-walk-is-quasi-simple x)

      ... | nothing w∌x
          with φ w (<-succ (length w))
      ... | ⟨ _ ⟩  , w→w' , (normal pp no-red) , w∼w' = helper
          where
          helper : _
          helper with x ≟Node z
          ... | inl idp =
                    ⟨ x ⟩
                    , one-step (ξ₁ (e ⊙ w) ⟨ x ⟩ (is-loop idp _) (is-dot idp))
                    , (normal (one-point-walk-is-quasi-simple x) (No-reduce-no-step ⟨ x ⟩ is-dot))
                    , trunc-elim trunc-is-prop (λ ew∼w →
                        trunc-elim trunc-is-prop (λ w∼ → ∣ whisker-h ew∼w w∼ ∣ )
                    w∼w')
                    e⊙∼
          ... | inr x≠z
            =  (e ⊙ ⟨ z ⟩)
              ,  ξ₂-⊙ {a≠b = x≠z}{x≠z} w→w' e
              , (normal (one-edge-is-quasi-simple e)
                        (No-reduce-no-step (e ⊙ ⟨ z ⟩) (is-edge x≠z)))
              , trunc-elim trunc-is-prop (λ h∼ → ∣ whiskerL (e ⊙ ⟨ _ ⟩) h∼ ∣)  w∼w'
      ... | (w'@(m ⊙ sw) , w→w' , (normal w'-is-quasi-simple no-red) , w∼w')
          with x ≟Node z
      ... | inl idp =
                  ⟨ x ⟩
                  , one-step (ξ₁ (e ⊙ w) ⟨ x ⟩ (is-loop idp _) (is-dot idp))
                  , (normal (one-point-walk-is-quasi-simple x) (No-reduce-no-step ⟨ x ⟩ is-dot))
                  , trunc-elim trunc-is-prop
                                  (λ e⊙w'∼ →
                                  trunc-elim trunc-is-prop (λ w∼ → ∣ hwalk-trans (whiskerL (e ⊙ ⟨ _ ⟩) w∼) e⊙w'∼ ∣)
                                    w∼w' )
                            e⊙w'∼dot
                  where

                  e⊙w'-is-quasi-simple : (e ⊙ w') is-quasi-simple
                  e⊙w'-is-quasi-simple = ⊙-quasi-simple-is-quasi-simple {e = e} {w'} w'-is-quasi-simple ¬x∈w'
                    where
                    ¬x∈w' :  ¬ (x ∈w w')
                    ¬x∈w' x∈w' = ⊥-elim (w∌x x∈w)
                      where
                      x∈w : x ∈w w
                      x∈w = nf-∈' w' x∈w' w w→w'
                  e⊙w'∼dot : ∥ (e ⊙ w') ∼⟨ M ⟩∼ ⟨ x ⟩ ∥
                  e⊙w'∼dot = M-is-spherical _ _ _ ⟨ x ⟩ e⊙w'-is-quasi-simple (one-point-walk-is-quasi-simple x)

      ... | inr x≠z
          = (e ⊙ w') , e⊙w-to-e⊙w' , (normal e⊙w'-is-quasi-simple ¬red-e⊙w')
            , trunc-elim trunc-is-prop (λ h∼ → ∣ whiskerL (e ⊙ ⟨ _ ⟩) h∼ ∣)  w∼w'
        where
        e⊙w-to-e⊙w' : (e ⊙ w) →r* (e ⊙ w')
        e⊙w-to-e⊙w' = ξ₂-⊙ {a≠b = x≠y}{x≠z} w→w' e

        e⊙w'-is-quasi-simple : (e ⊙ w') is-quasi-simple
        e⊙w'-is-quasi-simple = ⊙-quasi-simple-is-quasi-simple {e = e} {w'} w'-is-quasi-simple ¬x∈w'
          where
          ¬x∈w' :  ¬ (x ∈w w')
          ¬x∈w' x∈w' = ⊥-elim (w∌x x∈w)
            where
            x∈w : x ∈w w
            x∈w = nf-∈' w' x∈w' w w→w'

        ¬red-e⊙w' : Reduce (e ⊙ w') → ⊥ ℓ
        ¬red-e⊙w' (reduction (ξ₁ _ _ (is-loop x≡y _) to-dot)) = ⊥-elim (x≠z x≡y)
        ¬red-e⊙w' (reduction (ξ₂ _ _ _ _ _ w'→q)) = no-red (reduction w'→q)
        ¬red-e⊙w' (reduction (ξ₃ e p q ¬l l nt .(_ ⊙ (m ⊙ sw)) w≡)) = get-⊥ x-in-different-pos
          where
          x∈q : x ∈w  (p ∙w q)
          x∈q = ∈-∙w-right _ (∈-non-trivial q nt) p

          x∈w' : x ∈w w'
          x∈w' with ≡-walks-to-∑ w≡
          ... | idp , m⊙sw≡p∙q = tr (λ o → x ∈w o) (! m⊙sw≡p∙q) x∈q

          x-in-different-pos : inr x∈w' ≡ inl idp
          x-in-different-pos = e⊙w'-is-quasi-simple x (inr x∈w') (inl idp)

          get-⊥ : inr x∈w' ≡ inl idp → ⊥ ℓ
          get-⊥ ()

  module _
    {ℓ : Level} (G : Graph ℓ)
    (_≟Node_ : (x y : Node (U G)) → (x ≡ y) + (x ≠ y))
    where
    open import lib.graph-embeddings.Map
    open import lib.graph-embeddings.Map.Face.Walk.Homotopy

    open import lib.graph-walks.Walk

    open import lib.graph-walks.Walk.QuasiSimple
    open hom-normalisation G (_≟Node_)

    isSphericalMapS : Map G → Type (lsuc ℓ)
    isSphericalMapS 𝕄 = (x : Node (U G)) → (w : Walk (U G) x x)
                                         → ∥ (w ∼⟨ 𝕄 ⟩∼ ⟨ x ⟩) ∥

    isSphericalMap' : Map G → Type (lsuc ℓ)
    isSphericalMap' 𝕄 = (x y : Node (U G)) → (w₁ w₂ : Walk (U G) x y)
                                           → ∥ w₁ ∼⟨ 𝕄 ⟩∼ w₂ ∥

    isSphericalMap'-is-prop : (𝕄 : Map G) → isProp (isSphericalMap' 𝕄)
    isSphericalMap'-is-prop 𝕄 =
       pi-is-prop
        $ λ _ → pi-is-prop
          $ λ _ → pi-is-prop
            $ λ _ → pi-is-prop
                 $ λ _ → truncated-is-prop

    spherical-equiv : (𝕄 : Map G) → isSphericalMap G 𝕄 ≃ isSphericalMap' 𝕄
    spherical-equiv  𝕄 = qinv-≃ go (back , ((λ x → isSphericalMap'-is-prop 𝕄 _ _)) ,
                                 λ x → isSphericalMap-is-prop G 𝕄 _ _)
      where
      back : isSphericalMap' 𝕄 → isSphericalMap G 𝕄
      back g x y w1 w2 _ _ = g x y w1 w2

      go : isSphericalMap G 𝕄 → isSphericalMap' 𝕄
      go f _ _ w1 w2
        with hom-normalize 𝕄 f w1 | hom-normalize 𝕄 f w2
      ... | u , _ , WR.normal u-is-quasi-simple _ , w1∼u
          | v , _ , WR.normal v-is-quasi-simple _ , w2∼v = helper
        where
        helper : ∥ w1 ∼⟨ 𝕄 ⟩∼ w2 ∥
        helper = trunc-elim trunc-is-prop
                      (λ w1∼ → trunc-elim trunc-is-prop
                         (λ w2∼ → (trunc-elim trunc-is-prop
                            (λ w1'∼w2' → ∣ HomotopyWalks.hwalk-trans w1∼
                                    (HomotopyWalks.hwalk-trans
                                      w1'∼w2'
                                      (HomotopyWalks.hwalk-symm w2∼))∣)
                            (f _ _ u v u-is-quasi-simple v-is-quasi-simple)))
                        w2∼v)
                      w1∼u


Latest changes

(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