2015-10-23 05:12:34 +00:00
|
|
|
|
2015-11-16 21:21:21 +00:00
|
|
|
import .equivalence
|
2015-10-23 05:12:34 +00:00
|
|
|
|
2015-11-16 21:21:21 +00:00
|
|
|
open eq functor nat_trans
|
2015-10-23 05:12:34 +00:00
|
|
|
|
|
|
|
namespace category
|
|
|
|
|
2015-11-16 21:21:21 +00:00
|
|
|
variables {C D E : Precategory} (F : C ⇒ D) (G : D ⇒ C) (H : D ≅c E)
|
|
|
|
/-
|
|
|
|
definition adjoint_compose [constructor] (K : F ⊣ G)
|
|
|
|
: H ∘f F ⊣ G ∘f H⁻¹ᴱ :=
|
|
|
|
begin
|
|
|
|
fconstructor,
|
|
|
|
{ fapply change_natural_map,
|
|
|
|
{ exact calc
|
|
|
|
1 ⟹ G ∘f F : to_unit K
|
|
|
|
... ⟹ (G ∘f 1) ∘f F : !id_right_natural_rev ∘nf F
|
|
|
|
... ⟹ (G ∘f (H⁻¹ ∘f H)) ∘f F : (G ∘fn unit H) ∘nf F
|
|
|
|
... ⟹ ((G ∘f H⁻¹) ∘f H) ∘f F : !assoc_natural ∘nf F
|
|
|
|
... ⟹ (G ∘f H⁻¹) ∘f (H ∘f F) : assoc_natural_rev},
|
|
|
|
{ intro c, esimp, exact G (unit H (F c)) ∘ to_unit K c},
|
|
|
|
{ intro c, rewrite [▸*, +id_left]}},
|
|
|
|
{ fapply change_natural_map,
|
|
|
|
{ exact calc
|
|
|
|
(H ∘f F) ∘f (G ∘f H⁻¹)
|
|
|
|
⟹ ((H ∘f F) ∘f G) ∘f H⁻¹ : assoc_natural
|
|
|
|
... ⟹ (H ∘f (F ∘f G)) ∘f H⁻¹ : !assoc_natural_rev ∘nf H⁻¹
|
|
|
|
... ⟹ (H ∘f 1) ∘f H⁻¹ : (H ∘fn to_counit K) ∘nf H⁻¹
|
|
|
|
... ⟹ H ∘f H⁻¹ : !id_right_natural ∘nf H⁻¹
|
|
|
|
... ⟹ 1 : counit H},
|
|
|
|
{ intro e, esimp, exact counit H e ∘ to_fun_hom H (to_counit K (H⁻¹ e))},
|
|
|
|
{ intro c, rewrite [▸*, +id_right, +id_left]}},
|
|
|
|
{ intro c, rewrite [▸*, +respect_comp], refine !assoc ⬝ ap (λx, x ∘ _) !assoc⁻¹ ⬝ _,
|
|
|
|
rewrite [-respect_comp],
|
|
|
|
},
|
|
|
|
{ }
|
|
|
|
end
|
|
|
|
-/
|
2015-10-23 05:12:34 +00:00
|
|
|
end category
|