|
| 1 | +-- Copyright (c) 2018 Reid Barton. All rights reserved. |
| 2 | +-- Released under Apache 2.0 license as described in the file LICENSE. |
| 3 | +-- Authors: Reid Barton, Scott Morrison |
| 4 | + |
| 5 | +import category_theory.isomorphism |
| 6 | +import category_theory.functor_category |
| 7 | + |
| 8 | +universes u v u' v' |
| 9 | + |
| 10 | +namespace category_theory |
| 11 | + |
| 12 | +variables {C : Type u} [𝒞 : category.{u v} C] |
| 13 | +include 𝒞 |
| 14 | + |
| 15 | +def eq_to_hom {X Y : C} (p : X = Y) : X ⟶ Y := by rw p; exact 𝟙 _ |
| 16 | + |
| 17 | +@[simp] lemma eq_to_hom_refl (X : C) (p : X = X) : eq_to_hom p = 𝟙 X := rfl |
| 18 | +@[simp] lemma eq_to_hom_trans {X Y Z : C} (p : X = Y) (q : Y = Z) : |
| 19 | + eq_to_hom p ≫ eq_to_hom q = eq_to_hom (p.trans q) := |
| 20 | +by cases p; cases q; simp |
| 21 | +@[simp] lemma eq_to_hom_trans_assoc {X Y Z W : C} (p : X = Y) (q : Y = Z) (f : Z ⟶ W) : |
| 22 | + eq_to_hom p ≫ (eq_to_hom q ≫ f) = eq_to_hom (p.trans q) ≫ f := |
| 23 | +by cases p; cases q; simp |
| 24 | + |
| 25 | +def eq_to_iso {X Y : C} (p : X = Y) : X ≅ Y := |
| 26 | +⟨eq_to_hom p, eq_to_hom p.symm, by simp, by simp⟩ |
| 27 | + |
| 28 | +@[simp] lemma eq_to_iso.hom {X Y : C} (p : X = Y) : (eq_to_iso p).hom = eq_to_hom p := |
| 29 | +rfl |
| 30 | + |
| 31 | +@[simp] lemma eq_to_iso_refl (X : C) (p : X = X) : eq_to_iso p = iso.refl X := rfl |
| 32 | +@[simp] lemma eq_to_iso_trans {X Y Z : C} (p : X = Y) (q : Y = Z) : |
| 33 | + eq_to_iso p ≪≫ eq_to_iso q = eq_to_iso (p.trans q) := |
| 34 | +by ext; simp |
| 35 | + |
| 36 | +variables {D : Type u'} [𝒟 : category.{u' v'} D] |
| 37 | +include 𝒟 |
| 38 | + |
| 39 | +namespace functor |
| 40 | + |
| 41 | +/-- Proving equality between functors. This isn't an extensionality lemma, |
| 42 | + because usually you don't really want to do this. -/ |
| 43 | +lemma ext {F G : C ⥤ D} (h_obj : ∀ X, F.obj X = G.obj X) |
| 44 | + (h_map : ∀ X Y f, F.map f = eq_to_hom (h_obj X) ≫ G.map f ≫ eq_to_hom (h_obj Y).symm) : |
| 45 | + F = G := |
| 46 | +begin |
| 47 | + cases F with F_obj _ _ _, cases G with G_obj _ _ _, |
| 48 | + have : F_obj = G_obj, by ext X; apply h_obj, |
| 49 | + subst this, |
| 50 | + congr, |
| 51 | + funext X Y f, |
| 52 | + simpa using h_map X Y f |
| 53 | +end |
| 54 | + |
| 55 | +-- Using equalities between functors. |
| 56 | + |
| 57 | +lemma congr_obj {F G : C ⥤ D} (h : F = G) (X) : F.obj X = G.obj X := |
| 58 | +by subst h |
| 59 | + |
| 60 | +lemma congr_hom {F G : C ⥤ D} (h : F = G) {X Y} (f : X ⟶ Y) : |
| 61 | + F.map f = eq_to_hom (congr_obj h X) ≫ G.map f ≫ eq_to_hom (congr_obj h Y).symm := |
| 62 | +by subst h; simp |
| 63 | + |
| 64 | +end functor |
| 65 | + |
| 66 | +@[simp] lemma eq_to_hom_map (F : C ⥤ D) {X Y : C} (p : X = Y) : |
| 67 | + F.map (eq_to_hom p) = eq_to_hom (congr_arg F.obj p) := |
| 68 | +by cases p; simp |
| 69 | + |
| 70 | +@[simp] lemma eq_to_iso_map (F : C ⥤ D) {X Y : C} (p : X = Y) : |
| 71 | + F.on_iso (eq_to_iso p) = eq_to_iso (congr_arg F.obj p) := |
| 72 | +by ext; cases p; simp |
| 73 | + |
| 74 | +@[simp] lemma eq_to_hom_app {F G : C ⥤ D} (h : F = G) (X : C) : |
| 75 | + (eq_to_hom h : F ⟹ G).app X = eq_to_hom (functor.congr_obj h X) := |
| 76 | +by subst h; refl |
| 77 | + |
| 78 | +end category_theory |
0 commit comments