Crisp identity types

Content created by Fredrik Bakke.

Created on 2023-11-24.
Last modified on 2024-09-06.

{-# OPTIONS --cohesion --flat-split #-}

module modal-type-theory.crisp-identity-types where
Imports
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.identity-types
open import foundation.injective-maps
open import foundation.retractions
open import foundation.retracts-of-types
open import foundation.sections
open import foundation.universe-levels

open import modal-type-theory.flat-modality

Idea

We record here some basic facts about identity types in crisp contexts.

Definitions

Weak crisp identification induction

weak-crisp-based-ind-Id :
  {@l1 : Level} {l2 : Level} {@A : UU l1} {@a : A} 
  (C : (@y : A)  (a  y)  UU l2) 
  C a refl 
  (@y : A) (@p : a  y)  C y p
weak-crisp-based-ind-Id C b _ refl = b

Based crisp identification induction

Below we postulate the crisp identity induction principle as introduced in [Shu18]. Note that this principle should follow from the flat modality’s relation to the sharp modality, and the stronger pointwise-sharp construction as considered in [Mey].

module _
  {@l1 l2 : Level} {@A : UU l1} {@x : A}
  (@C : (@y : A)  @(x  y)  UU l2)
  (@d : (C x refl))
  where

  postulate
    crisp-based-ind-Id : {@y : A} (@p : x  y)  C y p
    compute-crisp-based-ind-Id : crisp-based-ind-Id {x} refl  d
module _
  {@l1 l2 : Level} {@A : UU l1}
  (@C : (@x y : A)  @(x  y)  UU l2)
  (@d : ((@x : A)  C x x refl))
  where

  crisp-ind-Id : {@x y : A} (@p : x  y)  C x y p
  crisp-ind-Id {x} {y} p = crisp-based-ind-Id  y p  C x y p) (d x) {y} p

  compute-crisp-ind-Id : (@x : A)  crisp-ind-Id {x} refl  d x
  compute-crisp-ind-Id x = compute-crisp-based-ind-Id  y p  C x y p) (d x)

Properties

Characterizing equality in the image of the flat modality

module _
  {@l : Level} {@A : UU l}
  where

  Eq-flat :  A   A  UU l
  Eq-flat (intro-flat x) (intro-flat y) =  (x  y)

  refl-Eq-flat : (u :  A)  Eq-flat u u
  refl-Eq-flat (intro-flat x) = intro-flat refl

  Eq-eq-flat : (u v :  A)  u  v  Eq-flat u v
  Eq-eq-flat u .u refl = refl-Eq-flat u

  eq-Eq-flat : (u v :  A)  Eq-flat u v  u  v
  eq-Eq-flat (intro-flat x) (intro-flat .x) (intro-flat refl) = refl

The retraction part is easy:

  is-retraction-eq-Eq-flat :
    (u v :  A)  is-retraction (Eq-eq-flat u v) (eq-Eq-flat u v)
  is-retraction-eq-Eq-flat (intro-flat x) (intro-flat .x) refl = refl

  retraction-Eq-eq-flat : (u v :  A)  retraction (Eq-eq-flat u v)
  pr1 (retraction-Eq-eq-flat u v) = eq-Eq-flat u v
  pr2 (retraction-Eq-eq-flat u v) = is-retraction-eq-Eq-flat u v

  retract-Eq-flat :
    (u v :  A)  (u  v) retract-of (Eq-flat u v)
  pr1 (retract-Eq-flat u v) = Eq-eq-flat u v
  pr1 (pr2 (retract-Eq-flat u v)) = eq-Eq-flat u v
  pr2 (pr2 (retract-Eq-flat u v)) = is-retraction-eq-Eq-flat u v

  is-injective-Eq-eq-flat :
    (u v :  A)  is-injective (Eq-eq-flat u v)
  is-injective-Eq-eq-flat u v =
    is-injective-retraction (Eq-eq-flat u v) (retraction-Eq-eq-flat u v)

To show it is also a section, however, we need the stronger crisp identity induction principle, which we have only postulated so far.

  is-section-eq-Eq-flat :
    (u v :  A)  is-section (Eq-eq-flat u v) (eq-Eq-flat u v)
  is-section-eq-Eq-flat (intro-flat x) (intro-flat y) (intro-flat p) =
    crisp-ind-Id
      ( λ x y p 
        ( Eq-eq-flat
          ( intro-flat x)
          ( intro-flat y)
          ( eq-Eq-flat (intro-flat x) (intro-flat y) (intro-flat p))) 
        ( intro-flat p))
      ( λ _  refl)
      ( p)
  is-equiv-Eq-eq-flat : (u v :  A)  is-equiv (Eq-eq-flat u v)
  is-equiv-Eq-eq-flat u v =
    is-equiv-is-invertible
      ( eq-Eq-flat u v)
      ( is-section-eq-Eq-flat u v)
      ( is-retraction-eq-Eq-flat u v)

  extensionality-flat : (u v :  A)  (u  v)  Eq-flat u v
  pr1 (extensionality-flat u v) = Eq-eq-flat u v
  pr2 (extensionality-flat u v) = is-equiv-Eq-eq-flat u v

The following is Theorem 6.1 in [Shu18].

  crisp-extensionality-flat :
    (@x y : A)  (intro-flat x  intro-flat y)   (x  y)
  crisp-extensionality-flat x y =
    extensionality-flat (intro-flat x) (intro-flat y)

The following is Corollary 6.2 in [Shu18].

  crisp-flat-extensionality-flat :
    (@u v :  A)  (u  v)   (counit-flat u  counit-flat v)
  crisp-flat-extensionality-flat (intro-flat x) (intro-flat y) =
    extensionality-flat (intro-flat x) (intro-flat y)

See also

References

[Mey]
David Jaz Meyers. Davidjaz/cohesion. GitHub repository. URL: https://github.com/DavidJaz/Cohesion.
[Shu18]
Michael Shulman. Brouwer's fixed-point theorem in real-cohesive homotopy type theory. Mathematical Structures in Computer Science, 28(6):856–941, 06 2018. arXiv:1509.07584, doi:10.1017/S0960129517000147.

Recent changes