lib.graph-walks.Walk.QuasiSimpleFinite.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
| On homotopy of walks and combinatorial spherical maps in HoTT | 
{-# OPTIONS --without-K --exact-split #-}
module lib.graph-walks.Walk.QuasiSimpleFinite
  where
  open import foundations.Core
  open import foundations.Finite
  open import foundations.NaturalsType
  open import foundations.TypesofMorphisms
  open import lib.graph-definitions.Graph
  open import lib.graph-classes.FiniteGraph
  module
    _ {ℓ : Level}(G : Graph ℓ)
      (G-is-finite : isFiniteGraph G)
    where
    open import foundations.Nat ℓ
    open import foundations.Fin ℓ
    open import lib.graph-walks.Walk hiding (length)
    open import lib.graph-walks.Walk.Composition
    open ∙-walk G
    open import lib.graph-walks.Walk.QuasiSimple
    open Graph
    open quasi-simple-walks {G = G}
    open ∈-walk G
    Nodes-is-finite = isFiniteGraph.NodeDec G-is-finite
    Edges-is-finite = isFiniteGraph.EdgeDec G-is-finite
    _≟Node_ : (x y : Node G) → (x ≡ y) + (x ≠ y)
    _≟Node_ = isFinite-→-isDec Nodes-is-finite
    open WR G (_≟Node_)
    Ng : ℕ
    Ng = cardinal (Node G) Nodes-is-finite
    equiv-fin-sigma-∈
      : ∀ {x y} → (w : Walk G x y)
      → (∑[ x ] (x ∈w w)) ≃ ⟦ length w ⟧
    equiv-fin-sigma-∈ ⟨ x ⟩ =  qinv-≃ (λ ()) (g
         , (λ { (zero , ()) ; (succ _ , ())})
         , λ { ()})
      where
      g : _
      g (zero , ())
      g (succ π₃ , ())
    equiv-fin-sigma-∈ {x = x}{y} (e ⊙ w)
      = begin≃
        (∑[ y  ] (y ∈w (e ⊙ w)))                  ≃⟨ i ⟩
        (∑[ y ] (y ≡ x)) + (∑[ y ] (y ∈w w) )     ≃⟨ ii ⟩
        (𝟙 ℓ) + (∑[ y ] (y ∈w w))                 ≃⟨ iii ⟩
        (𝟙 ℓ) + ⟦ length w ⟧                      ≃⟨ iv ⟩
         ⟦ succ (length w) ⟧'                     ≃⟨ v ⟩
         ⟦ succ (length w) ⟧                      ≃∎
      where
      IH : (∑[ y ] (y ∈w w)) ≃ ⟦ length w ⟧
      IH = equiv-fin-sigma-∈ w
      i = ∑-+-≃-+-∑
      ii = equiv-+-fixed-right (contr-≃-𝟙 (pathto-is-contr _ _ ))
      iii = equiv-+-fixed-left IH
      iv = equiv-+-fixed-left (Fin₁≃Fin₂ _)
      v =  ≃-sym (Fin₁≃Fin₂ _)
    proj-node : ∀ {x y} (w : Walk G x y)
     → (∑[ x ] (x ∈w w)) → Node G
    proj-node w (x , p) = x
    proj-node-is-inj-when-w-is-quasi-simple
      :  ∀ {x y} (w : Walk G x y)
      → w is-quasi-simple
      → (proj-node w) is-injective
    proj-node-is-inj-when-w-is-quasi-simple w w-s idp
      = pair= (idp , w-s _ _ _)
    finite-quasi-simple-walks-type : ℕ → Node G → Node G → Type ℓ
    finite-quasi-simple-walks-type n x y
      = ∑[ w ∶ Walk G x y ] (w is-quasi-simple) × (length w ≡ n)
    finite-quasi-simple-walks-type-is-set
      : ∀ (n : ℕ) → ∀ x y
      → isSet (finite-quasi-simple-walks-type n x y)
    finite-quasi-simple-walks-type-is-set n x y
      = ∑-set (Walk-is-set G) λ w →
          ∑-set (prop-is-set (being-quasi-simple-is-prop w))
          λ w-s → prop-is-set (ℕ-is-set _ _)
      where
      open import lib.graph-walks.Walk.isSet
    qswalk-equiv-sigmas
      : ∀ {x y} → ∀ n
      → (∑[ w ∶ Walk G x y ] (w is-quasi-simple) × (length w ≡ succ n))
      ≃ (∑[ x' ] (∑[ e ∶ Edge G x x' ]
            ∑[ IH ∶ (∑[ w' ∶ Walk G x' y ]
             (w' is-quasi-simple) × (length w' ≡ n)) ]
               (¬ (x ∈w (proj₁ IH)))))
    qswalk-equiv-sigmas {x = x}{y} n = qinv-≃ f (g , h1 , h2)
      where
      f : _
      f ((e ⊙ w') , w-s , idp)
        = (_ , e , (w' , conservation e w' w-s , idp)
          , λ x∈w' → get-⊥ x∈w' (x-in-different-pos x∈w'))
        where
        x-in-different-pos : (x∈w' : x ∈w w') → inr x∈w' ≡ inl idp
        x-in-different-pos x∈w' = w-s x (inr x∈w') (inl idp)
        get-⊥ :  (x∈w' : x ∈w w') → inr x∈w' ≡ inl idp → ⊥ ℓ
        get-⊥ x∈w' ()
      g : _
      g (x' , e , (w' , w'-s , idp) , x∌ )
        = ((e ⊙ w') , ⊙-quasi-simple-is-quasi-simple {e = e} w'-s x∌ , idp)
      h1 : _
      h1  (x' , e , (w' , w'-s , idp) , x'∌ )
        = pair= (idp , pair= (idp , pair= (pair= (idp
        , pair= ((being-quasi-simple-is-prop w' _ _
                  , ℕ-is-set _ _ _ _)))
                  , pi-is-prop (λ _ → ⊥-is-prop)  _ _)))
      h2 : _
      h2  ((e ⊙ w') , w-s , idp)
        = pair= (idp , pair= (being-quasi-simple-is-prop (e ⊙ w') _ _ , ℕ-is-set _ _ _ _))
    ∑∈-is-finite
      : ∀ {x y}
      → (w : Walk G x y) -- → w is-quasi-simple
      → (∑[ x ] (x ∈w w)) is-finite
    ∑∈-is-finite w  =
      equiv-preserves-finiteness
        (≃-sym (equiv-fin-sigma-∈ w))
        Fin-is-finite
    cardinal-∑∈-is-length
      :  ∀ {x y}
      → (w : Walk G x y)
      → (cardinal (∑[ x ] (x ∈w w)) (∑∈-is-finite w)) ≡ length w
    cardinal-∑∈-is-length w
      = same-cardinal (equiv-fin-sigma-∈ w)
                      (∑∈-is-finite w)
                      Fin-is-finite
    module finiteness-lemmas
      -- The following are well-known lemmas about finite types.
      (+-finite : ∀ {A B : Type ℓ} → isFinite A → isFinite B → isFinite (A + B))
      (∏-finite : ∀ {ℓ₁ ℓ₂} {A : Type ℓ₁} {B : A → Type ℓ₂}
                → isFinite A → ((a : A) → isFinite (B a)) → isFinite (∏ A B))
      (∑-finite : ∀ {ℓ₁ ℓ₂} {A : Type ℓ₁} {B : A → Type ℓ₂}
                → isFinite A → ((a : A) → isFinite (B a)) → isFinite (∑ A B))
      (injection-gives-≤-cardinals
        : ∀ {ℓ₁ ℓ₂} {A : Type ℓ₁} {B : Type ℓ₂}
        → (f : A → B)
        → (fin-A : A is-finite) → (fin-B : B is-finite)
        → f is-injective
        → _≤_ (cardinal A fin-A) (cardinal B fin-B))
      where
      ∈w-is-finite : ∀ {x y z} → (w : Walk G x y) → (z ∈w w) is-finite
      ∈w-is-finite ⟨ _ ⟩ = 𝟘-is-finite
      ∈w-is-finite (x ⊙ w) = +-finite (decidable-→-≡-is-finite _≟Node_ _ _)
                                      (∈w-is-finite w)
      qswalks-has-bounded-length
        : ∀ {x y}
        → (w : Walk G x y) → w is-quasi-simple
        → length w < succ Ng
      qswalks-has-bounded-length ⟨ x ⟩ w-s = ∗
      qswalks-has-bounded-length w@(e ⊙ w') w-s
        = ≤-to-< (tr (λ o → o ≤ Ng) (cardinal-∑∈-is-length w) is-≤)
        where
        is-≤ : (cardinal (∑[ x ] (x ∈w w)) (∑∈-is-finite w)) ≤ Ng
        is-≤ = injection-gives-≤-cardinals (proj-node w) (∑∈-is-finite w)
          Nodes-is-finite (proj-node-is-inj-when-w-is-quasi-simple w w-s)
      quasi-quasi-simple-equiv-qswalk : ∀ x y
          → (∑[ w ∶ Walk G x y ] (w is-quasi-simple))
          ≃ (∑[ (n , _) ∶ ⟦ succ Ng ⟧ ] (finite-quasi-simple-walks-type n x y))
      quasi-quasi-simple-equiv-qswalk x y = qinv-≃ f (g ,  helper
                              , λ { (w , w-s) → idp})
        where
        f : _
        f (w , w-s) = (length w , len<) , w , w-s , idp
          where
          len< : length w < succ Ng
          len< = qswalks-has-bounded-length w w-s
        g : _
        g (_ , w , w-s , idp) = w , w-s
        helper : (f ∘ g) ∼ id
        helper ((n , n<) , w , w-s , idp)
          rewrite <-prop {n = succ Ng}{m = length w} (proj₂ (proj₁ (f (w , w-s)))) n<
            = idp
      finite-qswalks
        : ∀ (n : ℕ) → (x y : Node G)
        → isFinite (finite-quasi-simple-walks-type n x y)
      finite-qswalks zero x y =
          equiv-preserves-finiteness (≃-sym (calc x y)) (decidable-→-≡-is-finite _≟Node_ _ _)
        where
        -- All walks with length 0 are trivial quasi-simple walk.
        calc : ∀ x y →
          (∑[ w ∶ Walk G x y ] (w is-quasi-simple) × (length w ≡ 0))
          ≃ (x ≡ y)
        calc x y
          with x ≟Node y
        ... | inr x≠y = qinv-≃ f ((λ x≡y → ⊥-elim (x≠y x≡y))
                                , (λ {p → Node-is-set G _ _ _ _})
                                , λ {p → ⊥-elim (x≠y (f p))})
              where
              f : _
              f (w , _ , p)
                with length≡0-is-trivial w p
              ... | idp , idp = ⊥-elim (x≠y idp)
        ... | inl idp = qinv-≃ (λ _ → idp) (g , (λ {p → Node-is-set G _ _ _ _}) , h)
          where
          g : _
          g _ = ⟨ x ⟩ , one-point-walk-is-quasi-simple x , idp
          h : _
          h t@(w , _ , p)
            with length≡0-is-trivial w p
          ... | o , q
              rewrite Node-is-set G x x o idp
              =  pair= (((! q)
                , pair= ((being-quasi-simple-is-prop w _ _
                , ℕ-is-set _ _ _ _))))
      finite-qswalks (succ n) x y
          = equiv-preserves-finiteness (≃-sym (qswalk-equiv-sigmas n)) $
                ∑-finite Nodes-is-finite λ x' →
                  ∑-finite (Edges-is-finite x x') λ _ →
                    ∑-finite (finite-qswalks n x' y) λ _ →
                      ∏-finite (∈w-is-finite _) λ _ →
                        𝟘-is-finite
      sigma-qswalks-forms-finite-set
        : ∀ (n : ℕ)
        → (∑[ x ] ∑[ y ] ∑[ m ∶ ⟦ succ n ⟧ ] (finite-quasi-simple-walks-type n x y)) is-finite
      sigma-qswalks-forms-finite-set n
        = ∑-finite Nodes-is-finite λ x →
          ∑-finite Nodes-is-finite λ y →
            ∑-finite Fin-is-finite (λ m → finite-qswalks n x y)
      finite-graph-has-finite-quasi-simple-walks
        : (∑[ x ] ∑[ y ] ∑[ w ∶ Walk G x y ] (w is-quasi-simple)) is-finite
      finite-graph-has-finite-quasi-simple-walks
        = ∑-finite Nodes-is-finite λ x →
          ∑-finite Nodes-is-finite λ y →
            equiv-preserves-finiteness
              (≃-sym (quasi-quasi-simple-equiv-qswalk x y))
              (∑-finite Fin-is-finite λ {(n , n<Ng) → finite-qswalks n x y} )
(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