Martin Escardo, 23rd Feb 2023
Modified from SIP. We assume pre-univalence, instead of univalence,
after a suggestion by Peter Lumsdaine. This means that the canonical
map from the identity type to the equivalence type is an embedding,
rather than an equivalence.
\begin{code}
{-# OPTIONS --safe --without-K #-}
module UF.PreSIP where
open import MLTT.Spartan
open import UF.Embeddings
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.PreUnivalence
open import UF.Subsingletons
module presip where
โจ_โฉ : {S : ๐ค ฬ โ ๐ฅ ฬ } โ ฮฃ S โ ๐ค ฬ
โจ X , s โฉ = X
structure : {S : ๐ค ฬ โ ๐ฅ ฬ } (A : ฮฃ S) โ S โจ A โฉ
structure (X , s) = s
canonical-map : {S : ๐ค ฬ โ ๐ฅ ฬ }
(ฮน : (A B : ฮฃ S) โ โจ A โฉ โ โจ B โฉ โ ๐ฆ ฬ )
(ฯ : (A : ฮฃ S) โ ฮน A A (โ-refl โจ A โฉ))
{X : ๐ค ฬ }
(s t : S X)
โ s ๏ผ t โ ฮน (X , s) (X , t) (โ-refl X)
canonical-map ฮน ฯ {X} s s (refl {s}) = ฯ (X , s)
SNS : (๐ค ฬ โ ๐ฅ ฬ ) โ (๐ฆ : Universe) โ ๐ค โบ โ ๐ฅ โ (๐ฆ โบ) ฬ
SNS {๐ค} {๐ฅ} S ๐ฆ = ฮฃ ฮน ๊ ((A B : ฮฃ S) โ (โจ A โฉ โ โจ B โฉ โ ๐ฆ ฬ ))
, ฮฃ ฯ ๊ ((A : ฮฃ S) โ ฮน A A (โ-refl โจ A โฉ))
, ({X : ๐ค ฬ } (s t : S X) โ is-embedding (canonical-map ฮน ฯ s t))
homomorphic : {S : ๐ค ฬ โ ๐ฅ ฬ } โ SNS S ๐ฆ
โ (A B : ฮฃ S) โ โจ A โฉ โ โจ B โฉ โ ๐ฆ ฬ
homomorphic (ฮน , ฯ , ฮธ) = ฮน
_โ[_]_ : {S : ๐ค ฬ โ ๐ฅ ฬ } โ ฮฃ S โ SNS S ๐ฆ โ ฮฃ S โ ๐ค โ ๐ฆ ฬ
A โ[ ฯ ] B = ฮฃ f ๊ (โจ A โฉ โ โจ B โฉ)
, ฮฃ i ๊ is-equiv f
, homomorphic ฯ A B (f , i)
IdโhomEq : {S : ๐ค ฬ โ ๐ฅ ฬ } (ฯ : SNS S ๐ฆ)
โ (A B : ฮฃ S) โ (A ๏ผ B) โ (A โ[ ฯ ] B)
IdโhomEq (_ , ฯ , _) A A (refl {A}) = id , id-is-equiv โจ A โฉ , ฯ A
homomorphism-lemma : {S : ๐ค ฬ โ ๐ฅ ฬ } (ฯ : SNS S ๐ฆ)
(A B : ฮฃ S) (p : โจ A โฉ ๏ผ โจ B โฉ)
โ
(transport S p (structure A) ๏ผ structure B)
โช homomorphic ฯ A B (idtoeq โจ A โฉ โจ B โฉ p)
homomorphism-lemma (ฮน , ฯ , ฮธ) (X , s) (X , t) (refl {X}) = ฮณ
where
ฮณ : (s ๏ผ t) โช ฮน (X , s) (X , t) (โ-refl X)
ฮณ = (canonical-map ฮน ฯ s t ,
ฮธ s t)
๏ผ-embedding : is-preunivalent ๐ค
โ {S : ๐ค ฬ โ ๐ฅ ฬ } (ฯ : SNS S ๐ฆ)
(A B : ฮฃ S)
โ (A ๏ผ B) โช (A โ[ ฯ ] B)
๏ผ-embedding pua {S} ฯ A B =
(A ๏ผ B) โชโจ i โฉ
(ฮฃ p ๊ โจ A โฉ ๏ผ โจ B โฉ , transport S p (structure A) ๏ผ structure B) โชโจ ii โฉ
(ฮฃ p ๊ โจ A โฉ ๏ผ โจ B โฉ , ฮน A B (idtoeq โจ A โฉ โจ B โฉ p)) โชโจ iii โฉ
(ฮฃ e ๊ โจ A โฉ โ โจ B โฉ , ฮน A B e) โชโจ iv โฉ
(A โ[ ฯ ] B) โก
where
open import UF.PairFun
ฮน = homomorphic ฯ
i = โ-gives-โช ฮฃ-๏ผ-โ
ii = Natฮฃ-embedding (homomorphism-lemma ฯ A B)
iii = ฮฃ-change-of-variable-embedding
(ฮน A B) (idtoeq โจ A โฉ โจ B โฉ) (pua โจ A โฉ โจ B โฉ)
iv = โ-gives-โช ฮฃ-assoc
module presip-with-axioms where
open presip
[_] : {S : ๐ค ฬ โ ๐ฅ ฬ } {axioms : (X : ๐ค ฬ ) โ S X โ ๐ฆ ฬ }
โ (ฮฃ X ๊ ๐ค ฬ , ฮฃ s ๊ S X , axioms X s) โ ฮฃ S
[ X , s , _ ] = (X , s)
โช_โซ : {S : ๐ค ฬ โ ๐ฅ ฬ } {axioms : (X : ๐ค ฬ ) โ S X โ ๐ฆ ฬ }
โ (ฮฃ X ๊ ๐ค ฬ , ฮฃ s ๊ S X , axioms X s) โ ๐ค ฬ
โช X , _ , _ โซ = X
add-axioms : {S : ๐ค ฬ โ ๐ฅ ฬ }
(axioms : (X : ๐ค ฬ ) โ S X โ ๐ฆ ฬ )
โ ((X : ๐ค ฬ ) (s : S X) โ is-prop (axioms X s))
โ SNS S ๐ฃ
โ SNS (ฮป X โ ฮฃ s ๊ S X , axioms X s) ๐ฃ
add-axioms {๐ค} {๐ฅ} {๐ฆ} {๐ฃ} {S} axioms i (ฮน , ฯ , ฮธ) = ฮน' , ฯ' , ฮธ'
where
S' : ๐ค ฬ โ ๐ฅ โ ๐ฆ ฬ
S' X = ฮฃ s ๊ S X , axioms X s
ฮน' : (A B : ฮฃ S') โ โจ A โฉ โ โจ B โฉ โ ๐ฃ ฬ
ฮน' A B = ฮน [ A ] [ B ]
ฯ' : (A : ฮฃ S') โ ฮน' A A (โ-refl โจ A โฉ)
ฯ' A = ฯ [ A ]
ฮธ' : {X : ๐ค ฬ } (s' t' : S' X) โ is-embedding (canonical-map ฮน' ฯ' s' t')
ฮธ' {X} (s , a) (t , b) = ฮณ
where
ฯ : S' X โ S X
ฯ (s , _) = s
j : is-embedding ฯ
j = prโ-is-embedding (i X)
k : {s' t' : S' X} โ is-embedding (ap ฯ {s'} {t'})
k {s'} {t'} = equivs-are-embeddings (ap ฯ)
(embedding-gives-embedding' ฯ j s' t')
l : canonical-map ฮน' ฯ' (s , a) (t , b)
โผ canonical-map ฮน ฯ s t โ ap ฯ {s , a} {t , b}
l (refl {s , a}) = ๐ป๐ฎ๐ป๐ต (ฯ (X , s))
e : is-embedding (canonical-map ฮน ฯ s t โ ap ฯ {s , a} {t , b})
e = โ-is-embedding k (ฮธ s t)
ฮณ : is-embedding (canonical-map ฮน' ฯ' (s , a) (t , b))
ฮณ = embedding-closed-under-โผ _ _ e l
๏ผ-embedding-with-axioms : is-preunivalent ๐ค
โ {S : ๐ค ฬ โ ๐ฅ ฬ }
(ฯ : SNS S ๐ฃ)
(axioms : (X : ๐ค ฬ ) โ S X โ ๐ฆ ฬ )
โ ((X : ๐ค ฬ ) (s : S X) โ is-prop (axioms X s))
โ (A B : ฮฃ X ๊ ๐ค ฬ , ฮฃ s ๊ S X , axioms X s)
โ (A ๏ผ B) โช ([ A ] โ[ ฯ ] [ B ])
๏ผ-embedding-with-axioms ua ฯ axioms i = ๏ผ-embedding ua (add-axioms axioms i ฯ)
\end{code}