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}