@@ -34,7 +34,7 @@ form of D. This is used to set up several algebraic categories like
34
34
35
35
namespace category_theory
36
36
37
- universes v u₁ u₂ -- morphism levels before object levels. See note [category_theory universes].
37
+ universes v v₂ u₁ u₂ -- morphism levels before object levels. See note [category_theory universes].
38
38
39
39
section induced
40
40
@@ -77,7 +77,7 @@ end induced
77
77
section full_subcategory
78
78
/- A full subcategory is the special case of an induced category with F = subtype.val. -/
79
79
80
- variables {C : Type u₂ } [category.{v} C]
80
+ variables {C : Type u₁ } [category.{v} C]
81
81
variables (Z : C → Prop )
82
82
83
83
/--
@@ -105,6 +105,66 @@ induced_category.full subtype.val
105
105
instance full_subcategory.faithful : faithful (full_subcategory_inclusion Z) :=
106
106
induced_category.faithful subtype.val
107
107
108
+ variables {Z} {Z' : C → Prop }
109
+
110
+ /-- An implication of predicates `Z → Z'` induces a functor between full subcategories. -/
111
+ @[simps]
112
+ def full_subcategory.map (h : ∀ ⦃X⦄, Z X → Z' X) : {X // Z X} ⥤ {X // Z' X} :=
113
+ { obj := λ X, ⟨X.1 , h X.2 ⟩,
114
+ map := λ X Y f, f }
115
+
116
+ instance (h : ∀ ⦃X⦄, Z X → Z' X) : full (full_subcategory.map h) :=
117
+ { preimage := λ X Y f, f }
118
+
119
+ instance (h : ∀ ⦃X⦄, Z X → Z' X) : faithful (full_subcategory.map h) := {}
120
+
121
+ @[simp] lemma full_subcategory.map_inclusion (h : ∀ ⦃X⦄, Z X → Z' X) :
122
+ full_subcategory.map h ⋙ full_subcategory_inclusion Z' = full_subcategory_inclusion Z :=
123
+ rfl
124
+
125
+ section lift
126
+ variables {D : Type u₂} [category.{v₂} D] (P Q : D → Prop )
127
+
128
+ /-- A functor which maps objects to objects satisfying a certain property induces a lift through
129
+ the full subcategory of objects satisfying that property. -/
130
+ @[simps]
131
+ def full_subcategory.lift (F : C ⥤ D) (hF : ∀ X, P (F.obj X)) : C ⥤ {X // P X} :=
132
+ { obj := λ X, ⟨F.obj X, hF X⟩,
133
+ map := λ X Y f, F.map f }
134
+
135
+ /-- Composing the lift of a functor through a full subcategory with the inclusion yields the
136
+ original functor. Unfortunately, this is not true by definition, so we only get a natural
137
+ isomorphism, but it is pointwise definitionally true, see
138
+ `full_subcategory.inclusion_obj_lift_obj` and `full_subcategory.inclusion_map_lift_map`. -/
139
+ def full_subcategory.lift_comp_inclusion (F : C ⥤ D) (hF : ∀ X, P (F.obj X)) :
140
+ full_subcategory.lift P F hF ⋙ full_subcategory_inclusion P ≅ F :=
141
+ nat_iso.of_components (λ X, iso.refl _) (by simp)
142
+
143
+ @[simp]
144
+ lemma full_subcategory.inclusion_obj_lift_obj (F : C ⥤ D) (hF : ∀ X, P (F.obj X)) {X : C} :
145
+ (full_subcategory_inclusion P).obj ((full_subcategory.lift P F hF).obj X) = F.obj X :=
146
+ rfl
147
+
148
+ lemma full_subcategory.inclusion_map_lift_map (F : C ⥤ D) (hF : ∀ X, P (F.obj X)) {X Y : C}
149
+ (f : X ⟶ Y) :
150
+ (full_subcategory_inclusion P).map ((full_subcategory.lift P F hF).map f) = F.map f :=
151
+ rfl
152
+
153
+ instance (F : C ⥤ D) (hF : ∀ X, P (F.obj X)) [faithful F] :
154
+ faithful (full_subcategory.lift P F hF) :=
155
+ faithful.of_comp_iso (full_subcategory.lift_comp_inclusion P F hF)
156
+
157
+ instance (F : C ⥤ D) (hF : ∀ X, P (F.obj X)) [full F] : full (full_subcategory.lift P F hF) :=
158
+ full.of_comp_faithful_iso (full_subcategory.lift_comp_inclusion P F hF)
159
+
160
+ @[simp]
161
+ lemma full_subcategory.lift_comp_map (F : C ⥤ D) (hF : ∀ X, P (F.obj X)) (h : ∀ ⦃X⦄, P X → Q X) :
162
+ full_subcategory.lift P F hF ⋙ full_subcategory.map h =
163
+ full_subcategory.lift Q F (λ X, h (hF X)) :=
164
+ rfl
165
+
166
+ end lift
167
+
108
168
end full_subcategory
109
169
110
170
end category_theory
0 commit comments