Pointed types equipped with automorphisms

module structured-types.pointed-types-equipped-with-automorphisms where
Imports
open import foundation.automorphisms
open import foundation.cartesian-product-types
open import foundation.contractible-types
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.functions
open import foundation.functoriality-dependent-pair-types
open import foundation.fundamental-theorem-of-identity-types
open import foundation.homotopies
open import foundation.identity-types
open import foundation.structure-identity-principle
open import foundation.universe-levels

open import structured-types.pointed-types

Idea

A pointed type equipped with an automorphism is a pair consisting of a pointed type A and an automorphism on the underlying type of A. The base point is not required to be preserved.

Definitions

Types equipped with an automorphism

Pointed-Type-With-Aut :
  (l : Level)  UU (lsuc l)
Pointed-Type-With-Aut l =
  Σ (Pointed-Type l)  X  Aut (type-Pointed-Type X))

module _
  {l : Level} (X : Pointed-Type-With-Aut l)
  where

  pointed-type-Pointed-Type-With-Aut : Pointed-Type l
  pointed-type-Pointed-Type-With-Aut = pr1 X

  type-Pointed-Type-With-Aut : UU l
  type-Pointed-Type-With-Aut =
    type-Pointed-Type pointed-type-Pointed-Type-With-Aut

  point-Pointed-Type-With-Aut : type-Pointed-Type-With-Aut
  point-Pointed-Type-With-Aut =
    point-Pointed-Type pointed-type-Pointed-Type-With-Aut

  aut-Pointed-Type-With-Aut : Aut type-Pointed-Type-With-Aut
  aut-Pointed-Type-With-Aut = pr2 X

  map-aut-Pointed-Type-With-Aut :
    type-Pointed-Type-With-Aut  type-Pointed-Type-With-Aut
  map-aut-Pointed-Type-With-Aut = map-equiv aut-Pointed-Type-With-Aut

  inv-map-aut-Pointed-Type-With-Aut :
    type-Pointed-Type-With-Aut  type-Pointed-Type-With-Aut
  inv-map-aut-Pointed-Type-With-Aut = map-inv-equiv aut-Pointed-Type-With-Aut

  issec-inv-map-aut-Pointed-Type-With-Aut :
    (map-aut-Pointed-Type-With-Aut  inv-map-aut-Pointed-Type-With-Aut) ~ id
  issec-inv-map-aut-Pointed-Type-With-Aut =
    issec-map-inv-equiv aut-Pointed-Type-With-Aut

  isretr-inv-map-aut-Pointed-Type-With-Aut :
    (inv-map-aut-Pointed-Type-With-Aut  map-aut-Pointed-Type-With-Aut) ~ id
  isretr-inv-map-aut-Pointed-Type-With-Aut =
    isretr-map-inv-equiv aut-Pointed-Type-With-Aut

Morphisms of pointed types with automorphisms

hom-Pointed-Type-With-Aut :
  {l1 l2 : Level} 
  Pointed-Type-With-Aut l1  Pointed-Type-With-Aut l2  UU (l1  l2)
hom-Pointed-Type-With-Aut {l1} {l2} X Y =
  Σ ( type-Pointed-Type-With-Aut X  type-Pointed-Type-With-Aut Y)
    ( λ f 
      (f (point-Pointed-Type-With-Aut X)  point-Pointed-Type-With-Aut Y) ×
      ( ( f  (map-aut-Pointed-Type-With-Aut X)) ~
        ( (map-aut-Pointed-Type-With-Aut Y)  f)))

module _
  {l1 l2 : Level} (X : Pointed-Type-With-Aut l1) (Y : Pointed-Type-With-Aut l2)
  (f : hom-Pointed-Type-With-Aut X Y)
  where

  map-hom-Pointed-Type-With-Aut :
    type-Pointed-Type-With-Aut X  type-Pointed-Type-With-Aut Y
  map-hom-Pointed-Type-With-Aut = pr1 f

  preserves-point-map-hom-Pointed-Type-With-Aut :
    ( map-hom-Pointed-Type-With-Aut (point-Pointed-Type-With-Aut X)) 
    ( point-Pointed-Type-With-Aut Y)
  preserves-point-map-hom-Pointed-Type-With-Aut = pr1 (pr2 f)

  preserves-aut-map-hom-Pointed-Type-With-Aut :
    ( map-hom-Pointed-Type-With-Aut  map-aut-Pointed-Type-With-Aut X) ~
    ( ( map-aut-Pointed-Type-With-Aut Y)  map-hom-Pointed-Type-With-Aut)
  preserves-aut-map-hom-Pointed-Type-With-Aut = pr2 (pr2 f)

Properties

Characterization of the identity type of morphisms of pointed types with automorphisms

htpy-hom-Pointed-Type-With-Aut :
  {l1 l2 : Level} (X : Pointed-Type-With-Aut l1)
  (Y : Pointed-Type-With-Aut l2) (h1 h2 : hom-Pointed-Type-With-Aut X Y) 
  UU (l1  l2)
htpy-hom-Pointed-Type-With-Aut X Y h1 h2 =
  Σ ( map-hom-Pointed-Type-With-Aut X Y h1
      ~ map-hom-Pointed-Type-With-Aut X Y h2)
    ( λ H 
      ( ( preserves-point-map-hom-Pointed-Type-With-Aut X Y h1) 
        ( ( H (point-Pointed-Type-With-Aut X)) 
          ( preserves-point-map-hom-Pointed-Type-With-Aut X Y h2))) ×
      ( ( x : type-Pointed-Type-With-Aut X) 
        ( ( ( preserves-aut-map-hom-Pointed-Type-With-Aut X Y h1 x) 
            ( ap (map-aut-Pointed-Type-With-Aut Y) (H x))) 
          ( ( H (map-aut-Pointed-Type-With-Aut X x)) 
            ( preserves-aut-map-hom-Pointed-Type-With-Aut X Y h2 x)))))

refl-htpy-hom-Pointed-Type-With-Aut :
  {l1 l2 : Level} (X : Pointed-Type-With-Aut l1)
  (Y : Pointed-Type-With-Aut l2) (h : hom-Pointed-Type-With-Aut X Y) 
  htpy-hom-Pointed-Type-With-Aut X Y h h
refl-htpy-hom-Pointed-Type-With-Aut X Y h =
  pair refl-htpy (pair refl  x  right-unit))

htpy-hom-Pointed-Type-With-Aut-eq :
  {l1 l2 : Level} (X : Pointed-Type-With-Aut l1)
  (Y : Pointed-Type-With-Aut l2) (h1 h2 : hom-Pointed-Type-With-Aut X Y) 
  h1  h2  htpy-hom-Pointed-Type-With-Aut X Y h1 h2
htpy-hom-Pointed-Type-With-Aut-eq X Y h1 .h1 refl =
  refl-htpy-hom-Pointed-Type-With-Aut X Y h1

is-contr-total-htpy-hom-Pointed-Type-With-Aut :
  {l1 l2 : Level} (X : Pointed-Type-With-Aut l1)
  (Y : Pointed-Type-With-Aut l2) (h1 : hom-Pointed-Type-With-Aut X Y) 
  is-contr
    ( Σ ( hom-Pointed-Type-With-Aut X Y)
        ( htpy-hom-Pointed-Type-With-Aut X Y h1))
is-contr-total-htpy-hom-Pointed-Type-With-Aut X Y h1 =
  is-contr-total-Eq-structure
    ( λ ( map-h2 : type-Pointed-Type-With-Aut X  type-Pointed-Type-With-Aut Y)
        ( str-h2 : ( ( map-h2 (point-Pointed-Type-With-Aut X)) 
                     ( point-Pointed-Type-With-Aut Y)) ×
                   ( ( x : type-Pointed-Type-With-Aut X) 
                     ( map-h2 (map-aut-Pointed-Type-With-Aut X x)) 
                     ( map-aut-Pointed-Type-With-Aut Y (map-h2 x))))
        ( H : map-hom-Pointed-Type-With-Aut X Y h1 ~ map-h2) 
        ( ( preserves-point-map-hom-Pointed-Type-With-Aut X Y h1) 
          ( ( H (point-Pointed-Type-With-Aut X)) 
            ( pr1 str-h2))) ×
        ( ( x : type-Pointed-Type-With-Aut X) 
          ( ( ( preserves-aut-map-hom-Pointed-Type-With-Aut X Y h1 x) 
              ( ap (map-aut-Pointed-Type-With-Aut Y) (H x))) 
            ( ( H (map-aut-Pointed-Type-With-Aut X x)) 
              ( pr2 str-h2 x)))))
    ( is-contr-total-htpy (map-hom-Pointed-Type-With-Aut X Y h1))
    ( pair (map-hom-Pointed-Type-With-Aut X Y h1) refl-htpy)
    ( is-contr-total-Eq-structure
      ( λ ( point-h2 :
            ( map-hom-Pointed-Type-With-Aut X Y h1
              ( point-Pointed-Type-With-Aut X)) 
            ( point-Pointed-Type-With-Aut Y))
          ( aut-h2 :
            ( x : type-Pointed-Type-With-Aut X) 
            ( map-hom-Pointed-Type-With-Aut X Y h1
              ( map-aut-Pointed-Type-With-Aut X x)) 
            ( map-aut-Pointed-Type-With-Aut Y
              ( map-hom-Pointed-Type-With-Aut X Y h1 x)))
          ( α :
            preserves-point-map-hom-Pointed-Type-With-Aut X Y h1  point-h2) 
          ( ( x : type-Pointed-Type-With-Aut X) 
            ( ( preserves-aut-map-hom-Pointed-Type-With-Aut X Y h1 x) 
              ( refl)) 
            ( aut-h2 x)))
      ( is-contr-total-path
        ( preserves-point-map-hom-Pointed-Type-With-Aut X Y h1))
      ( pair (preserves-point-map-hom-Pointed-Type-With-Aut X Y h1) refl)
      ( is-contr-equiv'
        ( Σ ( ( x : type-Pointed-Type-With-Aut X) 
              ( map-hom-Pointed-Type-With-Aut X Y h1
                ( map-aut-Pointed-Type-With-Aut X x)) 
              ( map-aut-Pointed-Type-With-Aut Y
                ( map-hom-Pointed-Type-With-Aut X Y h1 x)))
            ( λ aut-h2 
              ( x : type-Pointed-Type-With-Aut X) 
              preserves-aut-map-hom-Pointed-Type-With-Aut X Y h1 x  aut-h2 x))
        ( equiv-tot (equiv-concat-htpy right-unit-htpy))
        ( is-contr-total-htpy
          ( preserves-aut-map-hom-Pointed-Type-With-Aut X Y h1))))

is-equiv-htpy-hom-Pointed-Type-With-Aut :
  {l1 l2 : Level} (X : Pointed-Type-With-Aut l1)
  (Y : Pointed-Type-With-Aut l2) (h1 h2 : hom-Pointed-Type-With-Aut X Y) 
  is-equiv (htpy-hom-Pointed-Type-With-Aut-eq X Y h1 h2)
is-equiv-htpy-hom-Pointed-Type-With-Aut X Y h1 =
  fundamental-theorem-id
    ( is-contr-total-htpy-hom-Pointed-Type-With-Aut X Y h1)
    ( htpy-hom-Pointed-Type-With-Aut-eq X Y h1)

eq-htpy-hom-Pointed-Type-With-Aut :
  {l1 l2 : Level} (X : Pointed-Type-With-Aut l1)
  (Y : Pointed-Type-With-Aut l2) (h1 h2 : hom-Pointed-Type-With-Aut X Y) 
  htpy-hom-Pointed-Type-With-Aut X Y h1 h2  h1  h2
eq-htpy-hom-Pointed-Type-With-Aut X Y h1 h2 =
  map-inv-is-equiv (is-equiv-htpy-hom-Pointed-Type-With-Aut X Y h1 h2)