feat(hott): start with proof to characterize (is_trunc n A) using iterated loop spaces

This commit is contained in:
Floris van Doorn 2015-06-04 01:12:05 -04:00
parent 4117455e97
commit 883b4fedb9
4 changed files with 32 additions and 4 deletions

View file

@ -10,7 +10,7 @@ Type quotients (quotient without truncation)
The hit type_quotient is primitive, declared in init.hit. The hit type_quotient is primitive, declared in init.hit.
The constructors are The constructors are
class_of : A → A / R (A implicit, R explicit) class_of : A → A / R (A implicit, R explicit)
eq_of_rel : Π{a a' : A}, R a a' → a = a' (R explicit) eq_of_rel : Π{a a' : A}, R a a' → class_of a = class_of a' (R explicit)
-/ -/
open eq equiv sigma.ops open eq equiv sigma.ops

View file

@ -153,7 +153,7 @@ namespace eq
{b : B' (f a)} {b₂ : B' (f a₂)} (q : b =[p] b₂) : b =[ap f p] b₂ := {b : B' (f a)} {b₂ : B' (f a₂)} (q : b =[p] b₂) : b =[ap f p] b₂ :=
by cases q; exact idpo by cases q; exact idpo
definition of_pathover_ap (B' : A' → Type) (f : A → A') {p : a = a₂} definition pathover_of_pathover_ap (B' : A' → Type) (f : A → A') {p : a = a₂}
{b : B' (f a)} {b₂ : B' (f a₂)} (q : b =[ap f p] b₂) : b =[p] b₂ := {b : B' (f a)} {b₂ : B' (f a₂)} (q : b =[ap f p] b₂) : b =[p] b₂ :=
by cases p; apply (idp_rec_on q); apply idpo by cases p; apply (idp_rec_on q); apply idpo
@ -162,7 +162,7 @@ namespace eq
begin begin
fapply equiv.MK, fapply equiv.MK,
{ apply pathover_ap}, { apply pathover_ap},
{ apply of_pathover_ap}, { apply pathover_of_pathover_ap},
{ intro q, cases p, esimp, apply (idp_rec_on q), apply idp}, { intro q, cases p, esimp, apply (idp_rec_on q), apply idp},
{ intro q, cases q, exact idp}, { intro q, cases q, exact idp},
end end

View file

@ -53,6 +53,11 @@ namespace is_trunc
definition trunc_index.of_nat [coercion] [reducible] (n : nat) : trunc_index := definition trunc_index.of_nat [coercion] [reducible] (n : nat) : trunc_index :=
nat.rec_on n (-1.+1) (λ n k, k.+1) nat.rec_on n (-1.+1) (λ n k, k.+1)
definition sub_two [reducible] (n : nat) : trunc_index :=
nat.rec_on n -2 (λ n k, k.+1)
postfix `.-2`:(max+1) := sub_two
/- truncated types -/ /- truncated types -/
/- /-

View file

@ -10,7 +10,8 @@ Properties of is_trunc and trunctype
import types.pi types.eq types.equiv .function import types.pi types.eq types.equiv .function
open eq sigma sigma.ops pi function equiv is_trunc.trunctype is_equiv prod is_trunc.trunc_index open eq sigma sigma.ops pi function equiv is_trunc.trunctype
is_equiv prod is_trunc.trunc_index pointed nat
namespace is_trunc namespace is_trunc
variables {A B : Type} {n : trunc_index} variables {A B : Type} {n : trunc_index}
@ -138,6 +139,28 @@ namespace is_trunc
(K : Π(a : A), is_trunc n (a = a)) : is_trunc (n.+1) A := (K : Π(a : A), is_trunc n (a = a)) : is_trunc (n.+1) A :=
@is_trunc_succ_intro _ _ (λa b, is_trunc_of_imp_is_trunc_of_leq H (λp, eq.rec_on p !K)) @is_trunc_succ_intro _ _ (λa b, is_trunc_of_imp_is_trunc_of_leq H (λp, eq.rec_on p !K))
definition is_trunc_succ_of_is_trunc_loop (Hn : -1 ≤ n) (Hp : Π(a : A), is_trunc n (a = a))
: is_trunc (n.+1) A :=
begin
apply is_trunc_succ_intro, intros a a',
apply is_trunc_of_imp_is_trunc_of_leq Hn, intro p,
cases p, apply Hp
end
definition is_trunc_succ_iff_is_trunc_loop (A : Type) (Hn : -1 ≤ n) :
(Π(a : A), is_trunc n (a = a)) ↔ is_trunc (n.+1) A :=
iff.intro (is_trunc_succ_of_is_trunc_loop Hn) _
definition is_trunc_iff_is_contr_loop' {n : }
: (Π(a : A), is_contr (Ω[ n ](Pointed.mk a))) ↔ is_trunc (n.-2.+1) A :=
begin
induction n with n H,
{ esimp [sub_two,Pointed.Iterated_loop_space], apply iff.intro,
intro H, apply is_hprop_of_imp_is_contr, exact H,
intro H a, exact is_contr_of_inhabited_hprop a},
{ exact sorry},
end
end is_trunc open is_trunc end is_trunc open is_trunc
namespace trunc namespace trunc