2016-09-17 00:23:05 +00:00
|
|
|
|
-- definitions, theorems and attributes which should be moved to files in the HoTT library
|
|
|
|
|
|
2016-11-14 19:44:29 +00:00
|
|
|
|
import homotopy.sphere2 homotopy.cofiber homotopy.wedge
|
2016-09-17 00:23:05 +00:00
|
|
|
|
|
|
|
|
|
open eq nat int susp pointed pmap sigma is_equiv equiv fiber algebra trunc trunc_index pi group
|
2016-10-12 21:14:34 +00:00
|
|
|
|
is_trunc function sphere
|
2016-09-17 00:23:05 +00:00
|
|
|
|
|
|
|
|
|
namespace group
|
|
|
|
|
open is_trunc
|
2016-09-28 14:33:21 +00:00
|
|
|
|
|
2016-11-03 19:34:06 +00:00
|
|
|
|
-- some extra instances for type class inference
|
2016-11-24 04:54:57 +00:00
|
|
|
|
-- definition is_homomorphism_comm_homomorphism [instance] {G G' : AbGroup} (φ : G →g G')
|
|
|
|
|
-- : @is_homomorphism G G' (@ab_group.to_group _ (AbGroup.struct G))
|
|
|
|
|
-- (@ab_group.to_group _ (AbGroup.struct G')) φ :=
|
|
|
|
|
-- homomorphism.struct φ
|
2016-09-17 00:23:05 +00:00
|
|
|
|
|
2016-11-24 04:54:57 +00:00
|
|
|
|
-- definition is_homomorphism_comm_homomorphism1 [instance] {G G' : AbGroup} (φ : G →g G')
|
|
|
|
|
-- : @is_homomorphism G G' _
|
|
|
|
|
-- (@ab_group.to_group _ (AbGroup.struct G')) φ :=
|
|
|
|
|
-- homomorphism.struct φ
|
2016-09-17 00:23:05 +00:00
|
|
|
|
|
2016-11-24 04:54:57 +00:00
|
|
|
|
-- definition is_homomorphism_comm_homomorphism2 [instance] {G G' : AbGroup} (φ : G →g G')
|
|
|
|
|
-- : @is_homomorphism G G' (@ab_group.to_group _ (AbGroup.struct G)) _ φ :=
|
|
|
|
|
-- homomorphism.struct φ
|
2016-11-17 21:21:40 +00:00
|
|
|
|
|
2016-09-17 00:23:05 +00:00
|
|
|
|
end group open group
|
|
|
|
|
|
2016-11-17 21:21:40 +00:00
|
|
|
|
|
2016-09-17 00:23:05 +00:00
|
|
|
|
namespace pi -- move to types.arrow
|
|
|
|
|
|
|
|
|
|
definition pmap_eq_idp {X Y : Type*} (f : X →* Y) :
|
|
|
|
|
pmap_eq (λx, idpath (f x)) !idp_con⁻¹ = idpath f :=
|
|
|
|
|
begin
|
|
|
|
|
cases f with f p, esimp [pmap_eq],
|
|
|
|
|
refine apd011 (apd011 pmap.mk) !eq_of_homotopy_idp _,
|
2016-11-14 19:44:29 +00:00
|
|
|
|
induction Y with Y y0, esimp at *, induction p, esimp, exact sorry
|
2016-09-17 00:23:05 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition pfunext [constructor] (X Y : Type*) : ppmap X (Ω Y) ≃* Ω (ppmap X Y) :=
|
|
|
|
|
begin
|
|
|
|
|
fapply pequiv_of_equiv,
|
|
|
|
|
{ fapply equiv.MK: esimp,
|
|
|
|
|
{ intro f, fapply pmap_eq,
|
|
|
|
|
{ intro x, exact f x },
|
|
|
|
|
{ exact (respect_pt f)⁻¹ }},
|
|
|
|
|
{ intro p, fapply pmap.mk,
|
|
|
|
|
{ intro x, exact ap010 pmap.to_fun p x },
|
|
|
|
|
{ note z := apd respect_pt p,
|
|
|
|
|
note z2 := square_of_pathover z,
|
|
|
|
|
refine eq_of_hdeg_square z2 ⬝ !ap_constant }},
|
|
|
|
|
{ intro p, exact sorry },
|
|
|
|
|
{ intro p, exact sorry }},
|
|
|
|
|
{ apply pmap_eq_idp}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end pi open pi
|
|
|
|
|
|
|
|
|
|
namespace eq
|
|
|
|
|
|
2016-11-24 04:54:57 +00:00
|
|
|
|
-- definition natural_square_tr_eq {A B : Type} {a a' : A} {f g : A → B}
|
|
|
|
|
-- (p : f ~ g) (q : a = a') : natural_square p q = square_of_pathover (apd p q) :=
|
|
|
|
|
-- idp
|
2016-10-07 20:00:09 +00:00
|
|
|
|
|
2016-09-17 00:23:05 +00:00
|
|
|
|
end eq open eq
|
|
|
|
|
|
|
|
|
|
namespace pointed
|
|
|
|
|
|
2016-11-24 04:54:57 +00:00
|
|
|
|
-- /- the pointed type of (unpointed) dependent maps -/
|
|
|
|
|
-- definition pupi [constructor] {A : Type} (P : A → Type*) : Type* :=
|
|
|
|
|
-- pointed.mk' (Πa, P a)
|
2016-11-17 21:21:40 +00:00
|
|
|
|
|
2016-11-24 04:54:57 +00:00
|
|
|
|
-- definition loop_pupi_commute {A : Type} (B : A → Type*) : Ω(pupi B) ≃* pupi (λa, Ω (B a)) :=
|
|
|
|
|
-- pequiv_of_equiv eq_equiv_homotopy rfl
|
2016-09-17 00:23:05 +00:00
|
|
|
|
|
2016-11-24 04:54:57 +00:00
|
|
|
|
-- definition equiv_pupi_right {A : Type} {P Q : A → Type*} (g : Πa, P a ≃* Q a)
|
|
|
|
|
-- : pupi P ≃* pupi Q :=
|
|
|
|
|
-- pequiv_of_equiv (pi_equiv_pi_right g)
|
|
|
|
|
-- begin esimp, apply eq_of_homotopy, intros a, esimp, exact (respect_pt (g a)) end
|
2016-10-12 21:14:34 +00:00
|
|
|
|
|
|
|
|
|
end pointed open pointed
|
2016-09-17 23:11:04 +00:00
|
|
|
|
|
|
|
|
|
namespace fiber
|
|
|
|
|
|
2016-09-17 00:23:05 +00:00
|
|
|
|
|
2016-10-13 00:07:18 +00:00
|
|
|
|
definition ap1_ppoint_phomotopy {A B : Type*} (f : A →* B)
|
|
|
|
|
: Ω→ (ppoint f) ∘* pfiber_loop_space f ~* ppoint (Ω→ f) :=
|
|
|
|
|
begin
|
|
|
|
|
exact sorry
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition pfiber_equiv_of_square_ppoint {A B C D : Type*} {f : A →* B} {g : C →* D}
|
|
|
|
|
(h : A ≃* C) (k : B ≃* D) (s : k ∘* f ~* g ∘* h)
|
|
|
|
|
: ppoint g ∘* pfiber_equiv_of_square h k s ~* h ∘* ppoint f :=
|
|
|
|
|
sorry
|
|
|
|
|
|
2016-09-17 23:11:04 +00:00
|
|
|
|
end fiber
|
2016-09-17 00:23:05 +00:00
|
|
|
|
|
2016-10-07 20:00:09 +00:00
|
|
|
|
namespace circle
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/-
|
|
|
|
|
Suppose for `f, g : A -> B` I prove a homotopy `H : f ~ g` by induction on the element in `A`.
|
|
|
|
|
And suppose `p : a = a'` is a path constructor in `A`.
|
|
|
|
|
Then `natural_square_tr H p` has type `square (H a) (H a') (ap f p) (ap g p)` and is equal
|
|
|
|
|
to the square which defined H on the path constructor
|
|
|
|
|
-/
|
|
|
|
|
|
2016-11-24 04:54:57 +00:00
|
|
|
|
definition natural_square_elim_loop {A : Type} {f g : S¹ → A} (p : f base = g base)
|
2016-10-07 20:00:09 +00:00
|
|
|
|
(q : square p p (ap f loop) (ap g loop))
|
2016-11-24 04:54:57 +00:00
|
|
|
|
: natural_square (circle.rec p (eq_pathover q)) loop = q :=
|
2016-10-07 20:00:09 +00:00
|
|
|
|
begin
|
2016-11-24 04:54:57 +00:00
|
|
|
|
-- refine !natural_square_eq ⬝ _,
|
2016-10-07 20:00:09 +00:00
|
|
|
|
refine ap square_of_pathover !rec_loop ⬝ _,
|
|
|
|
|
exact to_right_inv !eq_pathover_equiv_square q
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end circle
|
2016-10-12 21:14:34 +00:00
|
|
|
|
|
|
|
|
|
namespace sphere
|
|
|
|
|
|
|
|
|
|
-- definition constant_sphere_map_sphere {n m : ℕ} (H : n < m) (f : S* n →* S* m) :
|
|
|
|
|
-- f ~* pconst (S* n) (S* m) :=
|
|
|
|
|
-- begin
|
|
|
|
|
-- assert H : is_contr (Ω[n] (S* m)),
|
|
|
|
|
-- { apply homotopy_group_sphere_le, },
|
|
|
|
|
-- apply phomotopy_of_eq,
|
|
|
|
|
-- apply eq_of_fn_eq_fn !psphere_pmap_pequiv,
|
|
|
|
|
-- apply @is_prop.elim
|
|
|
|
|
-- end
|
|
|
|
|
|
|
|
|
|
end sphere
|
2016-12-08 19:16:40 +00:00
|
|
|
|
|
|
|
|
|
definition image_pathover {A B : Type} (f : A → B) {x y : B} (p : x = y) (u : image f x) (v : image f y) : u =[p] v :=
|
|
|
|
|
begin
|
|
|
|
|
apply is_prop.elimo
|
|
|
|
|
end
|
2016-12-08 21:20:14 +00:00
|
|
|
|
|
|
|
|
|
section injective_surjective
|
|
|
|
|
open trunc fiber image
|
|
|
|
|
|
|
|
|
|
variables {A B C : Type} [is_set A] [is_set B] [is_set C] (f : A → B) (g : B → C) (h : A → C) (H : g ∘ f ~ h)
|
|
|
|
|
include H
|
|
|
|
|
|
|
|
|
|
definition is_embedding_factor : is_embedding h → is_embedding f :=
|
|
|
|
|
begin
|
|
|
|
|
induction H using homotopy.rec_on_idp,
|
|
|
|
|
intro E,
|
|
|
|
|
fapply is_embedding_of_is_injective,
|
|
|
|
|
intro x y p,
|
|
|
|
|
fapply @is_injective_of_is_embedding _ _ _ E _ _ (ap g p)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
definition is_surjective_factor : is_surjective h → is_surjective g :=
|
|
|
|
|
begin
|
|
|
|
|
induction H using homotopy.rec_on_idp,
|
|
|
|
|
intro S,
|
|
|
|
|
intro c,
|
|
|
|
|
note p := S c,
|
|
|
|
|
induction p,
|
|
|
|
|
apply tr,
|
|
|
|
|
fapply fiber.mk,
|
|
|
|
|
exact f a,
|
|
|
|
|
exact p
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end injective_surjective
|