Chuangjie Xu 2014 (ported to TypeTopology in 2026)
This file defines a category-with-families structure on C-spaces. A
type over a context is given by a family together with a notion of
admissible dependent probes satisfying the expected closure axioms. A
term is a section whose composites with probes are admissible. From
these data we define substitution, context comprehension, and verify
the basic CwF equalities needed in the concrete model.
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
open import UF.FunExt using (Fun-Ext; dfunext)
module C-Spaces.UsingFunExt.CwF (fe : Fun-Ext) where
open import UF.Base
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import C-Spaces.CwFs.Base
open import C-Spaces.Preliminaries.Sequence
open import C-Spaces.Coverage
open import C-Spaces.UsingFunExt.Space
open import C-Spaces.UsingFunExt.CartesianClosedness (dfunext fe)
\end{code}
Contexts are C-spaces, and substitutions are continuous maps.
\begin{code}
Con : π€β Μ
Con = Space
Sub : Con β Con β π€β Μ
Sub = Map
\end{code}
A dependent version of the probe axioms.
For a family `A` over a space `Ξ`, the predicate `Q` specifies which
dependent probes are admissible. The four clauses say that admissible
dependent probes are closed under constants, precomposition by
uniformly continuous maps, gluing from finite approximations, and
change of witness for the underlying probe.
The last clause would be unnecessary if the probe predicate itself were
proposition-valued.
\begin{code}
dependent-probe-axioms : (Ξ : Space) (A : U Ξ β π€β Μ )
β ((p : ββ β U Ξ) β p β Probe Ξ β ((Ξ± : ββ) β A (p Ξ±)) β π€β Μ )
β π€β Μ
dependent-probe-axioms (Ξ , P , cβ , cβ , cβ) A Q
= ((Ξ³ : Ξ) (a : A Ξ³) β (Ξ» Ξ± β a) β Q (Ξ» Ξ± β Ξ³) (cβ Ξ³))
Γ ((t : ββ β ββ) (tC : t β C) (p : ββ β Ξ) (pP : p β P) β
(q : (Ξ± : ββ) β A (p Ξ±)) β q β Q p pP β q β t β Q (p β t) (cβ t tC p pP))
Γ ((p : ββ β Ξ)
(q : (Ξ± : ββ) β A (p Ξ±))
(d : Ξ£ \(n : β) β (s : βFin n) β Ξ£ \(psP : p β cons s β P) β q β cons s β Q (p β cons s) psP) β
q β Q p (cβ p (prβ d , Ξ» s β prβ (prβ d s))))
Γ ((p : ββ β Ξ) (pP pP' : p β P) (q : (Ξ± : ββ) β A (p Ξ±)) β Q p pP q β Q p pP' q)
dependent-probe-axioms-is-prop
: (Ξ : Space) (A : U Ξ β π€β Μ )
β (Q : (p : ββ β U Ξ) β p β Probe Ξ β ((Ξ± : ββ) β A (p Ξ±)) β π€β Μ )
β (β p pΞ q β is-prop (q β Q p pΞ))
β is-prop (dependent-probe-axioms Ξ A Q)
dependent-probe-axioms-is-prop (Ξ , P , cβ , cβ , cβ) A Q pQ
= Γ-is-prop cβ-prop (Γ-is-prop cβ-prop (Γ-is-prop cβ-prop cβ-prop))
where
cβ-prop
: is-prop ((Ξ³ : Ξ) (a : A Ξ³) β (Ξ» Ξ± β a) β Q (Ξ» Ξ± β Ξ³) (cβ Ξ³))
cβ-prop
= Ξ β-is-prop fe (Ξ» Ξ³ a β pQ (Ξ» Ξ± β Ξ³) (cβ Ξ³) (Ξ» Ξ± β a))
cβ-prop
: is-prop ((t : ββ β ββ) (tC : t β C) (p : ββ β Ξ) (pP : p β P) β
(q : (Ξ± : ββ) β A (p Ξ±)) β q β Q p pP β q β t β Q (p β t) (cβ t tC p pP))
cβ-prop
= Ξ β-is-prop fe (Ξ» t tC p pP q qQ β pQ (p β t) (cβ t tC p pP) (q β t))
cβ-prop
: is-prop ((p : ββ β Ξ)
(q : (Ξ± : ββ) β A (p Ξ±))
(d : Ξ£ \(n : β) β (s : βFin n) β Ξ£ \(psP : p β cons s β P) β q β cons s β Q (p β cons s) psP) β
q β Q p (cβ p (prβ d , Ξ» s β prβ (prβ d s))))
cβ-prop
= Ξ β-is-prop fe (Ξ» p q d β pQ p (cβ p (prβ d , Ξ» s β prβ (prβ d s))) q)
cβ-prop
: is-prop ((p : ββ β Ξ) (pP pP' : p β P) (q : (Ξ± : ββ) β A (p Ξ±)) β Q p pP q β Q p pP' q)
cβ-prop
= Ξ β
-is-prop fe (Ξ» p pP pP' q qQ β pQ p pP' q)
\end{code}
Types over a context are families equipped with proposition-valued
dependent probes satisfying the axioms above. Terms are sections whose
composites with probes are admissible.
\begin{code}
Ty : Con β π€β Μ
Ty Ξ = Ξ£ \(A : U Ξ β π€β Μ ) β
Ξ£ \(Q : (p : ββ β U Ξ) β p β Probe Ξ β ((Ξ± : ββ) β A (p Ξ±)) β π€β Μ )
β (β p pΞ q β is-prop (q β Q p pΞ)) Γ
dependent-probe-axioms Ξ A Q
tyProbe : (Ξ : Con) (A : Ty Ξ)
β (p : ββ β U Ξ) β p β Probe Ξ β ((Ξ± : ββ) β U A (p Ξ±)) β π€β Μ
tyProbe _ (_ , Q , _) = Q
tyProbe-is-prop : (Ξ : Con) (A : Ty Ξ)
β β p pΞ q β is-prop (q β tyProbe Ξ A p pΞ)
tyProbe-is-prop _ (_ , _ , pQ , _) = pQ
Tm : (Ξ : Con) β Ty Ξ β π€β Μ
Tm (Ξ , P , _) (A , Q , _)
= Ξ£ \(u : (Ξ³ : Ξ) β A Ξ³) β (p : ββ β Ξ) (pP : p β P) β u β p β Q p pP
\end{code}
Substitution is defined by reindexing both the underlying family and
its dependent probe predicate along a substitution.
\begin{code}
βͺ_,_β«_[_]ΚΈ : (Ξ Ξ : Con) β Ty Ξ β Sub Ξ Ξ β Ty Ξ
βͺ Ξ , Ξ β« (A , Q , pQ , tcβ , tcβ , tcβ , tcβ) [ Ο , cΟ ]ΚΈ
= AΟ , Q' , pQ' , cβ , cβ , cβ , cβ
where
AΟ : U Ξ β π€β Μ
AΟ Ξ΄ = A (Ο Ξ΄)
Q' : (p : ββ β U Ξ) β p β Probe Ξ β ((Ξ± : ββ) β AΟ (p Ξ±)) β π€β Μ
Q' p pΞ q = q β Q (Ο β p) (cΟ p pΞ)
pQ' : β p pΞ q β is-prop (q β Q' p pΞ)
pQ' p pΞ q = pQ (Ο β p) (cΟ p pΞ) q
cβ : (Ξ΄ : U Ξ) (a : AΟ Ξ΄) β (Ξ» Ξ± β a) β Q' (Ξ» Ξ± β Ξ΄) (condβ Ξ Ξ΄)
cβ Ξ΄ a = goal
where
fact : (Ξ» Ξ± β a) β Q (Ξ» Ξ± β Ο Ξ΄) (condβ Ξ (Ο Ξ΄))
fact = tcβ (Ο Ξ΄) a
goal : (Ξ» Ξ± β a) β Q (Ξ» Ξ± β Ο Ξ΄) (cΟ (Ξ» Ξ± β Ξ΄) (condβ Ξ Ξ΄))
goal = tcβ (Ξ» Ξ± β Ο Ξ΄) _ _ (Ξ» Ξ± β a) fact
cβ : (t : ββ β ββ) (tC : t β C) (p : ββ β U Ξ) (pΞ : p β Probe Ξ) β
(q : (Ξ± : ββ) β AΟ (p Ξ±)) β q β Q' p pΞ β q β t β Q' (p β t) (condβ Ξ t tC p pΞ)
cβ t tC p pΞ q qQ' = goal
where
fact : q β t β Q (Ο β p β t) (condβ Ξ t tC (Ο β p) (cΟ p pΞ))
fact = tcβ t tC (Ο β p) (cΟ p pΞ) q qQ'
goal : q β t β Q (Ο β p β t) (cΟ (p β t) (condβ Ξ t tC p pΞ))
goal = tcβ (Ο β p β t) _ _ (q β t) fact
cβ : (p : ββ β U Ξ) (q : (Ξ± : ββ) β AΟ (p Ξ±)) β
(d : Ξ£ \(n : β) β (s : βFin n) β Ξ£ \(psΞ : p β cons s β Probe Ξ)
β q β cons s β Q' (p β cons s) psΞ) β
q β Q' p (condβ Ξ p (prβ d , Ξ» s β prβ (prβ d s)))
cβ p q (n , ΞΎ) = goal
where
ΞΎ' : (s : βFin n)
β Ξ£ \(ΟpsΞ : Ο β p β cons s β Probe Ξ) β q β cons s β Q (Ο β p β cons s) ΟpsΞ
ΞΎ' s = cΟ (p β cons s) (prβ (ΞΎ s)) , prβ (ΞΎ s)
fact : q β Q (Ο β p) (condβ Ξ (Ο β p) (n , Ξ» s β prβ (ΞΎ' s)))
fact = tcβ (Ο β p) q (n , ΞΎ')
goal : q β Q (Ο β p) (cΟ p (condβ Ξ p (n , Ξ» s β prβ (ΞΎ s))))
goal = tcβ (Ο β p) _ _ q fact
cβ : (p : ββ β U Ξ) (pΞ pΞ' : p β Probe Ξ) (q : (Ξ± : ββ) β AΟ (p Ξ±)) β
Q' p pΞ q β Q' p pΞ' q
cβ p _ _ = tcβ (Ο β p) _ _
βͺ_,_,_β«_[_]α΅ : (Ξ Ξ : Con) (A : Ty Ξ)
β Tm Ξ A β (Ο : Sub Ξ Ξ) β Tm Ξ (βͺ Ξ , Ξ β« A [ Ο ]ΚΈ)
βͺ Ξ , Ξ , (A , Q , _) β« (u , cu) [ Ο , cΟ ]α΅ = uΟ , cuΟ
where
uΟ : (Ξ΄ : U Ξ) β A (Ο Ξ΄)
uΟ Ξ΄ = u (Ο Ξ΄)
cuΟ : (p : ββ β U Ξ) (pΞ : p β Probe Ξ) β uΟ β p β Q (Ο β p) (cΟ p pΞ)
cuΟ p pΞ = cu (Ο β p) (cΟ p pΞ)
\end{code}
Context comprehension is given by the sigma-space of a family, equipped
with the evident probe structure.
\begin{code}
_β_ : (Ξ : Con) β Ty Ξ β Con
Ξ β (A , Q , pQ , tcβ , tcβ , tcβ , tcβ) = (Ξ£ A , R , cβ , cβ , cβ)
where
R : (ββ β Ξ£ A) β π€β Μ
R r = Ξ£ \(rΞ : prβ β r β Probe Ξ) β prβ β r β Q (prβ β r) rΞ
cβ : (w : Ξ£ A) β (Ξ» Ξ± β w) β R
cβ (Ξ³ , a) = condβ Ξ Ξ³ , tcβ Ξ³ a
cβ : (t : ββ β ββ) (tC : t β C) (r : ββ β Ξ£ A) (rR : r β R) β r β t β R
cβ t tC r (rΞ , rQ) = condβ Ξ t tC (prβ β r) rΞ ,
tcβ t tC (prβ β r) rΞ (prβ β r) rQ
cβ : (r : ββ β Ξ£ A)
β (Ξ£ \(n : β) β β(s : βFin n) β r β cons s β R) β r β R
cβ r (n , ΞΎ) = condβ Ξ (prβ β r) (n , Ξ» s β prβ (ΞΎ s)) ,
tcβ (prβ β r) (prβ β r) (n , ΞΎ)
βͺ_,_β«p : (Ξ : Con) (A : Ty Ξ) β Sub (Ξ β A) Ξ
βͺ Ξ , A β«p = prβ , (Ξ» p pΞA β prβ pΞA)
βͺ_β«_[p]ΚΈ : (Ξ : Con) β (A : Ty Ξ) β Ty (Ξ β A)
βͺ Ξ β« A [p]ΚΈ = βͺ Ξ , Ξ β A β« A [ βͺ Ξ , A β«p ]ΚΈ
βͺ_,_β«q : (Ξ : Con) (A : Ty Ξ) β Tm (Ξ β A) (βͺ Ξ β« A [p]ΚΈ)
βͺ Ξ , A β«q = prβ , (Ξ» p pΞA β prβ pΞA)
βͺ_,_,_β«β¨_,_β© : (Ξ Ξ : Con) (A : Ty Ξ)
β (Ο : Sub Ξ Ξ) β Tm Ξ (βͺ Ξ , Ξ β« A [ Ο ]ΚΈ)
β Sub Ξ (Ξ β A)
βͺ Ξ , Ξ , A β«β¨ (Ο , cΟ) , (u , cu) β© = (Οu , cΟu)
where
Οu : U Ξ β Ξ£ (U A)
Οu Ξ΄ = (Ο Ξ΄ , u Ξ΄)
cΟu : β(p : ββ β U Ξ) (pΞ : p β Probe Ξ) β Οu β p β Probe (Ξ β A)
cΟu p pΞ = (cΟ p pΞ , cu p pΞ)
\end{code}
We can now assemble these operations into a CwF structure on spaces.
\begin{code}
SpaceCwFStructure : CwFStructure
SpaceCwFStructure = record {
Con = Space
; Sub = Map
; idSub = Ξ» {Ξ} β idMap Ξ
; _β_ = Ξ» {Ξ Ξ Ξ} f g β βͺ Ξ , Ξ , Ξ β« f β g
; Ξ΅ = πSpace
; Ξ΅Sub = Ξ» {Ξ} β continuous-unit Ξ
; Ty = Ty
; _[_] = Ξ» {Ξ Ξ} A Ο β βͺ Ξ , Ξ β« A [ Ο ]ΚΈ
; Tm = Tm
; _β
_β = Ξ» {Ξ Ξ A} t Ο β βͺ Ξ , Ξ , A β« t [ Ο ]α΅
; _β_ = _β_
; β¨_,_β© = Ξ» {Ξ Ξ A} Ο u β βͺ Ξ , Ξ , A β«β¨ Ο , u β©
; p = Ξ» {Ξ A} β βͺ Ξ , A β«p
; q = Ξ» {Ξ A} β βͺ Ξ , A β«q
}
\end{code}
We next verify the basic equalities satisfied by this structure.
For the term equalities below we work with raw equalities, without the
explicit transports that appear in `CwFLaws`. This is enough for the
present concrete development because the family `Tm Ξ A` only depends
definitionally on the family part and the probe predicate part of
`A : Ty Ξ`; it ignores the proof components. For example,
`βͺ Ξ , Ξ , A β« t [ idMap Ξ ]α΅ οΌ t` type checks because reindexing along
`idMap` leaves those data judgmentally unchanged, even though the full
equality `βͺ Ξ , Ξ β« A [ idMap Ξ ]ΚΈ οΌ A` still needs proof irrelevance for
the proof fields.
Accordingly, this file does not yet package the results below into an
element of `CwFLaws SpaceCwFStructure`. The record `CwFLaws` phrases
some laws, such as `tm[id]`, `tm[β]`, `q,-Ξ²`, and `,β-distrib`, with
transports along the corresponding type equalities. To build that
record one would still need bridge lemmas showing that these transports
act trivially on the concrete term family used here.
\begin{code}
idl : {Ξ Ξ : Con} {Ο : Sub Ξ Ξ}
β βͺ Ξ , Ξ , Ξ β« idMap Ξ β Ο οΌ Ο
idl = refl
idr : {Ξ Ξ : Con} {Ο : Sub Ξ Ξ}
β βͺ Ξ , Ξ , Ξ β« Ο β idMap Ξ οΌ Ο
idr = refl
β-assoc : {Ξ Ξ Ξ Ξ : Con} {Ο : Sub Ξ Ξ} {Ο : Sub Ξ Ξ} {Ο : Sub Ξ Ξ}
β βͺ Ξ , Ξ , Ξ β« (βͺ Ξ , Ξ , Ξ β« Ο β Ο) β Ο οΌ
βͺ Ξ , Ξ , Ξ β« Ο β (βͺ Ξ , Ξ , Ξ β« Ο β Ο)
β-assoc = refl
Ξ΅Sub-unique : {Ξ : Con} {Ο : Sub Ξ πSpace}
β Ο οΌ continuous-unit Ξ
Ξ΅Sub-unique = refl
ty[id] : (Ξ : Con) (A : Ty Ξ)
β βͺ Ξ , Ξ β« A [ idMap Ξ ]ΚΈ οΌ A
ty[id] Ξ A =
to-Ξ£-οΌ
(refl ,
to-Ξ£-οΌ
(refl ,
to-Γ-οΌ refl
(dependent-probe-axioms-is-prop Ξ _ _ (tyProbe-is-prop Ξ A) _ _)))
ty[β] : (Ξ Ξ Ξ : Con) (A : Ty Ξ) (Ο : Sub Ξ Ξ) (Ο : Sub Ξ Ξ)
β βͺ Ξ , Ξ β« A [ βͺ Ξ , Ξ , Ξ β« Ο β Ο ]ΚΈ οΌ
βͺ Ξ , Ξ β« βͺ Ξ , Ξ β« A [ Ο ]ΚΈ [ Ο ]ΚΈ
ty[β] Ξ Ξ Ξ A Ο Ο =
to-Ξ£-οΌ
(refl ,
to-Ξ£-οΌ
(refl ,
to-Γ-οΌ refl
(dependent-probe-axioms-is-prop Ξ _ _ (tyProbe-is-prop Ξ AΟΟ) _ _)))
where
AΟΟ : Ty Ξ
AΟΟ = βͺ Ξ , Ξ β« A [ βͺ Ξ , Ξ , Ξ β« Ο β Ο ]ΚΈ
tm[id] : (Ξ : Con) (A : Ty Ξ) (t : Tm Ξ A)
β βͺ Ξ , Ξ , A β« t [ idMap Ξ ]α΅ οΌ t
tm[id] Ξ A t = refl
tm[β] : {Ξ Ξ Ξ : Con} {A : Ty Ξ} {t : Tm Ξ A} {Ο : Sub Ξ Ξ} {Ο : Sub Ξ Ξ}
β βͺ Ξ , Ξ , A β« t [ βͺ Ξ , Ξ , Ξ β« Ο β Ο ]α΅ οΌ
βͺ Ξ , Ξ , βͺ Ξ , Ξ β« A [ Ο ]ΚΈ β« βͺ Ξ , Ξ , A β« t [ Ο ]α΅ [ Ο ]α΅
tm[β] = refl
p,-Ξ² : {Ξ Ξ : Con} {A : Ty Ξ} {Ο : Sub Ξ Ξ} {t : Tm Ξ (βͺ Ξ , Ξ β« A [ Ο ]ΚΈ)}
β βͺ Ξ , Ξ β A , Ξ β« βͺ Ξ , A β«p β βͺ Ξ , Ξ , A β«β¨ Ο , t β© οΌ Ο
p,-Ξ² = refl
q,-Ξ² : {Ξ Ξ : Con} {A : Ty Ξ} {Ο : Sub Ξ Ξ} {t : Tm Ξ (βͺ Ξ , Ξ β« A [ Ο ]ΚΈ)}
β βͺ Ξ β A , Ξ , βͺ Ξ β« A [p]ΚΈ β« βͺ Ξ , A β«q [ βͺ Ξ , Ξ , A β«β¨ Ο , t β© ]α΅ οΌ t
q,-Ξ² = refl
p,q-Ξ· : {Ξ Ξ : Con} {A : Ty Ξ} {Ο : Sub Ξ Ξ} {t : Tm Ξ (βͺ Ξ , Ξ β« A [ Ο ]ΚΈ)}
β βͺ Ξ , Ξ β A , A β«β¨ βͺ Ξ , A β«p , βͺ Ξ , A β«q β© οΌ idMap (Ξ β A)
p,q-Ξ· = refl
,β-distrib : {Ξ Ξ Ξ : Con} {A : Ty Ξ}
β {Ο : Sub Ξ Ξ} {t : Tm Ξ (βͺ Ξ , Ξ β« A [ Ο ]ΚΈ)} {Ο : Sub Ξ Ξ}
β βͺ Ξ , Ξ , Ξ β A β« βͺ Ξ , Ξ , A β«β¨ Ο , t β© β Ο οΌ
βͺ Ξ , Ξ , A β«β¨ βͺ Ξ , Ξ , Ξ β« Ο β Ο , βͺ Ξ , Ξ , βͺ Ξ , Ξ β« A [ Ο ]ΚΈ β« t [ Ο ]α΅ β©
,β-distrib = refl
\end{code}