\begin{code}
module Preliminaries where
\end{code}
\begin{code}
infixr 10 _∘_
_∘_ : {A B C : Set} → (B → C) → (A → B) → A → C
f ∘ g = λ x → f (g x)
\end{code}
\begin{code}
infixr 1 _,_
record Σ {A : Set} (B : A → Set) : Set where
constructor _,_
field
pr₁ : A
pr₂ : B pr₁
open Σ public
infixr 1 _×_
_×_ : Set → Set → Set
A × B = Σ \(a : A) → B
\end{code}
\begin{code}
infixr 1 _+_
data _+_ (A B : Set) : Set where
inl : A → A + B
inr : B → A + B
case : {A B C : Set} → (A → C) → (B → C) → A + B → C
case f g (inl a) = f a
case f g (inr b) = g b
\end{code}
\begin{code}
data 𝟙 : Set where
⋆ : 𝟙
data 𝟘 : Set where
𝟘-elim : {A : Set} → .𝟘 → A
𝟘-elim ()
¬ : Set → Set
¬ A = A → 𝟘
\end{code}
\begin{code}
infix 2 _≡_ _≢_
data _≡_ {ℓ} {A : Set ℓ} (a : A) : A → Set ℓ where
refl : a ≡ a
_≢_ : {A : Set} → A → A → Set
a ≢ b = ¬ (a ≡ b)
transport : {A : Set} (P : A → Set) {x y : A}
→ x ≡ y → P x → P y
transport P refl p = p
transport² : {A B : Set} (P : A → B → Set) {x y : A} {u v : B}
→ x ≡ y → u ≡ v → P x u → P y v
transport² P refl refl p = p
ap : {A B : Set} (f : A → B) {x y : A} → x ≡ y → f x ≡ f y
ap f refl = refl
ap² : {A B : Set} {f g : A → B} {x y : A} → f ≡ g → x ≡ y → f x ≡ g y
ap² refl refl = refl
ap₂ : {A B C : Set} (f : A → B → C) {x x' : A} {y y' : B}
→ x ≡ x' → y ≡ y' → f x y ≡ f x' y'
ap₂ f refl refl = refl
sym : {A : Set} {x y : A} → x ≡ y → y ≡ x
sym refl = refl
trans : {A : Set} {x y z : A} → x ≡ y → y ≡ z → x ≡ z
trans refl refl = refl
pair⁼ : {A B : Set} {a a' : A} {b b' : B}
→ a ≡ a' → b ≡ b' → (a , b) ≡ (a' , b')
pair⁼ refl refl = refl
\end{code}