|
| 1 | +/- |
| 2 | +Copyright (c) 2022 Markus Himmel. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Markus Himmel |
| 5 | +-/ |
| 6 | +import category_theory.limits.opposites |
| 7 | +import category_theory.limits.preserves.finite |
| 8 | + |
| 9 | +/-! |
| 10 | +# Limit preservation properties of `functor.op` and related constructions |
| 11 | +
|
| 12 | +We formulate conditions about `F` which imply that `F.op`, `F.unop`, `F.left_op` and `F.right_op` |
| 13 | +preserve certain (co)limits. |
| 14 | +
|
| 15 | +## Future work |
| 16 | +
|
| 17 | +* Dually, it is possible to formulate conditions about `F.op` ec. for `F` to preserve certain |
| 18 | +(co)limits. |
| 19 | +
|
| 20 | +-/ |
| 21 | + |
| 22 | +universes w w' v₁ v₂ u₁ u₂ |
| 23 | + |
| 24 | +noncomputable theory |
| 25 | + |
| 26 | +open category_theory |
| 27 | + |
| 28 | +namespace category_theory.limits |
| 29 | + |
| 30 | +section |
| 31 | +variables {C : Type u₁} [category.{v₁} C] {D : Type u₂} [category.{v₂} D] |
| 32 | +variables {J : Type w} [category.{w'} J] |
| 33 | + |
| 34 | +/-- If `F : C ⥤ D` preserves colimits of `K.left_op : Jᵒᵖ ⥤ C`, then `F.op : Cᵒᵖ ⥤ Dᵒᵖ` preserves |
| 35 | + limits of `K : J ⥤ Cᵒᵖ`. -/ |
| 36 | +def preserves_limit_op (K : J ⥤ Cᵒᵖ) (F : C ⥤ D) [preserves_colimit K.left_op F] : |
| 37 | + preserves_limit K F.op := |
| 38 | +{ preserves := λ c hc, is_limit_cone_right_op_of_cocone _ |
| 39 | + (is_colimit_of_preserves F (is_colimit_cocone_left_op_of_cone _ hc)) } |
| 40 | + |
| 41 | +/-- If `F : C ⥤ Dᵒᵖ` preserves colimits of `K.left_op : Jᵒᵖ ⥤ C`, then `F.left_op : Cᵒᵖ ⥤ D` |
| 42 | + preserves limits of `K : J ⥤ Cᵒᵖ`. -/ |
| 43 | +def preserves_limit_left_op (K : J ⥤ Cᵒᵖ) (F : C ⥤ Dᵒᵖ) [preserves_colimit K.left_op F] : |
| 44 | + preserves_limit K F.left_op := |
| 45 | +{ preserves := λ c hc, is_limit_cone_unop_of_cocone _ |
| 46 | + (is_colimit_of_preserves F (is_colimit_cocone_left_op_of_cone _ hc)) } |
| 47 | + |
| 48 | +/-- If `F : Cᵒᵖ ⥤ D` preserves colimits of `K.op : Jᵒᵖ ⥤ Cᵒᵖ`, then `F.right_op : C ⥤ Dᵒᵖ` preserves |
| 49 | + limits of `K : J ⥤ C`. -/ |
| 50 | +def preserves_limit_right_op (K : J ⥤ C) (F : Cᵒᵖ ⥤ D) [preserves_colimit K.op F] : |
| 51 | + preserves_limit K F.right_op := |
| 52 | +{ preserves := λ c hc, is_limit_cone_right_op_of_cocone _ |
| 53 | + (is_colimit_of_preserves F (is_colimit_cone_op _ hc)) } |
| 54 | + |
| 55 | +/-- If `F : Cᵒᵖ ⥤ Dᵒᵖ` preserves colimits of `K.op : Jᵒᵖ ⥤ Cᵒᵖ`, then `F.unop : C ⥤ D` preserves |
| 56 | + limits of `K : J ⥤ C`. -/ |
| 57 | +def preserves_limit_unop (K : J ⥤ C) (F : Cᵒᵖ ⥤ Dᵒᵖ) [preserves_colimit K.op F] : |
| 58 | + preserves_limit K F.unop := |
| 59 | +{ preserves := λ c hc, is_limit_cone_unop_of_cocone _ |
| 60 | + (is_colimit_of_preserves F (is_colimit_cone_op _ hc)) } |
| 61 | + |
| 62 | +/-- If `F : C ⥤ D` preserves limits of `K.left_op : Jᵒᵖ ⥤ C`, then `F.op : Cᵒᵖ ⥤ Dᵒᵖ` preserves |
| 63 | + colimits of `K : J ⥤ Cᵒᵖ`. -/ |
| 64 | +def preserves_colimit_op (K : J ⥤ Cᵒᵖ) (F : C ⥤ D) [preserves_limit K.left_op F] : |
| 65 | + preserves_colimit K F.op := |
| 66 | +{ preserves := λ c hc, is_colimit_cocone_right_op_of_cone _ |
| 67 | + (is_limit_of_preserves F (is_limit_cone_left_op_of_cocone _ hc)) } |
| 68 | + |
| 69 | +/-- If `F : C ⥤ Dᵒᵖ` preserves limits of `K.left_op : Jᵒᵖ ⥤ C`, then `F.left_op : Cᵒᵖ ⥤ D` preserves |
| 70 | + colimits of `K : J ⥤ Cᵒᵖ`. -/ |
| 71 | +def preserves_colimit_left_op (K : J ⥤ Cᵒᵖ) (F : C ⥤ Dᵒᵖ) [preserves_limit K.left_op F] : |
| 72 | + preserves_colimit K F.left_op := |
| 73 | +{ preserves := λ c hc, is_colimit_cocone_unop_of_cone _ |
| 74 | + (is_limit_of_preserves F (is_limit_cone_left_op_of_cocone _ hc)) } |
| 75 | + |
| 76 | +/-- If `F : Cᵒᵖ ⥤ D` preserves limits of `K.op : Jᵒᵖ ⥤ Cᵒᵖ`, then `F.right_op : C ⥤ Dᵒᵖ` preserves |
| 77 | + colimits of `K : J ⥤ C`. -/ |
| 78 | +def preserves_colimit_right_op (K : J ⥤ C) (F : Cᵒᵖ ⥤ D) [preserves_limit K.op F] : |
| 79 | + preserves_colimit K F.right_op := |
| 80 | +{ preserves := λ c hc, is_colimit_cocone_right_op_of_cone _ |
| 81 | + (is_limit_of_preserves F (is_limit_cocone_op _ hc)) } |
| 82 | + |
| 83 | +/-- If `F : Cᵒᵖ ⥤ Dᵒᵖ` preserves limits of `K.op : Jᵒᵖ ⥤ Cᵒᵖ`, then `F.unop : C ⥤ D` preserves |
| 84 | + colimits of `K : J ⥤ C`. -/ |
| 85 | +def preserves_colimit_unop (K : J ⥤ C) (F : Cᵒᵖ ⥤ Dᵒᵖ) [preserves_limit K.op F] : |
| 86 | + preserves_colimit K F.unop := |
| 87 | +{ preserves := λ c hc, is_colimit_cocone_unop_of_cone _ |
| 88 | + (is_limit_of_preserves F (is_limit_cocone_op _ hc)) } |
| 89 | + |
| 90 | +section |
| 91 | +variables (J) |
| 92 | + |
| 93 | +/-- If `F : C ⥤ D` preserves colimits of shape `Jᵒᵖ`, then `F.op : Cᵒᵖ ⥤ Dᵒᵖ` preserves limits of |
| 94 | + shape `J`. -/ |
| 95 | +def preserves_limits_of_shape_op (F : C ⥤ D) [preserves_colimits_of_shape Jᵒᵖ F] : |
| 96 | + preserves_limits_of_shape J F.op := |
| 97 | +{ preserves_limit := λ K, preserves_limit_op K F } |
| 98 | + |
| 99 | +/-- If `F : C ⥤ Dᵒᵖ` preserves colimits of shape `Jᵒᵖ`, then `F.left_op : Cᵒᵖ ⥤ D` preserves limits |
| 100 | + of shape `J`. -/ |
| 101 | +def preserves_limits_of_shape_left_op (F : C ⥤ Dᵒᵖ) [preserves_colimits_of_shape Jᵒᵖ F] : |
| 102 | + preserves_limits_of_shape J F.left_op := |
| 103 | +{ preserves_limit := λ K, preserves_limit_left_op K F } |
| 104 | + |
| 105 | +/-- If `F : Cᵒᵖ ⥤ D` preserves colimits of shape `Jᵒᵖ`, then `F.right_op : C ⥤ Dᵒᵖ` preserves limits |
| 106 | + of shape `J`. -/ |
| 107 | +def preserves_limits_of_shape_right_op (F : Cᵒᵖ ⥤ D) [preserves_colimits_of_shape Jᵒᵖ F] : |
| 108 | + preserves_limits_of_shape J F.right_op := |
| 109 | +{ preserves_limit := λ K, preserves_limit_right_op K F } |
| 110 | + |
| 111 | +/-- If `F : Cᵒᵖ ⥤ Dᵒᵖ` preserves colimits of shape `Jᵒᵖ`, then `F.unop : C ⥤ D` preserves limits of |
| 112 | + shape `J`. -/ |
| 113 | +def preserves_limits_of_shape_unop (F : Cᵒᵖ ⥤ Dᵒᵖ) [preserves_colimits_of_shape Jᵒᵖ F] : |
| 114 | + preserves_limits_of_shape J F.unop := |
| 115 | +{ preserves_limit := λ K, preserves_limit_unop K F } |
| 116 | + |
| 117 | +/-- If `F : C ⥤ D` preserves limits of shape `Jᵒᵖ`, then `F.op : Cᵒᵖ ⥤ Dᵒᵖ` preserves colimits of |
| 118 | + shape `J`. -/ |
| 119 | +def preserves_colimits_of_shape_op (F : C ⥤ D) [preserves_limits_of_shape Jᵒᵖ F] : |
| 120 | + preserves_colimits_of_shape J F.op := |
| 121 | +{ preserves_colimit := λ K, preserves_colimit_op K F } |
| 122 | + |
| 123 | +/-- If `F : C ⥤ Dᵒᵖ` preserves limits of shape `Jᵒᵖ`, then `F.left_op : Cᵒᵖ ⥤ D` preserves colimits |
| 124 | + of shape `J`. -/ |
| 125 | +def preserves_colimits_of_shape_left_op (F : C ⥤ Dᵒᵖ) [preserves_limits_of_shape Jᵒᵖ F] : |
| 126 | + preserves_colimits_of_shape J F.left_op := |
| 127 | +{ preserves_colimit := λ K, preserves_colimit_left_op K F } |
| 128 | + |
| 129 | +/-- If `F : Cᵒᵖ ⥤ D` preserves limits of shape `Jᵒᵖ`, then `F.right_op : C ⥤ Dᵒᵖ` preserves colimits |
| 130 | + of shape `J`. -/ |
| 131 | +def preserves_colimits_of_shape_right_op (F : Cᵒᵖ ⥤ D) [preserves_limits_of_shape Jᵒᵖ F] : |
| 132 | + preserves_colimits_of_shape J F.right_op := |
| 133 | +{ preserves_colimit := λ K, preserves_colimit_right_op K F } |
| 134 | + |
| 135 | +/-- If `F : Cᵒᵖ ⥤ Dᵒᵖ` preserves limits of shape `Jᵒᵖ`, then `F.unop : C ⥤ D` preserves colimits |
| 136 | + of shape `J`. -/ |
| 137 | +def preserves_colimits_of_shape_unop (F : Cᵒᵖ ⥤ Dᵒᵖ) [preserves_limits_of_shape Jᵒᵖ F] : |
| 138 | + preserves_colimits_of_shape J F.unop := |
| 139 | +{ preserves_colimit := λ K, preserves_colimit_unop K F } |
| 140 | + |
| 141 | +end |
| 142 | + |
| 143 | +/-- If `F : C ⥤ D` preserves colimits, then `F.op : Cᵒᵖ ⥤ Dᵒᵖ` preserves limits. -/ |
| 144 | +def preserves_limits_op (F : C ⥤ D) [preserves_colimits F] : preserves_limits F.op := |
| 145 | +{ preserves_limits_of_shape := λ J _, by exactI preserves_limits_of_shape_op J F } |
| 146 | + |
| 147 | +/-- If `F : C ⥤ Dᵒᵖ` preserves colimits, then `F.left_op : Cᵒᵖ ⥤ D` preserves limits. -/ |
| 148 | +def preserves_limits_left_op (F : C ⥤ Dᵒᵖ) [preserves_colimits F] : preserves_limits F.left_op := |
| 149 | +{ preserves_limits_of_shape := λ J _, by exactI preserves_limits_of_shape_left_op J F } |
| 150 | + |
| 151 | +/-- If `F : Cᵒᵖ ⥤ D` preserves colimits, then `F.right_op : C ⥤ Dᵒᵖ` preserves limits. -/ |
| 152 | +def preserves_limits_right_op (F : Cᵒᵖ ⥤ D) [preserves_colimits F] : preserves_limits F.right_op := |
| 153 | +{ preserves_limits_of_shape := λ J _, by exactI preserves_limits_of_shape_right_op J F } |
| 154 | + |
| 155 | +/-- If `F : Cᵒᵖ ⥤ Dᵒᵖ` preserves colimits, then `F.unop : C ⥤ D` preserves limits. -/ |
| 156 | +def preserves_limits_unop (F : Cᵒᵖ ⥤ Dᵒᵖ) [preserves_colimits F] : preserves_limits F.unop := |
| 157 | +{ preserves_limits_of_shape := λ J _, by exactI preserves_limits_of_shape_unop J F } |
| 158 | + |
| 159 | +/-- If `F : C ⥤ D` preserves limits, then `F.op : Cᵒᵖ ⥤ Dᵒᵖ` preserves colimits. -/ |
| 160 | +def perserves_colimits_op (F : C ⥤ D) [preserves_limits F] : preserves_colimits F.op := |
| 161 | +{ preserves_colimits_of_shape := λ J _, by exactI preserves_colimits_of_shape_op J F } |
| 162 | + |
| 163 | +/-- If `F : C ⥤ Dᵒᵖ` preserves limits, then `F.left_op : Cᵒᵖ ⥤ D` preserves colimits. -/ |
| 164 | +def preserves_colimits_left_op (F : C ⥤ Dᵒᵖ) [preserves_limits F] : preserves_colimits F.left_op := |
| 165 | +{ preserves_colimits_of_shape := λ J _, by exactI preserves_colimits_of_shape_left_op J F } |
| 166 | + |
| 167 | +/-- If `F : Cᵒᵖ ⥤ D` preserves limits, then `F.right_op : C ⥤ Dᵒᵖ` preserves colimits. -/ |
| 168 | +def preserves_colimits_right_op (F : Cᵒᵖ ⥤ D) [preserves_limits F] : |
| 169 | + preserves_colimits F.right_op := |
| 170 | +{ preserves_colimits_of_shape := λ J _, by exactI preserves_colimits_of_shape_right_op J F } |
| 171 | + |
| 172 | +/-- If `F : Cᵒᵖ ⥤ Dᵒᵖ` preserves limits, then `F.unop : C ⥤ D` preserves colimits. -/ |
| 173 | +def preserves_colimits_unop (F : Cᵒᵖ ⥤ Dᵒᵖ) [preserves_limits F] : preserves_colimits F.unop := |
| 174 | +{ preserves_colimits_of_shape := λ J _, by exactI preserves_colimits_of_shape_unop J F } |
| 175 | + |
| 176 | +end |
| 177 | + |
| 178 | +section |
| 179 | +-- Preservation of finite (colimits) is only defined when the morphisms of C and D live in the same |
| 180 | +-- universe. |
| 181 | +variables {C : Type u₁} [category.{v₁} C] {D : Type u₂} [category.{v₁} D] |
| 182 | + |
| 183 | +/-- If `F : C ⥤ D` preserves finite colimits, then `F.op : Cᵒᵖ ⥤ Dᵒᵖ` preserves finite |
| 184 | + limits. -/ |
| 185 | +def preserves_finite_limits_op (F : C ⥤ D) [preserves_finite_colimits F] : |
| 186 | + preserves_finite_limits F.op := |
| 187 | +{ preserves_finite_limits := λ J _ _, by exactI preserves_limits_of_shape_op J F } |
| 188 | + |
| 189 | +/-- If `F : C ⥤ Dᵒᵖ` preserves finite colimits, then `F.left_op : Cᵒᵖ ⥤ D` preserves finite |
| 190 | + limits. -/ |
| 191 | +def preserves_finite_limits_left_op (F : C ⥤ Dᵒᵖ) [preserves_finite_colimits F] : |
| 192 | + preserves_finite_limits F.left_op := |
| 193 | +{ preserves_finite_limits := λ J _ _, by exactI preserves_limits_of_shape_left_op J F } |
| 194 | + |
| 195 | +/-- If `F : Cᵒᵖ ⥤ D` preserves finite colimits, then `F.right_op : C ⥤ Dᵒᵖ` preserves finite |
| 196 | + limits. -/ |
| 197 | +def preserves_finite_limits_right_op (F : Cᵒᵖ ⥤ D) [preserves_finite_colimits F] : |
| 198 | + preserves_finite_limits F.right_op := |
| 199 | +{ preserves_finite_limits := λ J _ _, by exactI preserves_limits_of_shape_right_op J F } |
| 200 | + |
| 201 | +/-- If `F : Cᵒᵖ ⥤ Dᵒᵖ` preserves finite colimits, then `F.unop : C ⥤ D` preserves finite |
| 202 | + limits. -/ |
| 203 | +def preserves_finite_limits_unop (F : Cᵒᵖ ⥤ Dᵒᵖ) [preserves_finite_colimits F] : |
| 204 | + preserves_finite_limits F.unop := |
| 205 | +{ preserves_finite_limits := λ J _ _, by exactI preserves_limits_of_shape_unop J F } |
| 206 | + |
| 207 | +/-- If `F : C ⥤ D` preserves finite limits, then `F.op : Cᵒᵖ ⥤ Dᵒᵖ` preserves finite |
| 208 | + colimits. -/ |
| 209 | +def preserves_finite_colimits_op (F : C ⥤ D) [preserves_finite_limits F] : |
| 210 | + preserves_finite_colimits F.op := |
| 211 | +{ preserves_finite_colimits := λ J _ _, by exactI preserves_colimits_of_shape_op J F } |
| 212 | + |
| 213 | +/-- If `F : C ⥤ Dᵒᵖ` preserves finite limits, then `F.left_op : Cᵒᵖ ⥤ D` preserves finite |
| 214 | + colimits. -/ |
| 215 | +def preserves_finite_colimits_left_op (F : C ⥤ Dᵒᵖ) [preserves_finite_limits F] : |
| 216 | + preserves_finite_colimits F.left_op := |
| 217 | +{ preserves_finite_colimits := λ J _ _, by exactI preserves_colimits_of_shape_left_op J F } |
| 218 | + |
| 219 | +/-- If `F : Cᵒᵖ ⥤ D` preserves finite limits, then `F.right_op : C ⥤ Dᵒᵖ` preserves finite |
| 220 | + colimits. -/ |
| 221 | +def preserves_finite_colimits_right_op (F : Cᵒᵖ ⥤ D) [preserves_finite_limits F] : |
| 222 | + preserves_finite_colimits F.right_op := |
| 223 | +{ preserves_finite_colimits := λ J _ _, by exactI preserves_colimits_of_shape_right_op J F } |
| 224 | + |
| 225 | +/-- If `F : Cᵒᵖ ⥤ Dᵒᵖ` preserves finite limits, then `F.unop : C ⥤ D` preserves finite |
| 226 | + colimits. -/ |
| 227 | +def preserves_finite_colimits_unop (F : Cᵒᵖ ⥤ Dᵒᵖ) [preserves_finite_limits F] : |
| 228 | + preserves_finite_colimits F.unop := |
| 229 | +{ preserves_finite_colimits := λ J _ _, by exactI preserves_colimits_of_shape_unop J F } |
| 230 | + |
| 231 | +end |
| 232 | + |
| 233 | +end category_theory.limits |
0 commit comments