Martin Escardo, 6th December 2018

\begin{code}

{-# OPTIONS --safe --without-K #-}

open import MLTT.Spartan

module Slice.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 Slice.Construction ๐“ฃ

_โ‹_ : ๐“• X โ†’ ๐“• X โ†’ ๐“ฃ โŠ” ๐“ค ฬ‡
l โ‹ m = ฮฃ e ๊ž‰ source l โ‰ƒ source m , family l ๏ผ family m โˆ˜ โŒœ e โŒ

๐“•-Id : is-univalent ๐“ฃ โ†’ (l m : ๐“• X) โ†’ (l ๏ผ m) โ‰ƒ (l โ‹ m)
๐“•-Id ua = ๏ผ-is-โ‰ƒโ‚›'
 where
  open gsip
        ๐“ฃ (๐“ฃ โŠ” ๐“ค) ua
        (ฮป P โ†’ P โ†’ X)
        (ฮป {l m (f , e) โ†’ family l ๏ผ family m โˆ˜ f})
        (ฮป l โ†’ refl)
        (ฮป P ฮต ฮด โ†’ id)
        (ฮป A ฯ„ ฯ… โ†’ refl-left-neutral)

โ‹-gives-๏ผ : is-univalent ๐“ฃ โ†’ {l m : ๐“• X} โ†’ (l โ‹ m) โ†’ l ๏ผ m
โ‹-gives-๏ผ ua = โŒœ ๐“•-Id ua _ _ โŒโปยน

_โ‹ยท_ : ๐“• X โ†’ ๐“• X โ†’ ๐“ฃ โŠ” ๐“ค ฬ‡
l โ‹ยท m = ฮฃ e ๊ž‰ source l โ‰ƒ source m , family l โˆผ family m โˆ˜ โŒœ e โŒ

๐“•-Idยท : is-univalent ๐“ฃ
      โ†’ funext ๐“ฃ ๐“ค
      โ†’ (l m : ๐“• X) โ†’ (l ๏ผ m) โ‰ƒ (l โ‹ยท m)
๐“•-Idยท ua fe l m = (๐“•-Id ua l m) โ— (ฮฃ-cong (ฮป e โ†’ โ‰ƒ-funext fe (family l) (family m โˆ˜ โŒœ e โŒ)))

\end{code}