Home

同一視型は同値を保存する

module foundations.identity-type-respects-equivalence where
Imports
open import foundations.universe
open import foundations.identity-type
open import foundations.sigma-type
open import foundations.transport
open import foundations.bi-invertible-map
open import foundations.quasi-inverse-to-bi-invertible-map
open import foundations.function
open import foundations.homotopy
open import foundations.functions-are-functors
open import foundations.bi-invertible-map
open import foundations.groupoid-laws
open import foundations.identity-type-reasoning
open import foundations.quasi-inverse
open import foundations.bi-invertible-map-to-quasi-inverse
open import foundations.homotopies-are-natural-isomorphisms
private variable
   : Level
  A B : Type 

idRespEquiv :  (f : A  B)  biinv f
    (x y : A)  biinv  (p : x  y)  ap f p)
idRespEquiv f b x y = QuasiInv⇒biinv (record
  { g = λ p  sym (linv x)  (ap g p  linv y)
  ; linv = λ {refl  ap (sym (linv x) ∙_) (lunitId _)  linvId _}
  ; rinv = zz
  })
  where
    open QuasiInv (biinv⇒QuasiInv b)

    zw :  (p : f x  f y)
       ap (g  f) (sym (linv x)  (ap g p  linv y))  linv y
         linv x  (sym (linv x)  (ap g p  linv y))
    zw p = sym (naturalityHtpy linv _)  ap (linv x ∙_) (apId _)

    zx :  (p : f x  f y)
       ap (g  f) (sym (linv x)  (ap g p  linv y))
         linv x  ((sym (linv x)  (ap g p  linv y))  sym (linv y))
    zx p = rcancelId _ _ (linv y) (
        ap (g  f) (sym (linv x)  (ap g p  linv y))  linv y
      =⟨ zw p 
        linv x  (sym (linv x)  (ap g p  linv y))
      =⟨ sym (ap (linv x ∙_) (relimId _ _ (linvId _))) 
        linv x  ((sym (linv x)  (ap g p  linv y))  (sym (linv y)  linv y))
      =⟨ ap (linv x ∙_) (sym (assocId _ _ _)) 
        linv x  (((sym (linv x)  (ap g p  linv y))  sym (linv y))  linv y)
      =⟨ sym (assocId _ _ _) 
        (linv x  ((sym (linv x)  (ap g p  linv y))  sym (linv y)))  linv y
      )

    zy :  (p : f x  f y)
       rinv (f x)  ap f (sym (linv x)  (ap g p  linv y))  rinv (f x)  p
    zy p =
        rinv (f x)  ap f (sym (linv x)  (ap g p  linv y))
      =⟨ ap (rinv (f x) ∙_) (sym (apId _)) 
        rinv (f x)  ap (idFunction _) (ap f (sym (linv x)  (ap g p  linv y)))
      =⟨ naturalityHtpy rinv _ 
        ap (f  g) (ap f (sym (linv x)  (ap g p  linv y)))  rinv (f y)
      =⟨ ap (_∙ rinv (f y)) (apAp f (f  g) _) 
        ap (f  (g  f)) (sym (linv x)  (ap g p  linv y))  rinv (f y)
      =⟨ ap (_∙ rinv (f y)) (sym (apAp (g  f) f _)) 
        ap f (ap (g  f) (sym (linv x)  (ap g p  linv y)))  rinv (f y)
      =⟨ ap (_∙ rinv (f y)) (ap (ap f) (zx p)) 
        ap f (linv x  ((sym (linv x)  (ap g p  linv y))  sym (linv y)))  rinv (f y)
      =⟨ ap (_∙ rinv (f y)) (ap∙ f _ _) 
        (ap f (linv x)  ap f ((sym (linv x)  (ap g p  linv y))  sym (linv y)))  rinv (f y)
      =⟨ ap  w  (ap f (linv x)  w)  rinv (f y)) (ap∙ f _ _) 
        (ap f (linv x)  (ap f (sym (linv x)  (ap g p  linv y))  ap f (sym (linv y))))  rinv (f y)
      =⟨ ap  w  (ap f (linv x)  (w  ap f (sym (linv y))))  rinv (f y)) (ap∙ f _ _) 
        (ap f (linv x)  ((ap f (sym (linv x))  ap f (ap g p  linv y))  ap f (sym (linv y))))  rinv (f y)
      =⟨ ap (_∙ rinv (f y)) (sym (assocId _ _ _)) 
        ((ap f (linv x)  (ap f (sym (linv x))  ap f (ap g p  linv y)))  ap f (sym (linv y)))  rinv (f y)
      =⟨ ap  w  (w  ap f (sym (linv y)))  rinv (f y)) (sym (assocId _ _ _)) 
        (((ap f (linv x)  ap f (sym (linv x)))  ap f (ap g p  linv y))  ap f (sym (linv y)))  rinv (f y)
      =⟨ ap
             w 
               ((w  ap f (ap g p  linv y))  ap f (sym (linv y)))  rinv (f y))
            (sym (ap∙ f _ _)) 
        ((ap f (linv x  sym (linv x))  ap f (ap g p  linv y))  ap f (sym (linv y)))  rinv (f y)
      =⟨ ap  w  (w  ap f (sym (linv y)))  rinv (f y)) (lelimId _ _ (ap (ap f) (rinvId _))) 
        (ap f (ap g p  linv y)  ap f (sym (linv y)))  rinv (f y)
      =⟨ ap (_∙ rinv (f y)) (sym (ap∙ f _ _)) 
        ap f ((ap g p  linv y)  (sym (linv y)))  rinv (f y)
      =⟨ ap (_∙ rinv (f y)) (ap (ap f) (assocId _ _ _)) 
        ap f (ap g p  (linv y  sym (linv y)))  rinv (f y)
      =⟨ ap (_∙ rinv (f y)) (ap (ap f) (relimId _ _ (rinvId _))) 
        ap f (ap g p)  rinv (f y)
      =⟨ ap (_∙ rinv (f y)) (apAp _ _ _) 
        ap (f  g) p  rinv (f y)
      =⟨ sym (naturalityHtpy rinv p) 
        rinv (f x)  ap (idFunction _) p
      =⟨ ap (rinv (f x) ∙_) (apId p) 
        rinv (f x)  p
      

    zz :  (p : f x  f y)  ap f (sym (linv x)  (ap g p  linv y))  p
    zz p = lcancelId (rinv (f x)) _ p (zy p)