Path-split type families
Content created by Fredrik Bakke.
Created on 2025-01-07.
Last modified on 2025-01-07.
module foundation.path-split-type-families where
Imports
open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.embeddings open import foundation.transport-along-identifications open import foundation.universe-levels open import foundation-core.contractible-types open import foundation-core.dependent-identifications open import foundation-core.equality-dependent-pair-types open import foundation-core.identity-types open import foundation-core.injective-maps open import foundation-core.propositions open import foundation-core.sections open import foundation-core.subtypes
Idea
We say a type family P : A → 𝒰
is
path-split¶
if, for every identification p : x = y
in A
, and every pair of elements u : P x
and v : P y
, there is a
dependent identification of u
and v
over p. This condition is
equivalent to asking that P
is a family
of propositions.
This condition is a direct rephrasing of stating that the
action on identifications
of the first projection map Σ A P → A
has a
section, and in this way is closely related to
the concept of path-split maps.
Definitions
Path-split type families
is-path-split-family : {l1 l2 : Level} {A : UU l1} → (A → UU l2) → UU (l1 ⊔ l2) is-path-split-family {A = A} P = {x y : A} (p : x = y) (s : P x) (t : P y) → dependent-identification P p s t
Properties
The first projection map of a path-split type family is an embedding
module _ {l1 l2 : Level} {A : UU l1} {P : A → UU l2} (H : is-path-split-family P) where is-injective-pr1-is-path-split-family : is-injective (pr1 {B = P}) is-injective-pr1-is-path-split-family {x} {y} p = eq-pair-Σ p (H p (pr2 x) (pr2 y)) is-section-is-injective-pr1-is-path-split-family : {x y : Σ A P} → is-section (ap pr1) (is-injective-pr1-is-path-split-family {x} {y}) is-section-is-injective-pr1-is-path-split-family {x , u} {.x , v} refl = ap-pr1-eq-pair-eq-fiber (H refl u v) section-ap-pr1-is-path-split-family : (x y : Σ A P) → section (ap pr1 {x} {y}) section-ap-pr1-is-path-split-family x y = is-injective-pr1-is-path-split-family , is-section-is-injective-pr1-is-path-split-family is-emb-pr1-is-path-split-family : is-emb (pr1 {B = P}) is-emb-pr1-is-path-split-family = is-emb-section-ap pr1 section-ap-pr1-is-path-split-family
The fibers of a path-split type family are propositions
We give two proofs, one is direct and the other uses the previous result.
module _ {l1 l2 : Level} {A : UU l1} {P : A → UU l2} (H : is-path-split-family P) where all-elements-equal-is-path-split-family : {x : A} (u v : P x) → u = v all-elements-equal-is-path-split-family u v = H refl u v is-subtype-is-path-split-family : is-subtype P is-subtype-is-path-split-family x = is-prop-all-elements-equal all-elements-equal-is-path-split-family is-subtype-is-path-split-family' : is-subtype P is-subtype-is-path-split-family' = is-subtype-is-emb-pr1 (is-emb-pr1-is-path-split-family H)
Path-splittings of type families are unique
module _ {l1 l2 : Level} {A : UU l1} {P : A → UU l2} where abstract is-proof-irrelevant-is-path-split-family : is-proof-irrelevant (is-path-split-family P) is-proof-irrelevant-is-path-split-family H = is-contr-implicit-Π ( λ x → is-contr-implicit-Π ( λ y → is-contr-Π ( λ p → is-contr-Π ( λ s → is-contr-Π ( is-subtype-is-path-split-family H y (tr P p s)))))) is-prop-is-path-split-family : is-prop (is-path-split-family P) is-prop-is-path-split-family = is-prop-is-proof-irrelevant is-proof-irrelevant-is-path-split-family
Subtypes are path-split
module _ {l1 l2 : Level} {A : UU l1} {P : A → UU l2} where is-path-split-family-is-subtype : is-subtype P → is-path-split-family P is-path-split-family-is-subtype H {x} refl s t = eq-is-prop (H x)
Recent changes
- 2025-01-07. Fredrik Bakke. Logic (#1226).