68
68
end has_top
69
69
70
70
section has_bot
71
- variables [has_zero_morphisms C] [has_zero_object C]
72
- open_locale zero_object
71
+
72
+ variables [has_initial C] [initial_mono_class C]
73
73
74
74
instance {X : C} : has_bot (mono_over X) :=
75
- { bot := mk' (0 : 0 ⟶ X) }
75
+ { bot := mk' (initial.to X) }
76
76
77
- @[simp] lemma bot_left (X : C) : ((⊥ : mono_over X) : C) = 0 := rfl
78
- @[simp] lemma bot_arrow {X : C} : (⊥ : mono_over X).arrow = 0 :=
79
- by ext
77
+ @[simp] lemma bot_left (X : C) : ((⊥ : mono_over X) : C) = ⊥_ C := rfl
78
+ @[simp] lemma bot_arrow {X : C} : (⊥ : mono_over X).arrow = initial.to X := rfl
80
79
81
80
/-- The (unique) morphism from `⊥ : mono_over X` to any other `f : mono_over X`. -/
82
81
def bot_le {X : C} (f : mono_over X) : ⊥ ⟶ f :=
83
- hom_mk 0 (by simp)
82
+ hom_mk (initial.to _) (by simp)
84
83
85
84
/-- `map f` sends `⊥ : mono_over X` to `⊥ : mono_over Y`. -/
86
85
def map_bot (f : X ⟶ Y) [mono f] : (map f).obj ⊥ ≅ ⊥ :=
87
- iso_of_both_ways (hom_mk 0 (by simp)) (hom_mk (𝟙 _) (by simp [id_comp f] ))
86
+ iso_of_both_ways (hom_mk (initial.to _) (by simp)) (hom_mk (𝟙 _) (by simp))
88
87
89
88
end has_bot
90
89
90
+ section zero_order_bot
91
+
92
+ variables [has_zero_object C]
93
+ open_locale zero_object
94
+
95
+ /-- The object underlying `⊥ : subobject B` is (up to isomorphism) the zero object. -/
96
+ def bot_coe_iso_zero {B : C} : ((⊥ : mono_over B) : C) ≅ 0 :=
97
+ initial_is_initial.unique_up_to_iso has_zero_object.zero_is_initial
98
+
99
+ @[simp] lemma bot_arrow_eq_zero [has_zero_morphisms C] {B : C} : (⊥ : mono_over B).arrow = 0 :=
100
+ zero_of_source_iso_zero _ bot_coe_iso_zero
101
+
102
+ end zero_order_bot
103
+
91
104
section inf
92
105
variables [has_pullbacks C]
93
106
245
258
end order_top
246
259
247
260
section order_bot
248
- variables [has_zero_morphisms C] [has_zero_object C]
249
- open_locale zero_object
261
+ variables [has_initial C] [initial_mono_class C]
250
262
251
263
instance order_bot {X : C} : order_bot (subobject X) :=
252
264
{ bot := quotient.mk' ⊥,
@@ -257,21 +269,37 @@ instance order_bot {X : C} : order_bot (subobject X) :=
257
269
end ,
258
270
..subobject.partial_order X }
259
271
260
- lemma bot_eq_zero {B : C} : (⊥ : subobject B) = subobject.mk (0 : 0 ⟶ B) := rfl
272
+ lemma bot_eq_initial_to {B : C} : (⊥ : subobject B) = subobject.mk (initial.to B) := rfl
273
+
274
+ /-- The object underlying `⊥ : subobject B` is (up to isomorphism) the initial object. -/
275
+ def bot_coe_iso_initial {B : C} : ((⊥ : subobject B) : C) ≅ ⊥_ C := underlying_iso _
276
+
277
+ lemma map_bot (f : X ⟶ Y) [mono f] : (map f).obj ⊥ = ⊥ :=
278
+ quotient.sound' ⟨mono_over.map_bot f⟩
279
+
280
+ end order_bot
281
+
282
+ section zero_order_bot
283
+
284
+ variables [has_zero_object C]
285
+ open_locale zero_object
261
286
262
287
/-- The object underlying `⊥ : subobject B` is (up to isomorphism) the zero object. -/
263
- def bot_coe_iso_zero {B : C} : ((⊥ : subobject B) : C) ≅ 0 := underlying_iso _
288
+ def bot_coe_iso_zero {B : C} : ((⊥ : subobject B) : C) ≅ 0 :=
289
+ bot_coe_iso_initial ≪≫ initial_is_initial.unique_up_to_iso has_zero_object.zero_is_initial
290
+
291
+ variables [has_zero_morphisms C]
292
+
293
+ lemma bot_eq_zero {B : C} : (⊥ : subobject B) = subobject.mk (0 : 0 ⟶ B) :=
294
+ mk_eq_mk_of_comm _ _ (initial_is_initial.unique_up_to_iso has_zero_object.zero_is_initial) (by simp)
264
295
265
296
@[simp] lemma bot_arrow {B : C} : (⊥ : subobject B).arrow = 0 :=
266
297
zero_of_source_iso_zero _ bot_coe_iso_zero
267
298
268
- lemma map_bot (f : X ⟶ Y) [mono f] : (map f).obj ⊥ = ⊥ :=
269
- quotient.sound' ⟨mono_over.map_bot f⟩
270
-
271
299
lemma bot_factors_iff_zero {A B : C} (f : A ⟶ B) : (⊥ : subobject B).factors f ↔ f = 0 :=
272
- ⟨by { rintro ⟨h, w ⟩, simp at w, exact w.symm, }, by { rintro rfl, exact ⟨0 , by simp⟩, }⟩
300
+ ⟨by { rintro ⟨h, rfl ⟩, simp }, by { rintro rfl, exact ⟨0 , by simp⟩, }⟩
273
301
274
- end order_bot
302
+ end zero_order_bot
275
303
276
304
section functor
277
305
variable (C)
@@ -442,16 +470,7 @@ lemma sup_factors_of_factors_right {A B : C} {X Y : subobject B} {f : A ⟶ B} (
442
470
(X ⊔ Y).factors f :=
443
471
factors_of_le f le_sup_right P
444
472
445
- /-!
446
- Unfortunately, there are two different ways we may obtain a `semilattice_sup_bot (subobject B)`,
447
- either as here, by assuming `[has_zero_morphisms C] [has_zero_object C]`,
448
- or if `C` is cartesian closed.
449
-
450
- These will be definitionally different, and at the very least we will need two different versions
451
- of `finset_sup_factors`. So far I don't see how to handle this through generalization.
452
- -/
453
- section
454
- variables [has_zero_morphisms C] [has_zero_object C]
473
+ variables [has_initial C] [initial_mono_class C]
455
474
456
475
instance {B : C} : semilattice_sup_bot (subobject B) :=
457
476
{ ..subobject.order_bot,
@@ -472,8 +491,6 @@ begin
472
491
{ exact sup_factors_of_factors_right (ih ⟨j, ⟨m, h⟩⟩), }, },
473
492
end
474
493
475
- end
476
-
477
494
end semilattice_sup
478
495
479
496
section lattice
@@ -483,7 +500,7 @@ instance {B : C} : lattice (subobject B) :=
483
500
{ ..subobject.semilattice_inf_top,
484
501
..subobject.semilattice_sup }
485
502
486
- variables [has_zero_morphisms C] [has_zero_object C]
503
+ variables [has_initial C] [initial_mono_class C]
487
504
488
505
instance {B : C} : bounded_lattice (subobject B) :=
489
506
{ ..subobject.semilattice_inf_top,
@@ -648,7 +665,7 @@ end Sup
648
665
649
666
section complete_lattice
650
667
variables [well_powered C] [has_wide_pullbacks C] [has_images C] [has_coproducts C]
651
- [has_zero_morphisms C] [has_zero_object C]
668
+ [initial_mono_class C]
652
669
653
670
instance {B : C} : complete_lattice (subobject B) :=
654
671
{ ..subobject.semilattice_inf_top,
0 commit comments