\begin{code}
{-# OPTIONS --without-K #-}
module CwF.Sheaf.Preliminaries where
open import Agda.Primitive using (Level ; lzero ; lsuc ; _⊔_)
open import Preliminaries.SetsAndFunctions hiding (_+_)
\end{code}
\begin{code}
Σ! : {i j : Level}{X : Set i} → (X → Set j) → Set(i ⊔ j)
Σ! {i} {j} {X} P = Σ \(x₀ : X) → (P x₀ × (∀ x → P x → x₀ ≡ x))
IdP : {i j : Level} {A : Set i} {a₀ a₁ : A}
→ (B : A → Set j) → a₀ ≡ a₁ → B a₀ → B a₁ → Set j
IdP B p b₀ b₁ = transport B p b₀ ≡ b₁
syntax IdP B p x y = x ≈[ B , p ]≈ y
apd : {i j : Level} {X : Set i} {Y : X → Set j} {x₀ x₁ : X}
→ (f : (x : X) → Y x) → (p : x₀ ≡ x₁) → transport Y p (f x₀) ≡ f x₁
apd f refl = refl
transport-· : {i j : Level} {A : Set i} (B : A → Set j) {x y z : A} →
(p : x ≡ y) (q : y ≡ z) {b : B x}
→ transport B q (transport B p b) ≡ transport B (p · q) b
transport-· B refl refl = refl
transport-p⁻¹·p : {i j : Level} {A : Set i} (B : A → Set j) {x y : A} →
(p : x ≡ y) (b : B y)
→ transport B p (transport B (p ⁻¹) b) ≡ b
transport-p⁻¹·p B refl b = refl
transport-∘ : {i j k : Level} {Γ : Set i} {Δ : Set j} {δ₀ δ₁ : Δ} →
(A : Γ → Set k) (σ : Δ → Γ) (p : δ₀ ≡ δ₁) {a : A(σ δ₀)}
→ transport (A ∘ σ) p a ≡ transport A (ap σ p) a
transport-∘ A σ refl = refl
transport-ap : {i j : Level} {Γ : Set i} {γ₀ γ₁ : Γ} →
(A : Γ → Set j) {a : A γ₀} (p : γ₀ ≡ γ₁) →
{f : Γ → Γ} (F : {γ : Γ} → A γ → A(f γ))
→ F (transport A p a) ≡ transport A (ap f p) (F a)
transport-ap A refl F = refl
\end{code}