957 lines
40 KiB
Text
957 lines
40 KiB
Text
/-
|
||
Copyright (c) 2015 Floris van Doorn. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
Authors: Floris van Doorn, Egbert Rijke
|
||
-/
|
||
import hit.colimit .sequence cubical.squareover types.arrow types.equiv
|
||
cubical.pathover2
|
||
|
||
open eq nat sigma sigma.ops quotient equiv pi is_trunc is_equiv fiber function trunc
|
||
|
||
namespace seq_colim
|
||
|
||
-- note: this clashes with the abbreviation defined in namespace "colimit"
|
||
abbreviation ι [constructor] := @inclusion
|
||
abbreviation ι' [constructor] [parsing_only] {A} (f n) := @inclusion A f n
|
||
|
||
universe variable v
|
||
variables {A A' A'' : ℕ → Type} (f : seq_diagram A) (f' : seq_diagram A') (f'' : seq_diagram A'')
|
||
(τ τ₂ : Π⦃n⦄, A n → A' n) (p : Π⦃n⦄ (a : A n), τ (f a) = f' (τ a))
|
||
(p₂ : Π⦃n⦄ (a : A n), τ₂ (f a) = f' (τ₂ a))
|
||
(τ' : Π⦃n⦄, A' n → A'' n) (p' : Π⦃n⦄ (a' : A' n), τ' (f' a') = f'' (τ' a'))
|
||
{P : Π⦃n⦄, A n → Type.{v}} (g : seq_diagram_over f P) {n : ℕ} {a : A n}
|
||
|
||
definition lrep_glue {n m : ℕ} (H : n ≤ m) (a : A n) : ι f (lrep f H a) = ι f a :=
|
||
begin
|
||
induction H with m H p,
|
||
{ reflexivity },
|
||
{ exact glue f (lrep f H a) ⬝ p }
|
||
end
|
||
|
||
-- probably not needed
|
||
-- definition rep0_back_glue [is_equiseq f] (k : ℕ) (a : A k) : ι f (rep0_back f k a) = ι f a :=
|
||
-- begin
|
||
-- exact sorry
|
||
-- end
|
||
|
||
definition colim_back [unfold 4] [H : is_equiseq f] : seq_colim f → A 0 :=
|
||
begin
|
||
intro x,
|
||
induction x with k a k a,
|
||
{ exact lrep_back f (zero_le k) a},
|
||
rexact ap (lrep_back f (zero_le k)) (left_inv (@f k) a),
|
||
end
|
||
|
||
section
|
||
variable {f}
|
||
local attribute is_equiv_lrep [instance] --[priority 500]
|
||
definition is_equiv_inclusion0 (H : is_equiseq f) : is_equiv (ι' f 0) :=
|
||
begin
|
||
fapply adjointify,
|
||
{ exact colim_back f},
|
||
{ intro x, induction x with k a k a,
|
||
{ refine (lrep_glue f (zero_le k) (lrep_back f (zero_le k) a))⁻¹ ⬝ _,
|
||
exact ap (ι f) (right_inv (lrep f (zero_le k)) a)},
|
||
apply eq_pathover_id_right,
|
||
refine (ap_compose (ι f) (colim_back f) _) ⬝ph _,
|
||
refine ap02 _ _ ⬝ph _, rotate 1,
|
||
{ rexact elim_glue f _ _ a },
|
||
refine _ ⬝pv ((natural_square (lrep_glue f (zero_le k))
|
||
(ap (lrep_back f (zero_le k)) (left_inv (@f k) a)))⁻¹ʰ ⬝h _),
|
||
{ exact (glue f _)⁻¹ ⬝ ap (ι f) (right_inv (lrep f (zero_le (succ k))) (f a)) },
|
||
{ rewrite [-con.assoc, -con_inv] },
|
||
refine !ap_compose⁻¹ ⬝ ap_compose (ι f) _ _ ⬝ph _,
|
||
refine dconcat (aps (ι' f k) (natural_square (right_inv (lrep f (zero_le k)))
|
||
(left_inv (@f _) a))) _,
|
||
apply move_top_of_left, apply move_left_of_bot,
|
||
refine ap02 _ (whisker_left _ (adj (@f _) a)) ⬝pv _,
|
||
rewrite [-+ap_con, ap_compose', ap_id],
|
||
apply natural_square_tr },
|
||
{ intro a, reflexivity }
|
||
end
|
||
|
||
definition equiv_of_is_equiseq [constructor] (H : is_equiseq f) : seq_colim f ≃ A 0 :=
|
||
(equiv.mk _ (is_equiv_inclusion0 H))⁻¹ᵉ
|
||
|
||
variable (f)
|
||
end
|
||
|
||
section
|
||
|
||
definition rep_glue (k : ℕ) (a : A n) : ι f (rep f k a) = ι f a :=
|
||
begin
|
||
induction k with k IH,
|
||
{ reflexivity},
|
||
{ exact glue f (rep f k a) ⬝ IH}
|
||
end
|
||
|
||
/- functorial action and equivalences -/
|
||
section functor
|
||
variables {f f' f''}
|
||
include p
|
||
definition seq_colim_functor [unfold 7] : seq_colim f → seq_colim f' :=
|
||
begin
|
||
intro x, induction x with n a n a,
|
||
{ exact ι f' (τ a)},
|
||
{ exact ap (ι f') (p a) ⬝ glue f' (τ a)}
|
||
end
|
||
omit p
|
||
|
||
theorem seq_colim_functor_glue {n : ℕ} (a : A n)
|
||
: ap (seq_colim_functor τ p) (glue f a) = ap (ι f') (p a) ⬝ glue f' (τ a) :=
|
||
!elim_glue
|
||
|
||
definition seq_colim_functor_compose [constructor] (x : seq_colim f) :
|
||
seq_colim_functor (λn x, τ' (τ x)) (λn, hvconcat (@p n) (@p' n)) x =
|
||
seq_colim_functor τ' p' (seq_colim_functor τ p x) :=
|
||
begin
|
||
induction x, reflexivity,
|
||
apply eq_pathover, apply hdeg_square,
|
||
refine !seq_colim_functor_glue ⬝ _ ⬝ (ap_compose (seq_colim_functor _ _) _ _)⁻¹,
|
||
refine _ ⬝ (ap02 _ proof !seq_colim_functor_glue qed ⬝ !ap_con)⁻¹,
|
||
refine _ ⬝ (proof !ap_compose' ⬝ ap_compose (ι f'') _ _ qed ◾ proof !seq_colim_functor_glue qed)⁻¹,
|
||
exact whisker_right _ !ap_con ⬝ !con.assoc
|
||
end
|
||
|
||
variable (f)
|
||
definition seq_colim_functor_id [constructor] (x : seq_colim f) :
|
||
seq_colim_functor (λn, id) (λn, homotopy.rfl) x = x :=
|
||
begin
|
||
induction x, reflexivity,
|
||
apply eq_pathover, apply hdeg_square,
|
||
exact !seq_colim_functor_glue ⬝ !idp_con ⬝ !ap_id⁻¹,
|
||
end
|
||
variables {f τ τ₂ p p₂}
|
||
|
||
definition seq_colim_functor_homotopy [constructor] (q : τ ~2 τ₂)
|
||
(r : Π⦃n⦄ (a : A n), square (q (n+1) (f a)) (ap (@f' n) (q n a)) (p a) (p₂ a))
|
||
(x : seq_colim f) :
|
||
seq_colim_functor τ p x = seq_colim_functor τ₂ p₂ x :=
|
||
begin
|
||
induction x,
|
||
exact ap (ι f') (q n a),
|
||
apply eq_pathover,
|
||
refine !seq_colim_functor_glue ⬝ph _ ⬝hp !seq_colim_functor_glue⁻¹,
|
||
refine aps (ι f') (r a) ⬝v !ap_compose⁻¹ ⬝pv natural_square_tr (glue f') (q n a),
|
||
end
|
||
variables (τ τ₂ p p₂)
|
||
|
||
definition is_equiv_seq_colim_functor [constructor] [H : Πn, is_equiv (@τ n)]
|
||
: is_equiv (seq_colim_functor @τ p) :=
|
||
adjointify _ (seq_colim_functor (λn, (@τ _)⁻¹) (λn a, inv_commute' τ f f' p a))
|
||
abstract begin
|
||
intro x,
|
||
refine !seq_colim_functor_compose⁻¹ ⬝ seq_colim_functor_homotopy _ _ x ⬝ !seq_colim_functor_id,
|
||
{ intro n a, exact right_inv (@τ n) a },
|
||
{ intro n a,
|
||
refine whisker_right _ !ap_inv_commute' ⬝ !inv_con_cancel_right ⬝ whisker_left _ !ap_inv ⬝ph _,
|
||
apply whisker_bl, apply whisker_tl, exact ids }
|
||
end end
|
||
abstract begin
|
||
intro x,
|
||
refine !seq_colim_functor_compose⁻¹ ⬝ seq_colim_functor_homotopy _ _ x ⬝ !seq_colim_functor_id,
|
||
{ intro n a, exact left_inv (@τ n) a },
|
||
{ intro n a,
|
||
esimp [hvconcat],
|
||
refine whisker_left _ (!inv_commute'_fn ⬝ !con.assoc) ⬝ !con_inv_cancel_left ⬝ph _,
|
||
apply whisker_bl, apply whisker_tl, exact ids }
|
||
end end
|
||
|
||
definition seq_colim_equiv [constructor] (τ : Π{n}, A n ≃ A' n)
|
||
(p : Π⦃n⦄ (a : A n), τ (f a) = f' (τ a)) : seq_colim f ≃ seq_colim f' :=
|
||
equiv.mk _ (is_equiv_seq_colim_functor @τ p)
|
||
|
||
definition seq_colim_rec_unc [unfold 4] {P : seq_colim f → Type}
|
||
(v : Σ(Pincl : Π ⦃n : ℕ⦄ (a : A n), P (ι f a)),
|
||
Π ⦃n : ℕ⦄ (a : A n), Pincl (f a) =[glue f a] Pincl a)
|
||
: Π(x : seq_colim f), P x :=
|
||
by induction v with Pincl Pglue; exact seq_colim.rec f Pincl Pglue
|
||
|
||
definition is_equiv_seq_colim_rec (P : seq_colim f → Type) :
|
||
is_equiv (seq_colim_rec_unc :
|
||
(Σ(Pincl : Π ⦃n : ℕ⦄ (a : A n), P (ι f a)),
|
||
Π ⦃n : ℕ⦄ (a : A n), Pincl (f a) =[glue f a] Pincl a)
|
||
→ (Π (aa : seq_colim f), P aa)) :=
|
||
begin
|
||
fapply adjointify,
|
||
{ intro s, exact ⟨λn a, s (ι f a), λn a, apd s (glue f a)⟩},
|
||
{ intro s, apply eq_of_homotopy, intro x, induction x,
|
||
{ reflexivity},
|
||
{ apply eq_pathover_dep, esimp, apply hdeg_squareover, apply rec_glue}},
|
||
{ intro v, induction v with Pincl Pglue, fapply ap (sigma.mk _),
|
||
apply eq_of_homotopy2, intros n a, apply rec_glue},
|
||
end
|
||
|
||
/- universal property -/
|
||
definition equiv_seq_colim_rec (P : seq_colim f → Type) :
|
||
(Σ(Pincl : Π ⦃n : ℕ⦄ (a : A n), P (ι f a)),
|
||
Π ⦃n : ℕ⦄ (a : A n), Pincl (f a) =[glue f a] Pincl a) ≃ (Π (aa : seq_colim f), P aa) :=
|
||
equiv.mk _ !is_equiv_seq_colim_rec
|
||
|
||
end functor
|
||
|
||
definition shift_up [unfold 3] (x : seq_colim f) : seq_colim (shift_diag f) :=
|
||
begin
|
||
induction x,
|
||
{ exact ι' (shift_diag f) n (f a)},
|
||
{ exact glue (shift_diag f) (f a)}
|
||
end
|
||
|
||
definition shift_down [unfold 3] (x : seq_colim (shift_diag f)) : seq_colim f :=
|
||
begin
|
||
induction x,
|
||
{ exact ι' f (n+1) a},
|
||
{ exact glue f a}
|
||
end
|
||
|
||
-- definition kshift_up' (k : ℕ) (x : seq_colim f) : seq_colim (kshift_diag' f k) :=
|
||
-- begin
|
||
-- induction x,
|
||
-- { apply ι' _ n, exact rep f k a},
|
||
-- { exact sorry}
|
||
-- end
|
||
|
||
-- definition kshift_down' (k : ℕ) (x : seq_colim (kshift_diag' f k)) : seq_colim f :=
|
||
-- begin
|
||
-- induction x,
|
||
-- { exact ι f a},
|
||
-- { esimp, exact sorry}
|
||
-- end
|
||
|
||
end
|
||
|
||
definition shift_equiv [constructor] : seq_colim f ≃ seq_colim (shift_diag f) :=
|
||
equiv.MK (shift_up f)
|
||
(shift_down f)
|
||
abstract begin
|
||
intro x, induction x,
|
||
{ exact glue _ a },
|
||
{ apply eq_pathover,
|
||
rewrite [▸*, ap_id, ap_compose (shift_up f) (shift_down f), ↑shift_down,
|
||
elim_glue],
|
||
apply square_of_eq, apply whisker_right, exact !elim_glue⁻¹ }
|
||
end end
|
||
abstract begin
|
||
intro x, induction x,
|
||
{ exact glue _ a },
|
||
{ apply eq_pathover,
|
||
rewrite [▸*, ap_id, ap_compose (shift_down f) (shift_up f), ↑shift_up,
|
||
elim_glue],
|
||
apply square_of_eq, apply whisker_right, exact !elim_glue⁻¹ }
|
||
end end
|
||
|
||
-- definition kshift_equiv [constructor] (k : ℕ)
|
||
-- : seq_colim A ≃ @seq_colim (λn, A (k + n)) (kshift_diag A k) :=
|
||
-- equiv.MK (kshift_up k)
|
||
-- (kshift_down k)
|
||
-- abstract begin
|
||
-- intro a, exact sorry,
|
||
-- -- induction a,
|
||
-- -- { esimp, exact glue a},
|
||
-- -- { apply eq_pathover,
|
||
-- -- rewrite [▸*, ap_id, ap_compose shift_up shift_down, ↑shift_down,
|
||
-- -- @elim_glue (λk, A (succ k)) _, ↑shift_up],
|
||
-- -- apply square_of_eq, apply whisker_right, exact !elim_glue⁻¹}
|
||
-- end end
|
||
-- abstract begin
|
||
-- intro a, exact sorry
|
||
-- -- induction a,
|
||
-- -- { exact glue a},
|
||
-- -- { apply eq_pathover,
|
||
-- -- rewrite [▸*, ap_id, ap_compose shift_down shift_up, ↑shift_up,
|
||
-- -- @elim_glue A _, ↑shift_down],
|
||
-- -- apply square_of_eq, apply whisker_right, exact !elim_glue⁻¹}
|
||
-- end end
|
||
|
||
-- definition kshift_equiv' [constructor] (k : ℕ) : seq_colim f ≃ seq_colim (kshift_diag' f k) :=
|
||
-- equiv.MK (kshift_up' f k)
|
||
-- (kshift_down' f k)
|
||
-- abstract begin
|
||
-- intro a, exact sorry,
|
||
-- -- induction a,
|
||
-- -- { esimp, exact glue a},
|
||
-- -- { apply eq_pathover,
|
||
-- -- rewrite [▸*, ap_id, ap_compose shift_up shift_down, ↑shift_down,
|
||
-- -- @elim_glue (λk, A (succ k)) _, ↑shift_up],
|
||
-- -- apply square_of_eq, apply whisker_right, exact !elim_glue⁻¹}
|
||
-- end end
|
||
-- abstract begin
|
||
-- intro a, exact sorry
|
||
-- -- induction a,
|
||
-- -- { exact glue a},
|
||
-- -- { apply eq_pathover,
|
||
-- -- rewrite [▸*, ap_id, ap_compose shift_down shift_up, ↑shift_up,
|
||
-- -- @elim_glue A _, ↑shift_down],
|
||
-- -- apply square_of_eq, apply whisker_right, exact !elim_glue⁻¹}
|
||
-- end end
|
||
|
||
/- todo: define functions back and forth explicitly -/
|
||
|
||
definition kshift'_equiv (k : ℕ) : seq_colim f ≃ seq_colim (kshift_diag' f k) :=
|
||
begin
|
||
induction k with k IH,
|
||
{ reflexivity },
|
||
{ exact IH ⬝e shift_equiv (kshift_diag' f k) ⬝e
|
||
seq_colim_equiv (λn, equiv_ap A (succ_add n k))
|
||
(λn a, proof !tr_inv_tr ⬝ !transport_lemma⁻¹ qed) }
|
||
end
|
||
|
||
definition kshift_equiv_inv (k : ℕ) : seq_colim (kshift_diag f k) ≃ seq_colim f :=
|
||
begin
|
||
induction k with k IH,
|
||
{ exact seq_colim_equiv (λn, equiv_ap A (nat.zero_add n)) (λn a, !transport_lemma2) },
|
||
{ exact seq_colim_equiv (λn, equiv_ap A (succ_add k n))
|
||
(λn a, transport_lemma2 (succ_add k n) f a) ⬝e
|
||
(shift_equiv (kshift_diag f k))⁻¹ᵉ ⬝e IH }
|
||
end
|
||
|
||
definition kshift_equiv [constructor] (k : ℕ) : seq_colim f ≃ seq_colim (kshift_diag f k) :=
|
||
(kshift_equiv_inv f k)⁻¹ᵉ
|
||
|
||
-- definition kshift_equiv2 [constructor] (k : ℕ) : seq_colim f ≃ seq_colim (kshift_diag f k) :=
|
||
-- begin
|
||
-- refine equiv_change_fun (kshift_equiv f k) _,
|
||
|
||
-- end
|
||
|
||
variable {f}
|
||
definition seq_colim_constant_seq [constructor] (X : Type) : seq_colim (constant_seq X) ≃ X :=
|
||
equiv_of_is_equiseq (λn, !is_equiv_id)
|
||
|
||
variable (f)
|
||
definition is_contr_seq_colim {A : ℕ → Type} (f : seq_diagram A)
|
||
[Πk, is_contr (A k)] : is_contr (seq_colim f) :=
|
||
begin
|
||
refine is_contr_is_equiv_closed (ι' f 0) _ _,
|
||
apply is_equiv_inclusion0, intro n, exact is_equiv_of_is_contr _ _ _
|
||
end
|
||
|
||
definition seq_colim_equiv_of_is_equiv [constructor] {n : ℕ} (H : Πk, k ≥ n → is_equiv (@f k)) :
|
||
seq_colim f ≃ A n :=
|
||
kshift_equiv f n ⬝e equiv_of_is_equiseq (λk, H (n+k) !le_add_right)
|
||
|
||
/- colimits of dependent sequences, sigma's commute with colimits -/
|
||
|
||
section over
|
||
|
||
variable {f}
|
||
|
||
definition rep_f_equiv_natural {k : ℕ} (p : P (rep f k (f a))) :
|
||
transporto P (rep_f f (succ k) a) (g p) = g (transporto P (rep_f f k a) p) :=
|
||
(fn_tro_eq_tro_fn2 (rep_f f k a) g p)⁻¹
|
||
|
||
variable (a)
|
||
definition over_f_equiv [constructor] :
|
||
seq_colim (seq_diagram_of_over g (f a)) ≃ seq_colim (shift_diag (seq_diagram_of_over g a)) :=
|
||
seq_colim_equiv (rep_f_equiv f P a) (λk p, rep_f_equiv_natural g p)
|
||
|
||
definition seq_colim_over_equiv :
|
||
seq_colim (seq_diagram_of_over g (f a)) ≃ seq_colim (seq_diagram_of_over g a) :=
|
||
over_f_equiv g a ⬝e (shift_equiv (seq_diagram_of_over g a))⁻¹ᵉ
|
||
|
||
definition seq_colim_over_equiv_glue {k : ℕ} (x : P (rep f k (f a))) :
|
||
ap (seq_colim_over_equiv g a) (glue (seq_diagram_of_over g (f a)) x) =
|
||
ap (ι' (seq_diagram_of_over g a) (k+2)) (rep_f_equiv_natural g x) ⬝
|
||
glue (seq_diagram_of_over g a) (rep_f f k a ▸o x) :=
|
||
begin
|
||
refine ap_compose (shift_down (seq_diagram_of_over g a)) _ _ ⬝ _,
|
||
exact ap02 _ !elim_glue ⬝ !ap_con ⬝ !ap_compose' ◾ !elim_glue
|
||
end
|
||
|
||
variable {a}
|
||
|
||
include g
|
||
definition seq_colim_over [unfold 5] (x : seq_colim f) : Type.{v} :=
|
||
begin
|
||
refine seq_colim.elim_type f _ _ x,
|
||
{ intro n a, exact seq_colim (seq_diagram_of_over g a)},
|
||
{ intro n a, exact seq_colim_over_equiv g a }
|
||
end
|
||
omit g
|
||
|
||
definition ιo [constructor] (p : P a) : seq_colim_over g (ι f a) :=
|
||
ι' _ 0 p
|
||
|
||
-- Warning: the order of addition has changed in rep_rep
|
||
-- definition rep_equiv_rep_rep (l : ℕ)
|
||
-- : @seq_colim (λk, P (rep (k + l) a)) (kshift_diag' _ _) ≃
|
||
-- @seq_colim (λk, P (rep k (rep l a))) (seq_diagram_of_over P (rep l a)) :=
|
||
-- seq_colim_equiv (λk, rep_rep_equiv P a k l) abstract (λk p,
|
||
-- begin
|
||
-- esimp,
|
||
-- rewrite [+cast_apd011],
|
||
-- refine _ ⬝ (fn_tro_eq_tro_fn (rep_f k a)⁻¹ᵒ g p)⁻¹ᵖ,
|
||
-- rewrite [↑rep_f,↓rep_f k a],
|
||
-- refine !pathover_ap_invo_tro ⬝ _,
|
||
-- rewrite [apo_invo,apo_tro]
|
||
-- end) end
|
||
|
||
variable {P}
|
||
theorem seq_colim_over_glue /- r -/ (x : seq_colim_over g (ι f (f a)))
|
||
: transport (seq_colim_over g) (glue f a) x = shift_down _ (over_f_equiv g a x) :=
|
||
ap10 (elim_type_glue _ _ _ a) x
|
||
|
||
theorem seq_colim_over_glue_inv (x : seq_colim_over g (ι f a))
|
||
: transport (seq_colim_over g) (glue f a)⁻¹ x = to_inv (over_f_equiv g a) (shift_up _ x) :=
|
||
ap10 (elim_type_glue_inv _ _ _ a) x
|
||
|
||
definition glue_over (p : P (f a)) : pathover (seq_colim_over g) (ιo g p) (glue f a) (ι' _ 1 p) :=
|
||
pathover_of_tr_eq !seq_colim_over_glue
|
||
|
||
-- we can define a function from the colimit of total spaces to the total space of the colimit.
|
||
|
||
/- TO DO: define glue' in the same way as glue' -/
|
||
definition glue' (p : P a) : ⟨ι f (f a), ιo g (g p)⟩ = ⟨ι f a, ιo g p⟩ :=
|
||
sigma_eq (glue f a) (glue_over g (g p) ⬝op glue (seq_diagram_of_over g a) p)
|
||
|
||
definition glue_star (k : ℕ) (x : P (rep f k (f a))) :
|
||
⟨ι f (f a), ι (seq_diagram_of_over g (f a)) x⟩ =
|
||
⟨ι f a, ι (seq_diagram_of_over g a) (to_fun (rep_f_equiv f P a k) x)⟩
|
||
:> sigma (seq_colim_over g) :=
|
||
begin
|
||
apply dpair_eq_dpair (glue f a),
|
||
apply pathover_of_tr_eq,
|
||
refine seq_colim_over_glue g (ι (seq_diagram_of_over g (f a)) x)
|
||
end
|
||
|
||
definition sigma_colim_of_colim_sigma [unfold 5] (a : seq_colim (seq_diagram_sigma g)) :
|
||
Σ(x : seq_colim f), seq_colim_over g x :=
|
||
begin
|
||
induction a with n v n v,
|
||
{ induction v with a p, exact ⟨ι f a, ιo g p⟩},
|
||
{ induction v with a p, exact glue' g p }
|
||
end
|
||
|
||
definition colim_sigma_triangle [unfold 5] (a : seq_colim (seq_diagram_sigma g)) :
|
||
(sigma_colim_of_colim_sigma g a).1 = seq_colim_functor (λn, sigma.pr1) (λn, homotopy.rfl) a :=
|
||
begin
|
||
induction a with n v n v,
|
||
{ induction v with a p, reflexivity },
|
||
{ induction v with a p, apply eq_pathover, apply hdeg_square,
|
||
refine ap_compose sigma.pr1 _ _ ⬝ ap02 _ !elim_glue ⬝ _ ⬝ !elim_glue⁻¹,
|
||
exact !sigma_eq_pr1 ⬝ !idp_con⁻¹ }
|
||
end
|
||
|
||
-- we now want to show that this function is an equivalence.
|
||
|
||
/-
|
||
Kristina's proof of the induction principle of colim-sigma for sigma-colim.
|
||
It's a double induction, so we have 4 cases: point-point, point-path, path-point and path-path.
|
||
The main idea of the proof is that for the path-path case you need to fill a square, but we can
|
||
define the point-path case as a filler for this square.
|
||
-/
|
||
|
||
open sigma
|
||
|
||
/-
|
||
dictionary:
|
||
Kristina | Lean
|
||
VARIABLE NAMES (A, P, k, n, e, w are the same)
|
||
x : A_n | a : A n
|
||
a : A_n → A_{n+1} | f : A n → A (n+1)
|
||
y : P(n, x) | x : P a (maybe other variables)
|
||
f : P(n, x) → P(n+1, a_n x) | g : P a → P (f a)
|
||
DEFINITION NAMES
|
||
κ | glue
|
||
U | rep_f_equiv : P (n+1+k, rep f k (f x)) ≃ P (n+k+1, rep f (k+1) x)
|
||
δ | rep_f_equiv_natural
|
||
F | over_f_equiv g a ⬝e (shift_equiv (λk, P (rep f k a)) (seq_diagram_of_over g a))⁻¹ᵉ
|
||
g_* | g_star
|
||
g | sigma_colim_rec_point
|
||
-/
|
||
|
||
definition glue_star_eq (k : ℕ) (x : P (rep f k (f a))) :
|
||
glue_star g k x =
|
||
dpair_eq_dpair (glue f a) (pathover_tr (glue f a) (ι (seq_diagram_of_over g (f a)) x)) ⬝
|
||
ap (dpair (ι f a)) (seq_colim_over_glue g (ι (seq_diagram_of_over g (f a)) x)) :=
|
||
ap (sigma_eq _) !pathover_of_tr_eq_eq_concato ⬝ !sigma_eq_con ⬝ whisker_left _ !ap_dpair⁻¹
|
||
|
||
definition g_star_step {E : (Σ(x : seq_colim f), seq_colim_over g x) → Type}
|
||
(e : Πn (a : A n) (x : P a), E ⟨ι f a, ιo g x⟩) {k : ℕ}
|
||
(IH : Π{n} {a : A n} (x : P (rep f k a)), E ⟨ι f a, ι (seq_diagram_of_over g a) x⟩) :
|
||
Σ(gs : Π⦃n : ℕ⦄ {a : A n} (x : P (rep f (k+1) a)), E ⟨ι f a, ι (seq_diagram_of_over g a) x⟩),
|
||
Π⦃n : ℕ⦄ {a : A n} (x : P (rep f k (f a))),
|
||
pathover E (IH x) (glue_star g k x) (gs (transporto P (rep_f f k a) x)) :=
|
||
begin
|
||
fconstructor,
|
||
{ intro n a,
|
||
refine equiv_rect (rep_f_equiv f P a k) _ _,
|
||
intro z, refine transport E _ (IH z),
|
||
exact glue_star g k z },
|
||
{ intro n a x, exact !pathover_tr ⬝op !equiv_rect_comp⁻¹ }
|
||
end
|
||
|
||
definition g_star /- g_* -/ {E : (Σ(x : seq_colim f), seq_colim_over g x) → Type}
|
||
(e : Πn (a : A n) (x : P a), E ⟨ι f a, ιo g x⟩) {k : ℕ} :
|
||
Π {n : ℕ} {a : A n} (x : P (rep f k a)), E ⟨ι f a, ι (seq_diagram_of_over g a) x⟩ :=
|
||
begin
|
||
induction k with k IH: intro n a x,
|
||
{ exact e n a x },
|
||
{ apply (g_star_step g e @IH).1 }
|
||
end
|
||
|
||
definition g_star_path_left {E : (Σ(x : seq_colim f), seq_colim_over g x) → Type}
|
||
(e : Π⦃n⦄ ⦃a : A n⦄ (x : P a), E ⟨ι f a, ιo g x⟩)
|
||
(w : Π⦃n⦄ ⦃a : A n⦄ (x : P a), pathover E (e (g x)) (glue' g x) (e x))
|
||
{k : ℕ} {n : ℕ} {a : A n} (x : P (rep f k (f a))) :
|
||
pathover E (g_star g e x) (glue_star g k x)
|
||
(g_star g e (transporto P (rep_f f k a) x)) :=
|
||
by apply (g_star_step g e (@(g_star g e) k)).2
|
||
|
||
/- this is the bottom of the square we have to fill in the end -/
|
||
definition bottom_square {E : (Σ(x : seq_colim f), seq_colim_over g x) → Type}
|
||
(e : Π⦃n⦄ ⦃a : A n⦄ (x : P a), E ⟨ι f a, ιo g x⟩)
|
||
(w : Π⦃n⦄ ⦃a : A n⦄ (x : P a), pathover E (e (g x)) (glue' g x) (e x))
|
||
(k : ℕ) {n : ℕ} {a : A n} (x : P (rep f k (f a))) :=
|
||
move_top_of_right (natural_square
|
||
(λ b, dpair_eq_dpair (glue f a) (pathover_tr (glue f a) b) ⬝
|
||
ap (dpair (ι f a)) (seq_colim_over_glue g b))
|
||
(glue (seq_diagram_of_over g (f a)) x) ⬝hp
|
||
ap_compose (dpair (ι f a)) (to_fun (seq_colim_over_equiv g a))
|
||
(glue (seq_diagram_of_over g (f a)) x) ⬝hp
|
||
(ap02 (dpair (ι f a)) (seq_colim_over_equiv_glue g a x)⁻¹)⁻¹ ⬝hp
|
||
ap_con (dpair (ι f a))
|
||
(ap (λx, shift_down (seq_diagram_of_over g a) (ι (shift_diag (seq_diagram_of_over g a)) x))
|
||
(rep_f_equiv_natural g x))
|
||
(glue (seq_diagram_of_over g a) (to_fun (rep_f_equiv f P a k) x)))
|
||
|
||
/- this is the composition + filler -/
|
||
definition g_star_path_right_step {E : (Σ(x : seq_colim f), seq_colim_over g x) → Type}
|
||
(e : Π⦃n⦄ ⦃a : A n⦄ (x : P a), E ⟨ι f a, ιo g x⟩)
|
||
(w : Π⦃n⦄ ⦃a : A n⦄ (x : P a), pathover E (e (g x)) (glue' g x) (e x))
|
||
(k : ℕ) {n : ℕ} {a : A n} (x : P (rep f k (f a)))
|
||
(IH : Π(n : ℕ) (a : A n) (x : P (rep f k a)),
|
||
pathover E (g_star g e (seq_diagram_of_over g a x))
|
||
(ap (dpair (ι f a)) (glue (seq_diagram_of_over g a) x))
|
||
(g_star g e x)) :=
|
||
squareover_fill_r
|
||
(bottom_square g e w k x)
|
||
(change_path (glue_star_eq g (succ k) (g x)) (g_star_path_left g e w (g x)) ⬝o
|
||
pathover_ap E (dpair (ι f a))
|
||
(pathover_ap (λ (b : seq_colim (seq_diagram_of_over g a)), E ⟨ι f a, b⟩)
|
||
(ι (seq_diagram_of_over g a)) (apd (g_star g e) (rep_f_equiv_natural g x))))
|
||
(change_path (glue_star_eq g k x) (g_star_path_left g e w x))
|
||
(IH (n+1) (f a) x)
|
||
|
||
/- this is just the composition -/
|
||
definition g_star_path_right_step1 {E : (Σ(x : seq_colim f), seq_colim_over g x) → Type}
|
||
(e : Π⦃n⦄ ⦃a : A n⦄ (x : P a), E ⟨ι f a, ιo g x⟩)
|
||
(w : Π⦃n⦄ ⦃a : A n⦄ (x : P a), pathover E (e (g x)) (glue' g x) (e x))
|
||
(k : ℕ) {n : ℕ} {a : A n} (x : P (rep f k (f a)))
|
||
(IH : Π(n : ℕ) (a : A n) (x : P (rep f k a)),
|
||
pathover E (g_star g e (seq_diagram_of_over g a x))
|
||
(ap (dpair (ι f a)) (glue (seq_diagram_of_over g a) x))
|
||
(g_star g e x)) :=
|
||
(g_star_path_right_step g e w k x IH).1
|
||
|
||
definition g_star_path_right {E : (Σ(x : seq_colim f), seq_colim_over g x) → Type}
|
||
(e : Π⦃n⦄ ⦃a : A n⦄ (x : P a), E ⟨ι f a, ιo g x⟩)
|
||
(w : Π⦃n⦄ ⦃a : A n⦄ (x : P a), pathover E (e (g x)) (glue' g x) (e x))
|
||
(k : ℕ) {n : ℕ} {a : A n} (x : P (rep f k a)) :
|
||
pathover E (g_star g e (seq_diagram_of_over g a x))
|
||
(ap (dpair (ι f a)) (glue (seq_diagram_of_over g a) x))
|
||
(g_star g e x) :=
|
||
begin
|
||
revert n a x, induction k with k IH: intro n a x,
|
||
{ exact abstract begin refine pathover_cancel_left !pathover_tr⁻¹ᵒ (change_path _ (w x)),
|
||
apply sigma_eq_concato_eq end end },
|
||
{ revert x, refine equiv_rect (rep_f_equiv f P a k) _ _, intro x,
|
||
exact g_star_path_right_step1 g e w k x IH }
|
||
end
|
||
|
||
definition sigma_colim_rec_point [unfold 10] /- g -/ {E : (Σ(x : seq_colim f), seq_colim_over g x) → Type}
|
||
(e : Π⦃n⦄ ⦃a : A n⦄ (x : P a), E ⟨ι f a, ιo g x⟩)
|
||
(w : Π⦃n⦄ ⦃a : A n⦄ (x : P a), pathover E (e (g x)) (glue' g x) (e x))
|
||
{n : ℕ} {a : A n} (x : seq_colim_over g (ι f a)) : E ⟨ι f a, x⟩ :=
|
||
begin
|
||
induction x with k x k x,
|
||
{ exact g_star g e x },
|
||
{ apply pathover_of_pathover_ap E (dpair (ι f a)),
|
||
exact g_star_path_right g e w k x }
|
||
end
|
||
|
||
definition sigma_colim_rec {E : (Σ(x : seq_colim f), seq_colim_over g x) → Type}
|
||
(e : Π⦃n⦄ ⦃a : A n⦄ (x : P a), E ⟨ι f a, ιo g x⟩)
|
||
(w : Π⦃n⦄ ⦃a : A n⦄ (x : P a), pathover E (e (g x)) (glue' g x) (e x))
|
||
(v : Σ(x : seq_colim f), seq_colim_over g x) : E v :=
|
||
begin
|
||
induction v with x y,
|
||
induction x with n a n a,
|
||
{ exact sigma_colim_rec_point g e w y },
|
||
{ apply pi_pathover_left, intro x,
|
||
refine change_path (whisker_left _ !ap_inv ⬝ !con_inv_cancel_right)
|
||
(_ ⬝o pathover_ap E (dpair _) (apd (sigma_colim_rec_point g e w) !seq_colim_over_glue⁻¹)),
|
||
/- we can simplify the squareover we need to fill a bit if we apply this rule here -/
|
||
-- refine change_path (ap (sigma_eq (glue f a)) !pathover_of_tr_eq_eq_concato ⬝ !sigma_eq_con ⬝ whisker_left _ !ap_dpair⁻¹) _,
|
||
induction x with k x k x,
|
||
{ exact change_path !glue_star_eq (g_star_path_left g e w x) },
|
||
-- { exact g_star_path_left g e w x },
|
||
{ apply pathover_pathover, esimp,
|
||
refine _ ⬝hop (ap (pathover_ap E _) (apd_compose2 (sigma_colim_rec_point g e w) _ _) ⬝
|
||
pathover_ap_pathover_of_pathover_ap E (dpair (ι f a)) (seq_colim_over_equiv g a) _)⁻¹,
|
||
apply squareover_change_path_right',
|
||
refine _ ⬝hop !pathover_ap_change_path⁻¹ ⬝ ap (pathover_ap E _)
|
||
(apd02 _ !seq_colim_over_equiv_glue⁻¹),
|
||
apply squareover_change_path_right,
|
||
refine _ ⬝hop (ap (pathover_ap E _) (!apd_con ⬝ (!apd_ap ◾o idp)) ⬝ !pathover_ap_cono)⁻¹,
|
||
apply squareover_change_path_right',
|
||
apply move_right_of_top_over,
|
||
refine _ ⬝hop (ap (pathover_ap E _) !rec_glue ⬝ to_right_inv !pathover_compose _)⁻¹,
|
||
refine ap (pathover_ap E _) !rec_glue ⬝ to_right_inv !pathover_compose _ ⬝pho _,
|
||
refine _ ⬝hop !equiv_rect_comp⁻¹,
|
||
exact (g_star_path_right_step g e w k x @(g_star_path_right g e w k)).2 }}
|
||
end
|
||
|
||
|
||
/- We now define the map back, and show using this induction principle that the composites are the identity -/
|
||
variable {P}
|
||
|
||
definition colim_sigma_of_sigma_colim_constructor [unfold 7] (p : seq_colim_over g (ι f a))
|
||
: seq_colim (seq_diagram_sigma g) :=
|
||
begin
|
||
induction p with k p k p,
|
||
{ exact ι _ ⟨rep f k a, p⟩},
|
||
{ apply glue}
|
||
end
|
||
|
||
definition colim_sigma_of_sigma_colim_path1 /- μ -/ {k : ℕ} (p : P (rep f k (f a))) :
|
||
ι (seq_diagram_sigma g) ⟨rep f k (f a), p⟩ =
|
||
ι (seq_diagram_sigma g) ⟨rep f (succ k) a, transporto P (rep_f f k a) p⟩ :=
|
||
begin
|
||
apply apd0111 (λn a p, ι' (seq_diagram_sigma g) n ⟨a, p⟩) (succ_add n k) (rep_f f k a),
|
||
apply pathover_tro
|
||
end
|
||
|
||
definition colim_sigma_of_sigma_colim_path2 {k : ℕ} (p : P (rep f k (f a))) :
|
||
square (colim_sigma_of_sigma_colim_path1 g (g p)) (colim_sigma_of_sigma_colim_path1 g p)
|
||
(ap (colim_sigma_of_sigma_colim_constructor g) (glue (seq_diagram_of_over g (f a)) p))
|
||
(ap (λx, colim_sigma_of_sigma_colim_constructor g (shift_down (seq_diagram_of_over g a)
|
||
(seq_colim_functor (λk, transporto P (rep_f f k a)) (λk p, rep_f_equiv_natural g p) x)))
|
||
(glue (seq_diagram_of_over g (f a)) p)) :=
|
||
begin
|
||
refine !elim_glue ⬝ph _,
|
||
refine _ ⬝hp (ap_compose' (colim_sigma_of_sigma_colim_constructor g) _ _),
|
||
refine _ ⬝hp ap02 _ !seq_colim_over_equiv_glue⁻¹,
|
||
refine _ ⬝hp !ap_con⁻¹,
|
||
refine _ ⬝hp !ap_compose ◾ !elim_glue⁻¹,
|
||
refine _ ⬝pv whisker_rt _ (natural_square0111 P (pathover_tro (rep_f f k a) p) g
|
||
(λn a p, glue (seq_diagram_sigma g) ⟨a, p⟩)),
|
||
refine _ ⬝ whisker_left _ (ap02 _ !inv_inv⁻¹ ⬝ !ap_inv),
|
||
symmetry, apply apd0111_precompose
|
||
end
|
||
|
||
definition colim_sigma_of_sigma_colim [unfold 5] (v : Σ(x : seq_colim f), seq_colim_over g x)
|
||
: seq_colim (seq_diagram_sigma g) :=
|
||
begin
|
||
induction v with x p,
|
||
induction x with n a n a,
|
||
{ exact colim_sigma_of_sigma_colim_constructor g p },
|
||
apply arrow_pathover_constant_right, intro x, esimp at x,
|
||
refine _ ⬝ ap (colim_sigma_of_sigma_colim_constructor g) !seq_colim_over_glue⁻¹,
|
||
induction x with k p k p,
|
||
{ exact colim_sigma_of_sigma_colim_path1 g p },
|
||
apply eq_pathover, apply colim_sigma_of_sigma_colim_path2
|
||
end
|
||
|
||
/- TODO: prove and merge these theorems -/
|
||
definition colim_sigma_of_sigma_colim_glue' [unfold 5] (p : P a)
|
||
: ap (colim_sigma_of_sigma_colim g) (glue' g p) = glue (seq_diagram_sigma g) ⟨a, p⟩ :=
|
||
begin
|
||
refine !ap_dpair_eq_dpair ⬝ _,
|
||
refine !apd011_eq_apo11_apd ⬝ _,
|
||
refine ap (λx, apo11_constant_right x _) !rec_glue ⬝ _,
|
||
refine !apo11_arrow_pathover_constant_right ⬝ _, esimp,
|
||
refine whisker_right _ !idp_con ⬝ _,
|
||
rewrite [▸*, tr_eq_of_pathover_concato_eq, ap_con, ↑glue_over,
|
||
to_right_inv !pathover_equiv_tr_eq, ap_inv, inv_con_cancel_left],
|
||
apply elim_glue
|
||
end
|
||
|
||
theorem colim_sigma_of_sigma_colim_of_colim_sigma (a : seq_colim (seq_diagram_sigma g)) :
|
||
colim_sigma_of_sigma_colim g (sigma_colim_of_colim_sigma g a) = a :=
|
||
begin
|
||
induction a with n v n v,
|
||
{ induction v with a p, reflexivity },
|
||
{ induction v with a p, esimp, apply eq_pathover_id_right, apply hdeg_square,
|
||
refine ap_compose (colim_sigma_of_sigma_colim g) _ _ ⬝ _,
|
||
refine ap02 _ !elim_glue ⬝ _, exact colim_sigma_of_sigma_colim_glue' g p }
|
||
end
|
||
|
||
theorem sigma_colim_of_colim_sigma_of_sigma_colim (v : Σ(x : seq_colim f), seq_colim_over g x)
|
||
: sigma_colim_of_colim_sigma g (colim_sigma_of_sigma_colim g v) = v :=
|
||
begin
|
||
revert v, refine sigma_colim_rec _ _ _,
|
||
{ intro n a x, reflexivity },
|
||
{ intro n a x, apply eq_pathover_id_right, apply hdeg_square,
|
||
refine ap_compose (sigma_colim_of_colim_sigma g) _ _ ⬝ _,
|
||
refine ap02 _ (colim_sigma_of_sigma_colim_glue' g x) ⬝ _,
|
||
apply elim_glue }
|
||
end
|
||
|
||
variable (P)
|
||
definition sigma_seq_colim_over_equiv [constructor]
|
||
: (Σ(x : seq_colim f), seq_colim_over g x) ≃ seq_colim (seq_diagram_sigma g) :=
|
||
equiv.MK (colim_sigma_of_sigma_colim g)
|
||
(sigma_colim_of_colim_sigma g)
|
||
(colim_sigma_of_sigma_colim_of_colim_sigma g)
|
||
(sigma_colim_of_colim_sigma_of_sigma_colim g)
|
||
|
||
end over
|
||
|
||
definition seq_colim_id_equiv_seq_colim_id0 (a₀ a₁ : A 0) :
|
||
seq_colim (id_seq_diagram f 0 a₀ a₁) ≃ seq_colim (id0_seq_diagram f a₀ a₁) :=
|
||
seq_colim_equiv
|
||
(λn, !lrep_eq_lrep_irrel (nat.zero_add n))
|
||
(λn p, !lrep_eq_lrep_irrel_natural)
|
||
|
||
definition kshift_equiv_inv_incl_kshift_diag {n k : ℕ} (x : A (n + k)) :
|
||
kshift_equiv_inv f n (ι' (kshift_diag f n) k x) = ι f x :=
|
||
begin
|
||
revert A f k x, induction n with n IH: intro A f k x,
|
||
{ exact apd011 (ι' f) !nat.zero_add⁻¹ !pathover_tr⁻¹ᵒ },
|
||
{ exact !IH ⬝ apd011 (ι' f) !succ_add⁻¹ !pathover_tr⁻¹ᵒ }
|
||
end
|
||
|
||
definition incl_kshift_diag {n k : ℕ} (x : A (n + k)) :
|
||
ι' (kshift_diag f n) k x = kshift_equiv f n (ι f x) :=
|
||
eq_inv_of_eq (kshift_equiv_inv_incl_kshift_diag f x)
|
||
|
||
definition incl_kshift_diag0 {n : ℕ} (x : A n) :
|
||
ι' (kshift_diag f n) 0 x = kshift_equiv f n (ι f x) :=
|
||
incl_kshift_diag f x
|
||
|
||
definition seq_colim_eq_equiv0' (a₀ a₁ : A 0) :
|
||
ι f a₀ = ι f a₁ ≃ seq_colim (id_seq_diagram f 0 a₀ a₁) :=
|
||
begin
|
||
refine total_space_method (ι f a₀) (seq_colim_over (id0_seq_diagram_over f a₀))
|
||
_ _ (ι f a₁) ⬝e _,
|
||
{ apply @(is_trunc_equiv_closed_rev _ (sigma_seq_colim_over_equiv _ _)),
|
||
apply is_contr_seq_colim },
|
||
{ exact ιo _ idp },
|
||
/-
|
||
In the next equivalence we have to show that
|
||
seq_colim_over (id0_seq_diagram_over f a₀) (ι f a₁) ≃ seq_colim (id_seq_diagram f 0 a₀ a₁).
|
||
This looks trivial, because both of them reduce to
|
||
seq_colim (f^{0 ≤ 0+k}(a₀) = f^{0 ≤ 0+k}(a₁), ap_f).
|
||
However, not all proofs of these inequalities are definitionally equal. 3 of them are proven by
|
||
zero_le : 0 ≤ n,
|
||
but one of them (the RHS of seq_colim_over (id0_seq_diagram_over f a₀) (ι f a₁)) uses
|
||
le_add_right : n ≤ n+k
|
||
Alternatively, we could redefine le_add_right so that for n=0, it reduces to `zero_le (0+k)`.
|
||
-/
|
||
{ refine seq_colim_equiv (λn, eq_equiv_eq_closed !lrep_irrel idp) _,
|
||
intro n p, refine whisker_right _ (!lrep_irrel2⁻² ⬝ !ap_inv⁻¹) ⬝ !ap_con⁻¹ }
|
||
end
|
||
|
||
-- definition seq_colim_eq_equiv0'_natural {a₀ a₁ : A 0} {a₀' a₁' : A' 0} (p₀ : τ a₀ = a₀')
|
||
-- (p₁ : τ a₁ = a₁') :
|
||
-- hsquare (seq_colim_eq_equiv0' f a₀ a₁) (seq_colim_eq_equiv0' f' a₀' a₁')
|
||
-- (pointed.ap1_gen (seq_colim_functor τ p) (ap (ι' f' 0) p₀) (ap (ι' f' 0) p₁))
|
||
-- (seq_colim_functor (λn, pointed.ap1_gen (@τ _)) _) :=
|
||
-- _
|
||
|
||
definition seq_colim_eq_equiv0 (a₀ a₁ : A 0) : ι f a₀ = ι f a₁ ≃ seq_colim (id0_seq_diagram f a₀ a₁) :=
|
||
seq_colim_eq_equiv0' f a₀ a₁ ⬝e seq_colim_id_equiv_seq_colim_id0 f a₀ a₁
|
||
|
||
definition seq_colim_eq_equiv {n : ℕ} (a₀ a₁ : A n) :
|
||
ι f a₀ = ι f a₁ ≃ seq_colim (id_seq_diagram f n a₀ a₁) :=
|
||
eq_equiv_fn_eq (kshift_equiv f n) (ι f a₀) (ι f a₁) ⬝e
|
||
eq_equiv_eq_closed (incl_kshift_diag0 f a₀)⁻¹ (incl_kshift_diag0 f a₁)⁻¹ ⬝e
|
||
seq_colim_eq_equiv0' (kshift_diag f n) a₀ a₁ ⬝e
|
||
@seq_colim_equiv _ _ _ (λk, ap (@f _))
|
||
(λm, eq_equiv_eq_closed !lrep_kshift_diag !lrep_kshift_diag)
|
||
(λm p, whisker_right _ (whisker_right _ !ap_inv⁻¹ ⬝ !ap_con⁻¹) ⬝ !ap_con⁻¹) ⬝e
|
||
seq_colim_equiv
|
||
(λm, !lrep_eq_lrep_irrel (ap (add n) (nat.zero_add m)))
|
||
begin
|
||
intro m q,
|
||
refine _ ⬝ lrep_eq_lrep_irrel_natural f (le_add_right n m) (ap (add n) (nat.zero_add m)) q,
|
||
exact ap (λx, lrep_eq_lrep_irrel f _ _ _ _ x _) !is_prop.elim
|
||
end
|
||
|
||
open algebra
|
||
theorem is_trunc_seq_colim [instance] (k : ℕ₋₂) [H : Πn, is_trunc k (A n)] :
|
||
is_trunc k (seq_colim f) :=
|
||
begin
|
||
revert A f H, induction k with k IH: intro A f H,
|
||
{ apply is_contr_seq_colim },
|
||
{ apply is_trunc_succ_intro, intro x y,
|
||
induction x using seq_colim.rec_prop with n a,
|
||
induction y using seq_colim.rec_prop with m a',
|
||
apply is_trunc_equiv_closed,
|
||
exact eq_equiv_eq_closed (lrep_glue _ (le_max_left n m) _) (lrep_glue _ (le_max_right n m) _),
|
||
apply is_trunc_equiv_closed_rev,
|
||
apply seq_colim_eq_equiv,
|
||
apply IH, intro l, apply is_trunc_eq }
|
||
end
|
||
|
||
definition seq_colim_trunc_of_trunc_seq_colim [unfold 4] (k : ℕ₋₂) (x : trunc k (seq_colim f)) :
|
||
seq_colim (trunc_diagram k f) :=
|
||
begin induction x with x, exact seq_colim_functor (λn, tr) (λn y, idp) x end
|
||
|
||
definition trunc_seq_colim_of_seq_colim_trunc [unfold 4] (k : ℕ₋₂)
|
||
(x : seq_colim (trunc_diagram k f)) : trunc k (seq_colim f) :=
|
||
begin
|
||
induction x with n x n x,
|
||
{ induction x with a, exact tr (ι f a) },
|
||
{ induction x with a, exact ap tr (glue f a) }
|
||
end
|
||
|
||
definition trunc_seq_colim_equiv [constructor] (k : ℕ₋₂) :
|
||
trunc k (seq_colim f) ≃ seq_colim (trunc_diagram k f) :=
|
||
equiv.MK (seq_colim_trunc_of_trunc_seq_colim f k) (trunc_seq_colim_of_seq_colim_trunc f k)
|
||
abstract begin
|
||
intro x, induction x with n x n x,
|
||
{ induction x with a, reflexivity },
|
||
{ induction x with a, apply eq_pathover_id_right, apply hdeg_square,
|
||
refine ap_compose (seq_colim_trunc_of_trunc_seq_colim f k) _ _ ⬝ ap02 _ !elim_glue ⬝ _,
|
||
refine !ap_compose' ⬝ !elim_glue ⬝ _, exact !idp_con }
|
||
end end
|
||
abstract begin
|
||
intro x, induction x with x, induction x with n a n a,
|
||
{ reflexivity },
|
||
{ apply eq_pathover, apply hdeg_square,
|
||
refine ap_compose (trunc_seq_colim_of_seq_colim_trunc f k) _ _ ⬝ ap02 _ !elim_glue ⬝ _,
|
||
refine !ap_compose' ⬝ !elim_glue }
|
||
end end
|
||
|
||
theorem is_conn_seq_colim [instance] (k : ℕ₋₂) [H : Πn, is_conn k (A n)] :
|
||
is_conn k (seq_colim f) :=
|
||
is_trunc_equiv_closed_rev -2 (trunc_seq_colim_equiv f k) _
|
||
|
||
/- the colimit of a sequence of fibers is the fiber of the functorial action of the colimit -/
|
||
definition domain_seq_colim_functor {A A' : ℕ → Type} {f : seq_diagram A}
|
||
{f' : seq_diagram A'} (τ : Πn, A' n → A n)
|
||
(p : Π⦃n⦄, τ (n+1) ∘ @f' n ~ @f n ∘ @τ n) :
|
||
(Σ(x : seq_colim f), seq_colim_over (seq_diagram_over_fiber τ p) x) ≃ seq_colim f' :=
|
||
begin
|
||
transitivity seq_colim (seq_diagram_sigma (seq_diagram_over_fiber τ p)),
|
||
exact sigma_seq_colim_over_equiv _ (seq_diagram_over_fiber τ p),
|
||
exact seq_colim_equiv (λn, sigma_fiber_equiv (τ n)) (λn x, idp)
|
||
end
|
||
|
||
definition fiber_seq_colim_functor {A A' : ℕ → Type} {f : seq_diagram A}
|
||
{f' : seq_diagram A'} (τ : Πn, A' n → A n)
|
||
(p : Π⦃n⦄, τ (n+1) ∘ @f' n ~ @f n ∘ @τ n) {n : ℕ} (a : A n) :
|
||
fiber (seq_colim_functor τ p) (ι f a) ≃ seq_colim (seq_diagram_fiber τ p a) :=
|
||
begin
|
||
refine _ ⬝e fiber_pr1 (seq_colim_over (seq_diagram_over_fiber τ p)) (ι f a),
|
||
apply fiber_equiv_of_triangle (domain_seq_colim_functor τ p)⁻¹ᵉ,
|
||
refine _ ⬝hty λx, (colim_sigma_triangle _ _)⁻¹,
|
||
apply homotopy_inv_of_homotopy_pre (seq_colim_equiv _ _)
|
||
(seq_colim_functor _ _) (seq_colim_functor _ _),
|
||
refine (λx, !seq_colim_functor_compose⁻¹) ⬝hty _,
|
||
refine seq_colim_functor_homotopy _ _,
|
||
intro n x, exact point_eq x.2,
|
||
intro n x, induction x with x y, induction y with y q, induction q,
|
||
apply square_of_eq, refine !idp_con⁻¹
|
||
end
|
||
|
||
definition fiber_seq_colim_functor0 {A A' : ℕ → Type} {f : seq_diagram A}
|
||
{f' : seq_diagram A'} (τ : Πn, A' n → A n)
|
||
(p : Π⦃n⦄, τ (n+1) ∘ @f' n ~ @f n ∘ @τ n) (a : A 0) :
|
||
fiber (seq_colim_functor τ p) (ι f a) ≃ seq_colim (seq_diagram_fiber0 τ p a) :=
|
||
fiber_seq_colim_functor τ p a ⬝e
|
||
seq_colim_equiv
|
||
(λn, equiv_apd011 (λx y, fiber (τ x) y) (rep_pathover_rep0 f a))
|
||
(λn x, sorry)
|
||
-- maybe use fn_tro_eq_tro_fn2
|
||
|
||
variables {f f'}
|
||
definition fiber_inclusion (x : seq_colim f) :
|
||
fiber (ι' f 0) x ≃ fiber (seq_colim_functor (rep0 f) (λn a, idp)) x :=
|
||
fiber_equiv_of_triangle (seq_colim_constant_seq (A 0))⁻¹ᵉ homotopy.rfl
|
||
|
||
theorem is_trunc_fun_seq_colim_functor (k : ℕ₋₂) (H : Πn, is_trunc_fun k (@τ n)) :
|
||
is_trunc_fun k (seq_colim_functor τ p) :=
|
||
begin
|
||
intro x, induction x using seq_colim.rec_prop,
|
||
exact is_trunc_equiv_closed_rev k (fiber_seq_colim_functor τ p a) _
|
||
end
|
||
|
||
open is_conn
|
||
theorem is_conn_fun_seq_colim_functor (k : ℕ₋₂) (H : Πn, is_conn_fun k (@τ n)) :
|
||
is_conn_fun k (seq_colim_functor τ p) :=
|
||
begin
|
||
intro x, induction x using seq_colim.rec_prop,
|
||
exact is_conn_equiv_closed_rev k (fiber_seq_colim_functor τ p a) _
|
||
end
|
||
|
||
variables (f f')
|
||
theorem is_trunc_fun_inclusion (k : ℕ₋₂) (H : Πn, is_trunc_fun k (@f n)) :
|
||
is_trunc_fun k (ι' f 0) :=
|
||
begin
|
||
intro x,
|
||
apply is_trunc_equiv_closed_rev k (fiber_inclusion x),
|
||
apply is_trunc_fun_seq_colim_functor,
|
||
intro n, apply is_trunc_fun_lrep, exact H
|
||
end
|
||
|
||
theorem is_conn_fun_inclusion (k : ℕ₋₂) (H : Πn, is_conn_fun k (@f n)) :
|
||
is_conn_fun k (ι' f 0) :=
|
||
begin
|
||
intro x,
|
||
apply is_conn_equiv_closed_rev k (fiber_inclusion x),
|
||
apply is_conn_fun_seq_colim_functor,
|
||
intro n, apply is_conn_fun_lrep, exact H
|
||
end
|
||
|
||
/- the sequential colimit of standard finite types is ℕ -/
|
||
open fin
|
||
definition nat_of_seq_colim_fin [unfold 1] (x : seq_colim seq_diagram_fin) : ℕ :=
|
||
begin
|
||
induction x with n x n x,
|
||
{ exact x },
|
||
{ reflexivity }
|
||
end
|
||
|
||
definition seq_colim_fin_of_nat (n : ℕ) : seq_colim seq_diagram_fin :=
|
||
ι' _ (n+1) (fin.mk n (self_lt_succ n))
|
||
|
||
definition lrep_seq_diagram_fin {n : ℕ} (x : fin n) :
|
||
lrep seq_diagram_fin (is_lt x) (fin.mk x (self_lt_succ x)) = x :=
|
||
begin
|
||
induction x with k H, esimp, induction H with n H p,
|
||
reflexivity,
|
||
exact ap (@lift_succ _) p
|
||
end
|
||
|
||
definition lrep_seq_diagram_fin_lift_succ {n : ℕ} (x : fin n) :
|
||
lrep_seq_diagram_fin (lift_succ x) = ap (@lift_succ _) (lrep_seq_diagram_fin x) :=
|
||
begin
|
||
induction x with k H, reflexivity
|
||
end
|
||
|
||
definition seq_colim_fin_equiv [constructor] : seq_colim seq_diagram_fin ≃ ℕ :=
|
||
equiv.MK nat_of_seq_colim_fin seq_colim_fin_of_nat
|
||
abstract begin
|
||
intro n, reflexivity
|
||
end end
|
||
abstract begin
|
||
intro x, induction x with n x n x,
|
||
{ esimp, refine (lrep_glue _ (is_lt x) _)⁻¹ ⬝ ap (ι _) (lrep_seq_diagram_fin x), },
|
||
{ apply eq_pathover_id_right,
|
||
refine ap_compose seq_colim_fin_of_nat _ _ ⬝ ap02 _ !elim_glue ⬝ph _,
|
||
esimp, refine (square_of_eq !con_idp)⁻¹ʰ ⬝h _,
|
||
refine _ ⬝pv natural_square_tr (@glue _ (seq_diagram_fin) n) (lrep_seq_diagram_fin x),
|
||
refine ap02 _ !lrep_seq_diagram_fin_lift_succ ⬝ !ap_compose⁻¹ }
|
||
end end
|
||
|
||
/- the sequential colimit of embeddings is an embedding -/
|
||
|
||
definition seq_colim_eq_equiv0'_inv_refl (a₀ : A 0) :
|
||
(seq_colim_eq_equiv0' f a₀ a₀)⁻¹ᵉ (ι' (id_seq_diagram f 0 a₀ a₀) 0 proof (refl a₀) qed) = refl (ι f a₀) :=
|
||
begin
|
||
apply inv_eq_of_eq,
|
||
reflexivity,
|
||
end
|
||
|
||
definition is_embedding_ι (H : Πn, is_embedding (@f n)) : is_embedding (ι' f 0) :=
|
||
begin
|
||
intro x y, fapply is_equiv_of_equiv_of_homotopy,
|
||
{ symmetry, refine seq_colim_eq_equiv0' f x y ⬝e _,
|
||
apply equiv_of_is_equiseq, intro n, apply H },
|
||
{ intro p, induction p, apply seq_colim_eq_equiv0'_inv_refl }
|
||
end
|
||
|
||
end seq_colim
|