Enriched undirected graphs

module graph-theory.enriched-undirected-graphs where
Imports
open import foundation.connected-components
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.functions
open import foundation.homotopies
open import foundation.identity-types
open import foundation.universe-levels

open import graph-theory.neighbors-undirected-graphs
open import graph-theory.undirected-graphs

open import higher-group-theory.higher-group-actions
open import higher-group-theory.higher-groups

Idea

Consider a type A equipped with a type family B over A. An (A,B)-enriched undirected graph is an undirected graph G := (V,E) equipped with a map sh : V → A, and for each vertex v an equivalence from B (sh v) to the type of all edges going out of v, i.e., to the type neighbor v.

The map sh : V → A assigns to each vertex a shape, and with it an ∞-group BAut (sh v). The type family B restricted to BAut (sh v) is an Aut (sh v)-type, and the equivalence B (sh v) ≃ neighbor v then ensures type type being acted on is neighbor v.

Definition

Enriched-Undirected-Graph :
  {l1 l2 : Level} (l3 l4 : Level) (A : UU l1) (B : A  UU l2) 
  UU (l1  l2  lsuc l3  lsuc l4)
Enriched-Undirected-Graph l3 l4 A B =
  Σ ( Undirected-Graph l3 l4)
    ( λ G 
      Σ ( vertex-Undirected-Graph G  A)
        ( λ f 
          ( x : vertex-Undirected-Graph G) 
          B (f x)  neighbor-Undirected-Graph G x))

module _
  {l1 l2 l3 l4 : Level} (A : UU l1) (B : A  UU l2)
  (G : Enriched-Undirected-Graph l3 l4 A B)
  where

  undirected-graph-Enriched-Undirected-Graph : Undirected-Graph l3 l4
  undirected-graph-Enriched-Undirected-Graph = pr1 G

  vertex-Enriched-Undirected-Graph : UU l3
  vertex-Enriched-Undirected-Graph =
    vertex-Undirected-Graph undirected-graph-Enriched-Undirected-Graph

  unordered-pair-vertices-Enriched-Undirected-Graph : UU (lsuc lzero  l3)
  unordered-pair-vertices-Enriched-Undirected-Graph =
    unordered-pair-vertices-Undirected-Graph
      undirected-graph-Enriched-Undirected-Graph

  edge-Enriched-Undirected-Graph :
    unordered-pair-vertices-Enriched-Undirected-Graph  UU l4
  edge-Enriched-Undirected-Graph =
    edge-Undirected-Graph undirected-graph-Enriched-Undirected-Graph

  shape-vertex-Enriched-Undirected-Graph : vertex-Enriched-Undirected-Graph  A
  shape-vertex-Enriched-Undirected-Graph = pr1 (pr2 G)

  classifying-type-∞-group-vertex-Enriched-Undirected-Graph :
    vertex-Enriched-Undirected-Graph  UU l1
  classifying-type-∞-group-vertex-Enriched-Undirected-Graph v =
    connected-component A (shape-vertex-Enriched-Undirected-Graph v)

  point-classifying-type-∞-group-vertex-Enriched-Undirected-Graph :
    (v : vertex-Enriched-Undirected-Graph) 
    classifying-type-∞-group-vertex-Enriched-Undirected-Graph v
  point-classifying-type-∞-group-vertex-Enriched-Undirected-Graph v =
    point-connected-component A (shape-vertex-Enriched-Undirected-Graph v)

  ∞-group-vertex-Enriched-Undirected-Graph :
    vertex-Enriched-Undirected-Graph  ∞-Group l1
  ∞-group-vertex-Enriched-Undirected-Graph v =
    connected-component-∞-Group A (shape-vertex-Enriched-Undirected-Graph v)

  type-∞-group-vertex-Enriched-Undirected-Graph :
    vertex-Enriched-Undirected-Graph  UU l1
  type-∞-group-vertex-Enriched-Undirected-Graph v =
    type-∞-Group (∞-group-vertex-Enriched-Undirected-Graph v)

  mul-∞-group-vertex-Enriched-Undirected-Graph :
    (v : vertex-Enriched-Undirected-Graph) 
    (h g : type-∞-group-vertex-Enriched-Undirected-Graph v) 
    type-∞-group-vertex-Enriched-Undirected-Graph v
  mul-∞-group-vertex-Enriched-Undirected-Graph v h g =
    mul-∞-Group (∞-group-vertex-Enriched-Undirected-Graph v) h g

  neighbor-Enriched-Undirected-Graph :
    vertex-Enriched-Undirected-Graph  UU (l3  l4)
  neighbor-Enriched-Undirected-Graph =
    neighbor-Undirected-Graph undirected-graph-Enriched-Undirected-Graph

  equiv-neighbor-Enriched-Undirected-Graph :
    (v : vertex-Enriched-Undirected-Graph) 
    B (shape-vertex-Enriched-Undirected-Graph v) 
    neighbor-Enriched-Undirected-Graph v
  equiv-neighbor-Enriched-Undirected-Graph = pr2 (pr2 G)

  map-equiv-neighbor-Enriched-Undirected-Graph :
    (v : vertex-Enriched-Undirected-Graph) 
    B (shape-vertex-Enriched-Undirected-Graph v) 
    neighbor-Enriched-Undirected-Graph v
  map-equiv-neighbor-Enriched-Undirected-Graph v =
    map-equiv (equiv-neighbor-Enriched-Undirected-Graph v)

  map-inv-equiv-neighbor-Enriched-Undirected-Graph :
    (v : vertex-Enriched-Undirected-Graph) 
    neighbor-Enriched-Undirected-Graph v 
    B (shape-vertex-Enriched-Undirected-Graph v)
  map-inv-equiv-neighbor-Enriched-Undirected-Graph v =
    map-inv-equiv (equiv-neighbor-Enriched-Undirected-Graph v)

  issec-map-inv-equiv-neighbor-Enriched-Undirected-Graph :
    (v : vertex-Enriched-Undirected-Graph) 
    ( map-equiv-neighbor-Enriched-Undirected-Graph v 
      map-inv-equiv-neighbor-Enriched-Undirected-Graph v) ~ id
  issec-map-inv-equiv-neighbor-Enriched-Undirected-Graph v =
    issec-map-inv-equiv (equiv-neighbor-Enriched-Undirected-Graph v)

  isretr-map-inv-equiv-neighbor-Enriched-Undirected-Graph :
    (v : vertex-Enriched-Undirected-Graph) 
    ( map-inv-equiv-neighbor-Enriched-Undirected-Graph v 
      map-equiv-neighbor-Enriched-Undirected-Graph v) ~ id
  isretr-map-inv-equiv-neighbor-Enriched-Undirected-Graph v =
    isretr-map-inv-equiv (equiv-neighbor-Enriched-Undirected-Graph v)

  action-∞-group-vertex-Enriched-Undirected-Graph :
    (v : vertex-Enriched-Undirected-Graph) 
    action-∞-Group l2 (∞-group-vertex-Enriched-Undirected-Graph v)
  action-∞-group-vertex-Enriched-Undirected-Graph v u = B (pr1 u)

  mul-action-∞-group-vertex-Enriched-Undirected-Graph :
    (v : vertex-Enriched-Undirected-Graph)
    (g : type-∞-group-vertex-Enriched-Undirected-Graph v) 
    neighbor-Enriched-Undirected-Graph v  neighbor-Enriched-Undirected-Graph v
  mul-action-∞-group-vertex-Enriched-Undirected-Graph v g e =
    map-equiv-neighbor-Enriched-Undirected-Graph v
      ( mul-action-∞-Group
        ( ∞-group-vertex-Enriched-Undirected-Graph v)
        ( action-∞-group-vertex-Enriched-Undirected-Graph v)
        ( g)
        ( map-inv-equiv-neighbor-Enriched-Undirected-Graph v e))

  associative-mul-action-∞-group-vertex-Enriched-Undirected-Graph :
    (v : vertex-Enriched-Undirected-Graph)
    (h g : type-∞-group-vertex-Enriched-Undirected-Graph v) 
    (x : neighbor-Enriched-Undirected-Graph v) 
    ( mul-action-∞-group-vertex-Enriched-Undirected-Graph v
      ( mul-∞-group-vertex-Enriched-Undirected-Graph v h g)
      ( x)) 
    ( mul-action-∞-group-vertex-Enriched-Undirected-Graph v g
      ( mul-action-∞-group-vertex-Enriched-Undirected-Graph v h x))
  associative-mul-action-∞-group-vertex-Enriched-Undirected-Graph v h g x =
    ap
      ( map-equiv-neighbor-Enriched-Undirected-Graph v)
      ( ( associative-mul-action-∞-Group
          ( ∞-group-vertex-Enriched-Undirected-Graph v)
          ( action-∞-group-vertex-Enriched-Undirected-Graph v)
          ( h)
          ( g)
          ( map-inv-equiv-neighbor-Enriched-Undirected-Graph v x)) 
        ( ap
          ( mul-action-∞-Group
            ( ∞-group-vertex-Enriched-Undirected-Graph v)
            ( action-∞-group-vertex-Enriched-Undirected-Graph v)
            ( g))
          ( inv
            ( isretr-map-inv-equiv-neighbor-Enriched-Undirected-Graph v
              ( mul-action-∞-Group
                ( ∞-group-vertex-Enriched-Undirected-Graph v)
                ( action-∞-group-vertex-Enriched-Undirected-Graph v) h
                ( map-inv-equiv-neighbor-Enriched-Undirected-Graph v x))))))