Singleton induction
Content created by Egbert Rijke, Fredrik Bakke, Jonathan Prieto-Cubides and Vojtěch Štěpančík.
Created on 2022-01-26.
Last modified on 2024-01-05.
module foundation.singleton-induction where
Imports
open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.universe-levels open import foundation-core.contractible-types open import foundation-core.function-types open import foundation-core.homotopies open import foundation-core.identity-types open import foundation-core.sections open import foundation-core.transport-along-identifications
Idea
Singleton induction on a type A
equipped with a point a : A
is a
principle analogous to the induction principle of the
unit type. A type satisfies singleton induction if
and only if it is contractible.
Singleton induction states that given a type family B
over A
, to construct a
section of B
it suffices to construct an element in B a
.
Definition
Singleton induction
is-singleton : (l1 : Level) {l2 : Level} (A : UU l2) → A → UU (lsuc l1 ⊔ l2) is-singleton l A a = (B : A → UU l) → section (ev-point a {B}) ind-is-singleton : {l1 l2 : Level} {A : UU l1} (a : A) → ({l : Level} → is-singleton l A a) → (B : A → UU l2) → B a → (x : A) → B x ind-is-singleton a is-sing-A B = pr1 (is-sing-A B) compute-ind-is-singleton : {l1 l2 : Level} {A : UU l1} (a : A) (H : {l : Level} → is-singleton l A a) → (B : A → UU l2) → (ev-point a {B} ∘ ind-is-singleton a H B) ~ id compute-ind-is-singleton a H B = pr2 (H B)
Properties
Contractible types satisfy singleton induction
ind-singleton : {l1 l2 : Level} {A : UU l1} (a : A) (is-contr-A : is-contr A) (B : A → UU l2) → B a → (x : A) → B x ind-singleton a is-contr-A B b x = tr B (inv (contraction is-contr-A a) ∙ contraction is-contr-A x) b compute-ind-singleton : {l1 l2 : Level} {A : UU l1} (a : A) (is-contr-A : is-contr A) (B : A → UU l2) → (ev-point a {B} ∘ ind-singleton a is-contr-A B) ~ id compute-ind-singleton a is-contr-A B b = ap (λ p → tr B p b) (left-inv (contraction is-contr-A a))
A type satisfies singleton induction if and only if it is contractible
is-singleton-is-contr : {l1 l2 : Level} {A : UU l1} (a : A) → is-contr A → is-singleton l2 A a pr1 (is-singleton-is-contr a is-contr-A B) = ind-singleton a is-contr-A B pr2 (is-singleton-is-contr a is-contr-A B) = compute-ind-singleton a is-contr-A B abstract is-contr-ind-singleton : {l1 : Level} (A : UU l1) (a : A) → ({l2 : Level} (B : A → UU l2) → B a → (x : A) → B x) → is-contr A pr1 (is-contr-ind-singleton A a S) = a pr2 (is-contr-ind-singleton A a S) = S (λ x → a = x) refl abstract is-contr-is-singleton : {l1 : Level} (A : UU l1) (a : A) → ({l2 : Level} → is-singleton l2 A a) → is-contr A is-contr-is-singleton A a S = is-contr-ind-singleton A a (pr1 ∘ S)
Examples
The total space of an identity type satisfies singleton induction
abstract is-singleton-total-path : {l1 l2 : Level} (A : UU l1) (a : A) → is-singleton l2 (Σ A (λ x → a = x)) (a , refl) pr1 (is-singleton-total-path A a B) = ind-Σ ∘ ind-Id a _ pr2 (is-singleton-total-path A a B) = refl-htpy
See also
- The equivalent principle of subsingleton induction
- Singleton subsets
Recent changes
- 2024-01-05. Vojtěch Štěpančík. Deduplicate singleton-induction (#991).
- 2023-11-24. Egbert Rijke. Abelianization (#877).
- 2023-10-20. Fredrik Bakke and Egbert Rijke. Nonunital precategories (#864).
- 2023-10-20. Fredrik Bakke and Egbert Rijke. Small subcategories (#861).
- 2023-09-11. Fredrik Bakke. Transport along and action on equivalences (#706).