2016-10-20 20:23:55 +00:00
/-
Copyright (c) 2016 Egbert Rijke. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Egbert Rijke
Exact couple, derived couples, and so on
-/
2016-11-03 20:42:12 +00:00
import algebra.group_theory hit.set_quotient types.sigma types.list types.sum .quotient_group .subgroup
2016-10-20 20:23:55 +00:00
2016-11-03 20:42:12 +00:00
open eq algebra is_trunc set_quotient relation sigma sigma.ops prod prod.ops sum list trunc function group trunc
2017-02-17 03:26:06 +00:00
equiv is_equiv
2016-10-20 20:23:55 +00:00
2016-11-24 04:54:57 +00:00
structure is_exact {A B C : AbGroup} (f : A →g B) (g : B →g C) :=
2016-10-20 20:23:55 +00:00
( im_in_ker : Π(a:A), g (f a) = 1)
2017-01-26 22:44:37 +00:00
( ker_in_im : Π(b:B), (g b = 1) → image_subgroup f b)
2016-11-03 20:42:12 +00:00
2017-01-26 21:55:59 +00:00
structure SES (A B C : AbGroup) :=
( f : A →g B)
( g : B →g C)
( Hf : is_embedding f)
( Hg : is_surjective g)
( ex : is_exact f g)
2017-02-17 03:26:06 +00:00
definition SES_of_inclusion {A B : AbGroup} (f : A →g B) (Hf : is_embedding f) : SES A B (quotient_ab_group (image_subgroup f)) :=
begin
have Hg : is_surjective (ab_qg_map (image_subgroup f)),
from is_surjective_ab_qg_map (image_subgroup f),
fapply SES.mk,
exact f,
exact ab_qg_map (image_subgroup f),
exact Hf,
exact Hg,
fapply is_exact.mk,
intro a,
fapply qg_map_eq_one, fapply tr, fapply fiber.mk, exact a, reflexivity,
intro b, intro p,
fapply rel_of_ab_qg_map_eq_one, assumption
end
definition SES_of_surjective_map {B C : AbGroup} (g : B →g C) (Hg : is_surjective g) : SES (ab_kernel g) B C :=
begin
fapply SES.mk,
exact ab_kernel_incl g,
exact g,
exact is_embedding_ab_kernel_incl g,
exact Hg,
fapply is_exact.mk,
intro a, induction a with a p, exact p,
intro b p, fapply tr, fapply fiber.mk, fapply sigma.mk, exact b, exact p, reflexivity,
end
2017-01-26 21:55:59 +00:00
structure hom_SES {A B C A' B' C' : AbGroup} (ses : SES A B C) (ses' : SES A' B' C') :=
( hA : A →g A')
( hB : B →g B')
( hC : C →g C')
( htpy1 : hB ∘g (SES.f ses) ~ (SES.f ses') ∘g hA)
( htpy2 : hC ∘g (SES.g ses) ~ (SES.g ses') ∘g hB)
2017-01-26 22:44:37 +00:00
--definition quotient_SES {A B C : AbGroup} (ses : SES A B C) :
-- quotient_ab_group (image_subgroup (SES.f ses)) ≃g C :=
-- begin
-- fapply ab_group_first_iso_thm B C (SES.g ses),
-- end
2017-01-26 21:55:59 +00:00
2017-02-08 17:26:23 +00:00
-- definition pre_right_extend_SES (to separate the following definition and replace C with B/A)
2017-02-17 03:26:06 +00:00
definition quotient_codomain_SES {A B C : AbGroup} (ses : SES A B C) : quotient_ab_group (kernel_subgroup (SES.g ses)) ≃g C :=
begin
exact (codomain_surjection_is_quotient (SES.g ses) (SES.Hg ses))
end
definition quotient_triangle_SES {A B C : AbGroup} (ses : SES A B C) : (quotient_codomain_SES ses) ∘g (ab_qg_map (kernel_subgroup (SES.g ses))) ~ (SES.g ses) :=
begin
reflexivity
end
section short_exact_sequences
parameters {A B C A' B' C' : AbGroup}
2017-01-26 21:55:59 +00:00
(ses : SES A B C) (ses' : SES A' B' C')
2017-02-17 03:26:06 +00:00
(hA : A →g A') (hB : B →g B') (htpy1 : hB ∘g (SES.f ses) ~ (SES.f ses') ∘g hA)
local abbreviation f := SES.f ses
local abbreviation g := SES.g ses
local abbreviation ex := SES.ex ses
local abbreviation q := ab_qg_map (kernel_subgroup g)
local abbreviation f' := SES.f ses'
local abbreviation g' := SES.g ses'
local abbreviation ex' := SES.ex ses'
local abbreviation q' := ab_qg_map (kernel_subgroup g')
local abbreviation α := quotient_codomain_SES ses
local abbreviation α ' := quotient_codomain_SES ses'
include htpy1
-- We define a group homomorphism B/ker(g) →g B'/ker(g'), keeping in mind that ker(g)=A and ker(g')=A'.
definition quotient_extend_SES : quotient_ab_group (kernel_subgroup g) →g quotient_ab_group (kernel_subgroup g') :=
2017-01-26 21:55:59 +00:00
begin
2017-02-17 03:26:06 +00:00
fapply ab_group_quotient_homomorphism B B' (kernel_subgroup g) (kernel_subgroup g') hB,
2017-01-26 22:44:37 +00:00
intro b,
intro K,
2017-02-17 03:26:06 +00:00
have k : trunctype.carrier (image_subgroup f b), from is_exact.ker_in_im ex b K,
2017-01-26 22:44:37 +00:00
induction k, induction a with a p,
rewrite [p⁻¹],
rewrite [htpy1 a],
2017-02-17 03:26:06 +00:00
fapply is_exact.im_in_ker ex' (hA a)
end
local abbreviation k := quotient_extend_SES
definition quotient_extend_SES_square : k ∘g (ab_qg_map (kernel_subgroup g)) ~ (ab_qg_map (kernel_subgroup g')) ∘g hB :=
begin
fapply quotient_group_compute
2017-01-26 21:55:59 +00:00
end
2017-02-17 03:26:06 +00:00
definition right_extend_SES : C →g C' :=
α ' ∘g k ∘g α⁻¹ᵍ
local abbreviation hC := right_extend_SES
definition right_extend_hom_SES : hom_SES ses ses' :=
2017-02-08 17:26:23 +00:00
begin
fapply hom_SES.mk,
exact hA,
exact hB,
2017-02-17 03:26:06 +00:00
exact hC,
2017-02-08 17:26:23 +00:00
exact htpy1,
2017-02-17 03:26:06 +00:00
exact calc
hC ∘g g ~ hC ∘g α ∘g q : by reflexivity
... ~ α ' ∘g k ∘g α⁻¹ᵍ ∘g α ∘g q : by reflexivity
... ~ α ' ∘g k ∘g q : by exact hwhisker_left (α ' ∘g k) (hwhisker_right q (left_inv α ))
... ~ α ' ∘g q' ∘g hB : by exact hwhisker_left α ' (quotient_extend_SES_square)
... ~ g' ∘g hB : by reflexivity
2017-02-08 17:26:23 +00:00
end
2017-02-17 03:26:06 +00:00
end short_exact_sequences
2016-11-24 04:54:57 +00:00
definition is_differential {B : AbGroup} (d : B →g B) := Π(b:B), d (d b) = 1
2016-10-20 20:23:55 +00:00
2016-11-24 04:54:57 +00:00
definition image_subgroup_of_diff {B : AbGroup} (d : B →g B) (H : is_differential d) : subgroup_rel (ab_kernel d) :=
2016-11-03 20:42:12 +00:00
subgroup_rel_of_subgroup (image_subgroup d) (kernel_subgroup d)
begin
2016-11-24 04:54:57 +00:00
intro g p,
2016-11-03 20:42:12 +00:00
induction p with f, induction f with h p,
2016-11-24 04:54:57 +00:00
rewrite [p⁻¹],
2016-11-03 20:42:12 +00:00
esimp,
2016-11-24 04:54:57 +00:00
exact H h
2016-11-03 20:42:12 +00:00
end
2016-10-20 20:23:55 +00:00
2016-11-24 04:54:57 +00:00
definition homology {B : AbGroup} (d : B →g B) (H : is_differential d) : AbGroup :=
@quotient_ab_group (ab_kernel d) (image_subgroup_of_diff d H)
2016-10-20 20:23:55 +00:00
2016-11-24 04:54:57 +00:00
structure exact_couple (A B : AbGroup) : Type :=
2016-10-20 20:23:55 +00:00
( i : A →g A) (j : A →g B) (k : B →g A)
( exact_ij : is_exact i j)
( exact_jk : is_exact j k)
( exact_ki : is_exact k i)
2016-11-24 04:54:57 +00:00
definition differential {A B : AbGroup} (EC : exact_couple A B) : B →g B :=
2016-11-10 21:49:09 +00:00
(exact_couple.j EC) ∘g (exact_couple.k EC)
2016-10-20 20:23:55 +00:00
2016-11-24 04:54:57 +00:00
definition differential_is_differential {A B : AbGroup} (EC : exact_couple A B) : is_differential (differential EC) :=
2016-11-03 20:42:12 +00:00
begin
2016-11-24 04:54:57 +00:00
induction EC,
induction exact_jk,
2016-11-03 20:42:12 +00:00
intro b,
exact (ap (group_fun j) (im_in_ker (group_fun k b))) ⬝ (respect_one j)
end
2016-10-20 20:23:55 +00:00
2016-11-03 20:42:12 +00:00
section derived_couple
2016-11-24 04:54:57 +00:00
variables {A B : AbGroup} (EC : exact_couple A B)
2016-11-03 20:42:12 +00:00
2016-11-24 04:54:57 +00:00
definition derived_couple_A : AbGroup :=
ab_subgroup (image_subgroup (exact_couple.i EC))
2016-11-03 20:42:12 +00:00
2016-11-24 04:54:57 +00:00
definition derived_couple_B : AbGroup :=
2016-11-10 21:49:09 +00:00
homology (differential EC) (differential_is_differential EC)
2016-11-03 20:42:12 +00:00
2016-11-10 21:49:09 +00:00
definition derived_couple_i : derived_couple_A EC →g derived_couple_A EC :=
(image_lift (exact_couple.i EC)) ∘g (image_incl (exact_couple.i EC))
2016-11-03 20:42:12 +00:00
2016-11-10 21:49:09 +00:00
definition derived_couple_j : derived_couple_A EC →g derived_couple_B EC :=
2016-11-03 20:42:12 +00:00
begin
2016-11-10 21:49:09 +00:00
exact sorry,
2016-11-03 20:42:12 +00:00
-- refine (comm_gq_map (comm_kernel (boundary CC)) (image_subgroup_of_bd (boundary CC) (boundary_is_boundary CC))) ∘g _,
end
2016-10-20 20:23:55 +00:00
2016-11-03 20:42:12 +00:00
end derived_couple