Identity type.
\begin{code}
{-# OPTIONS --without-K --exact-split --safe --auto-inline #-}
module MLTT.Id where
open import MLTT.Universes
open import MLTT.Pi
open import MLTT.Identity-Type renaming (_๏ผ_ to infix 0 _๏ผ_) public
๐ป๐ฎ๐ป๐ต : {X : ๐ค ฬ } (x : X) โ x ๏ผ x
๐ป๐ฎ๐ป๐ต x = refl {_} {_} {x}
Id : {X : ๐ค ฬ } โ X โ X โ ๐ค ฬ
Id = _๏ผ_
Jbased : {X : ๐ค ฬ } (x : X) (A : (y : X) โ x ๏ผ y โ ๐ฅ ฬ )
โ A x refl โ (y : X) (r : x ๏ผ y) โ A y r
Jbased x A b .x refl = b
J : {X : ๐ค ฬ } (A : (x y : X) โ x ๏ผ y โ ๐ฅ ฬ )
โ ((x : X) โ A x x refl) โ {x y : X} (r : x ๏ผ y) โ A x y r
J A f {x} {y} = Jbased x (A x) (f x) y
private
transport' : {X : ๐ค ฬ } (A : X โ ๐ฅ ฬ ) {x y : X}
โ x ๏ผ y โ A x โ A y
transport' A {x} {y} p a = Jbased x (ฮป y p โ A y) a y p
transport : {X : ๐ค ฬ } (A : X โ ๐ฅ ฬ ) {x y : X}
โ x ๏ผ y โ A x โ A y
transport A refl = id
lhs : {X : ๐ค ฬ } {x y : X} โ x ๏ผ y โ X
lhs {๐ค} {X} {x} {y} p = x
rhs : {X : ๐ค ฬ } {x y : X} โ x ๏ผ y โ X
rhs {๐ค} {X} {x} {y} p = y
_โ_ : {X : ๐ค ฬ } {x y z : X} โ x ๏ผ y โ y ๏ผ z โ x ๏ผ z
p โ q = transport (lhs p ๏ผ_) q p
_โปยน : {X : ๐ค ฬ } โ {x y : X} โ x ๏ผ y โ y ๏ผ x
p โปยน = transport (_๏ผ lhs p) p refl
ap : {X : ๐ค ฬ } {Y : ๐ฅ ฬ } (f : X โ Y) {x x' : X} โ x ๏ผ x' โ f x ๏ผ f x'
ap f p = transport (ฮป - โ f (lhs p) ๏ผ f -) p refl
transportโปยน : {X : ๐ค ฬ } (A : X โ ๐ฅ ฬ ) {x y : X} โ x ๏ผ y โ A y โ A x
transportโปยน B p = transport B (p โปยน)
_โผ_ : {X : ๐ค ฬ } {A : X โ ๐ฅ ฬ } โ ((x : X) โ A x) โ ((x : X) โ A x) โ ๐ค โ ๐ฅ ฬ
f โผ g = โ x โ f x ๏ผ g x
\end{code}
Notations to make some proofs more readable:
\begin{code}
by-definition : {X : ๐ค ฬ } {x : X} โ x ๏ผ x
by-definition = refl
by-construction : {X : ๐ค ฬ } {x : X} โ x ๏ผ x
by-construction = refl
by-assumption : {X : ๐ค ฬ } {x : X} โ x ๏ผ x
by-assumption = refl
\end{code}
Standard syntax for equality chain reasoning:
\begin{code}
_๏ผโจ_โฉ_ : {X : ๐ค ฬ } (x : X) {y z : X} โ x ๏ผ y โ y ๏ผ z โ x ๏ผ z
_ ๏ผโจ p โฉ q = p โ q
_โ : {X : ๐ค ฬ } (x : X) โ x ๏ผ x
_โ _ = refl
\end{code}
Fixities:
\begin{code}
infix 3 _โปยน
infix 1 _โ
infixr 0 _๏ผโจ_โฉ_
infixl 2 _โ_
infix 4 _โผ_
\end{code}