Martin Escardo 7th December 2018.
Characterization of equality in the lifting via the structure of
identity principle.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
module Lifting.IdentityViaSIP
        (๐ฃ : Universe)
        {๐ค : Universe}
        {X : ๐ค ฬ }
       where
open import UF.Base
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.FunExt
open import UF.Univalence
open import UF.UA-FunExt
open import UF.StructureIdentityPrinciple
open import Lifting.Construction ๐ฃ
_โ_ : ๐ X โ ๐ X โ ๐ฃ โ ๐ค ฬ
l โ m = ฮฃ e ๊ is-defined l โ is-defined m , value l ๏ผ value m โ โ e โ
๐-Id : is-univalent ๐ฃ โ (l m : ๐ X) โ (l ๏ผ m) โ (l โ m)
๐-Id ua = ๏ผ-is-โโ'
 where
  open gsip-with-axioms'
        ๐ฃ (๐ฃ โ ๐ค) (๐ฃ โ ๐ค) ๐ฃ ua
        (ฮป P โ P โ X)
        (ฮป P s โ is-prop P)
        (ฮป P s โ being-prop-is-prop (univalence-gives-funext ua))
        (ฮป {l m (f , e) โ prโ l ๏ผ prโ m โ f})
        (ฮป l โ refl)
        (ฮป P ฮต ฮด โ id)
        (ฮป A ฯ ฯ
 โ refl-left-neutral)
โ-gives-๏ผ : is-univalent ๐ฃ โ {l m : ๐ X} โ (l โ m) โ l ๏ผ m
โ-gives-๏ผ ua = โ ๐-Id ua _ _ โโปยน
\end{code}
When dealing with functions it is often more convenient to work with
pointwise equality, and hence we also consider:
\begin{code}
_โยท_ : ๐ X โ ๐ X โ ๐ฃ โ ๐ค ฬ
l โยท m = ฮฃ e ๊ is-defined l โ is-defined m , value l โผ value m โ โ e โ
is-defined-โยท : (l m : ๐ X)
              โ l โยท m โ is-defined l โ is-defined m
is-defined-โยท l m = prโ
value-โยท : (l m : ๐ X) (๐ : l โยท m)
         โ value l โผ (ฮป x โ value m (โ is-defined-โยท l m ๐ โ x))
value-โยท l m = prโ
Id-to-โยท : (l m : ๐ X) โ (l ๏ผ m) โ (l โยท m)
Id-to-โยท l m refl = (โ-refl (is-defined l)) , (ฮป x โ refl)
๐-Idยท : is-univalent ๐ฃ
      โ funext ๐ฃ ๐ค
      โ (l m : ๐ X) โ (l ๏ผ m) โ (l โยท m)
๐-Idยท ua fe l m = (๐-Id ua l m)
                โ (ฮฃ-cong (ฮป e โ โ-funext fe (value l) (value m โ โ e โ)))
โยท-gives-๏ผ : is-univalent ๐ฃ
           โ funext ๐ฃ ๐ค
           โ {l m : ๐ X} โ (l โยท m) โ l ๏ผ m
โยท-gives-๏ผ ua fe = โ ๐-Idยท ua fe _ _ โโปยน
\end{code}
Added 8th September 2025.
\begin{code}
โยท-refl : (l : ๐ X) โ l โยท l
โยท-refl l = โ-refl _ , โผ-refl
โยท-sym : (l m : ๐ X) โ l โยท m โ m โยท l
โยท-sym l m (e , d) =
 โ-sym e ,
 ฮป p โ
  value m p                   ๏ผโจ ap (value m) ((inverses-are-sections' e p)โปยน) โฉ
  value m (โ e โ (โ e โโปยน p)) ๏ผโจ (d (โ e โโปยน p))โปยน โฉ
  value l (โ e โโปยน p)         โ
โยท-trans : (l m n : ๐ X) โ l โยท m โ m โยท n โ l โยท n
โยท-trans l m n (e , d) (e' , d') =
 (e โ e') ,
 (ฮป p โ value l p                  ๏ผโจ d p โฉ
        value m (โ e โ p)          ๏ผโจ d' (โ e โ p) โฉ
        value n (โ e' โ (โ e โ p)) ๏ผโจ refl โฉ
        value n (โ e โ e' โ p)     โ)
\end{code}