{-
Axiomatization of cofibrations.
-}
module axiom.cofibration where
open import basic
open import axiom.funext
open import axiom.shape
infixr 4 _∨_
postulate
--↓ We postulate a type of cofibrations and decoding of cofibrations as types.
--↓ The projection fst : Σ Cof [_] → Cof is the classifying map for cofibrations.
--↓ In the motivating semantics in cartesian cubical sets, the type of cofibrations is
--↓ the subobject classifier, or the classifier for levelwise decidable subobjects if
--↓ working constructively.
Cof : Type
[_] : Cof → Type
--↓ We postulate that each cofibration is a proposition of the ambient type theory.
cofIsStrictProp : (φ : Cof) → isStrictProp [ φ ]
--↓ We postulate that the type of equalities between two elements of a shape is coded by
--↓ a cofibration.
_∋_≈_ : (S : Shape) → ⟨ S ⟩ → ⟨ S ⟩ → Cof
[≈] : (S : Shape) (s t : ⟨ S ⟩) → [ S ∋ s ≈ t ] ≡ (s ≡ t)
--↓ We postulate that the empty and unit types are coded by cofibrations.
--↓ These postulates are redundant: we have already assumed an interval shape with two
--↓ distinct elements, so we could define ⊥ to be 𝕚 ∋ 0 ≈ 1 and ⊤ to be 𝕚 ∋ 0 ≈ 0.
--↓ It is however convenient to take them as primitive.
⊥ : Cof
[⊥] : [ ⊥ ] ≡ 𝟘
⊤ : Cof
[⊤] : [ ⊤ ] ≡ 𝟙
--↓ We postulate that the union of two cofibrations is again a cofibration.
--↓ Rather than postulating the existence of the union of arbitrary propositions (e.g.
--↓ via propositional truncation) and asserting a decoding equality for ∨, we axiomatize
--↓ introduction and elimination rules for the decoding of ∨ directly.
_∨_ : Cof → Cof → Cof
∨l : {φ ψ : Cof} → [ φ ] → [ φ ∨ ψ ]
∨r : {φ ψ : Cof} → [ ψ ] → [ φ ∨ ψ ]
∨-elim : ∀ {ℓ} {φ ψ : Cof} {P : [ φ ∨ ψ ] → Type ℓ}
(f : (u : [ φ ]) → P (∨l u))
(g : (v : [ ψ ]) → P (∨r v))
(p : (u : [ φ ]) (v : [ ψ ]) → subst P (cofIsStrictProp (φ ∨ ψ) _ _) (f u) ≡ g v)
(w : [ φ ∨ ψ ]) → P w
∨-elim-βl : ∀ ℓ φ ψ P f g p u → ∨-elim {ℓ} {φ} {ψ} {P} f g p (∨l u) ≡ f u
∨-elim-βr : ∀ ℓ φ ψ P f g p v → ∨-elim {ℓ} {φ} {ψ} {P} f g p (∨r v) ≡ g v
--↓ We postulate that cofibrations are closed under universal quantification over a shape.
all : (S : Shape) → (⟨ S ⟩ → Cof) → Cof
[all] : ∀ S φ → [ all S φ ] ≡ ((s : ⟨ S ⟩) → [ φ s ])
--↓ We postulate that the shape equality and universal quantification cofibrations are
--↓ invariant under shape morphisms in the following sense. These axioms have the effect
--↓ of forcing shape morphisms to be isomorphism-like, and are in particular
--↓ automatically satisfied if all shape morphisms are isomorphisms and Cof is
--↓ extensional (logically equivalent cofibrations are equal), as is the case in the
--↓ motivating semantics.
--↓ We postulate that shape equality is invariant under shape morphisms.
--↓ This can be read as asserting that shape morphisms are monic.
≈Equivariant : {S T : Shape} (σ : Shape[ S , T ]) (r s : ⟨ S ⟩)
→ (T ∋ ⟪ σ ⟫ r ≈ ⟪ σ ⟫ s) ≡ (S ∋ r ≈ s)
--↓ We postulate that universal quantification is invariant under shape morphisms.
--↓ This can be read as asserting that shape morphisms are epic from the perspective of
--↓ cofibrations.
allEquivariant : {S T : Shape} (σ : Shape[ S , T ]) (φ : ⟨ T ⟩ → Cof)
→ all T φ ≡ all S (φ ∘ ⟪ σ ⟫)
--↓ For convenience, we make the equations decoding cofibrations into definitional
--↓ equalities using a REWRITE pragma.
{-# REWRITE [≈] [⊥] [⊤] ∨-elim-βl ∨-elim-βr [all] #-}