Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 3d4297b

Browse files
rwbartondigama0
authored andcommitted
feat(category_theory/eq_to_hom): equality of functors; more simp lemmas (#526)
1 parent 76a4b15 commit 3d4297b

File tree

3 files changed

+79
-30
lines changed

3 files changed

+79
-30
lines changed

category_theory/eq_to_hom.lean

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
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

category_theory/examples/topological_spaces.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import category_theory.full_subcategory
66
import category_theory.functor_category
77
import category_theory.natural_isomorphism
8+
import category_theory.eq_to_hom
89
import analysis.topology.topological_space
910
import analysis.topology.continuity
1011
import order.galois_connection

category_theory/isomorphism.lean

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -175,36 +175,6 @@ instance mono_of_iso (f : X ⟶ Y) [is_iso f] : mono f :=
175175
rw [←category.assoc, w, ←category.assoc]
176176
end }
177177

178-
def eq_to_hom {X Y : C} (p : X = Y) : X ⟶ Y := by rw p; exact 𝟙 _
179-
180-
@[simp] lemma eq_to_hom_refl (X : C) (p : X = X) : eq_to_hom p = 𝟙 X := rfl
181-
@[simp] lemma eq_to_hom_trans {X Y Z : C} (p : X = Y) (q : Y = Z) :
182-
eq_to_hom p ≫ eq_to_hom q = eq_to_hom (p.trans q) :=
183-
by cases p; cases q; simp
184-
185-
def eq_to_iso {X Y : C} (p : X = Y) : X ≅ Y :=
186-
⟨eq_to_hom p, eq_to_hom p.symm, by simp, by simp⟩
187-
188-
@[simp] lemma eq_to_iso.hom {X Y : C} (p : X = Y) : (eq_to_iso p).hom = eq_to_hom p :=
189-
rfl
190-
191-
@[simp] lemma eq_to_iso_refl (X : C) (p : X = X) : eq_to_iso p = iso.refl X := rfl
192-
@[simp] lemma eq_to_iso_trans {X Y Z : C} (p : X = Y) (q : Y = Z) :
193-
eq_to_iso p ≪≫ eq_to_iso q = eq_to_iso (p.trans q) :=
194-
by ext; simp
195-
196-
namespace functor
197-
198-
universes u₁ v₁ u₂ v₂
199-
200-
variables {D : Type u₂} [𝒟 : category.{u₂ v₂} D]
201-
include 𝒟
202-
203-
@[simp] lemma eq_to_iso (F : C ⥤ D) {X Y : C} (p : X = Y) :
204-
F.on_iso (eq_to_iso p) = eq_to_iso (congr_arg F.obj p) :=
205-
by ext; cases p; simp
206-
end functor
207-
208178
def Aut (X : C) := X ≅ X
209179

210180
attribute [extensionality Aut] iso.ext

0 commit comments

Comments
 (0)