c814534104
with prelim.s
167 lines
5.1 KiB
Text
167 lines
5.1 KiB
Text
-- definitions, theorems and attributes which should be moved to files in the HoTT library
|
||
|
||
import homotopy.sphere2 homotopy.cofiber homotopy.wedge
|
||
|
||
open eq nat int susp pointed pmap sigma is_equiv equiv fiber algebra trunc trunc_index pi group
|
||
is_trunc function sphere
|
||
|
||
namespace group
|
||
open is_trunc
|
||
|
||
-- some extra instances for type class inference
|
||
-- 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 φ
|
||
|
||
-- 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 φ
|
||
|
||
-- 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 φ
|
||
|
||
end group open group
|
||
|
||
|
||
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 _,
|
||
induction Y with Y y0, esimp at *, induction p, esimp, exact sorry
|
||
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
|
||
|
||
-- 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
|
||
|
||
end eq open eq
|
||
|
||
namespace pointed
|
||
|
||
-- /- the pointed type of (unpointed) dependent maps -/
|
||
-- definition pupi [constructor] {A : Type} (P : A → Type*) : Type* :=
|
||
-- pointed.mk' (Πa, P a)
|
||
|
||
-- definition loop_pupi_commute {A : Type} (B : A → Type*) : Ω(pupi B) ≃* pupi (λa, Ω (B a)) :=
|
||
-- pequiv_of_equiv eq_equiv_homotopy rfl
|
||
|
||
-- 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
|
||
|
||
end pointed open pointed
|
||
|
||
namespace fiber
|
||
|
||
|
||
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
|
||
|
||
end fiber
|
||
|
||
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
|
||
-/
|
||
|
||
definition natural_square_elim_loop {A : Type} {f g : S¹ → A} (p : f base = g base)
|
||
(q : square p p (ap f loop) (ap g loop))
|
||
: natural_square (circle.rec p (eq_pathover q)) loop = q :=
|
||
begin
|
||
-- refine !natural_square_eq ⬝ _,
|
||
refine ap square_of_pathover !rec_loop ⬝ _,
|
||
exact to_right_inv !eq_pathover_equiv_square q
|
||
end
|
||
|
||
|
||
end circle
|
||
|
||
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
|
||
|
||
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
|
||
|
||
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
|