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

Commit 952e7ee

Browse files
committed
feat(category_theory/generator): complete well-powered category with small coseparating set has an initial object (#15865)
A step towards the Special Adjoint Functor Theorem.
1 parent ea74dc9 commit 952e7ee

4 files changed

Lines changed: 55 additions & 4 deletions

File tree

src/category_theory/generator.lean

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Markus Himmel
55
-/
66
import category_theory.balanced
7+
import category_theory.limits.essentially_small
78
import category_theory.limits.opposites
89
import category_theory.limits.shapes.zero_morphisms
910
import category_theory.subobject.lattice
@@ -47,8 +48,6 @@ We
4748
4849
* We currently don't have any examples yet.
4950
* We will want typeclasses `has_separator C` and similar.
50-
* To state the Special Adjoint Functor Theorem, we will need to be able to talk about *small*
51-
separating sets.
5251
5352
-/
5453

@@ -261,6 +260,42 @@ begin
261260
simpa using hh j.as.1.1 j.as.1.2 j.as.2 }
262261
end
263262

263+
/-- An ingredient of the proof of the Special Adjoint Functor Theorem: a complete well-powered
264+
category with a small coseparating set has an initial object.
265+
266+
In fact, it follows from the Special Adjoint Functor Theorem that `C` is already cocomplete. -/
267+
lemma has_initial_of_is_cosepatating [well_powered C] [has_limits C] {𝒢 : set C} [small.{v} 𝒢]
268+
(h𝒢 : is_coseparating 𝒢) : has_initial C :=
269+
begin
270+
haveI := has_products_of_shape_of_small C 𝒢,
271+
haveI := λ A, has_products_of_shape_of_small.{v} C (Σ G : 𝒢, A ⟶ (G : C)),
272+
letI := complete_lattice_of_complete_semilattice_Inf (subobject (pi_obj (coe : 𝒢 → C))),
273+
suffices : ∀ A : C, unique (((⊥ : subobject (pi_obj (coe : 𝒢 → C))) : C) ⟶ A),
274+
{ exactI has_initial_of_unique ((⊥ : subobject (pi_obj (coe : 𝒢 → C))) : C) },
275+
refine λ A, ⟨⟨_⟩, λ f, _⟩,
276+
{ let s := pi.lift (λ f : Σ G : 𝒢, A ⟶ (G : C), id (pi.π (coe : 𝒢 → C)) f.1),
277+
let t := pi.lift (@sigma.snd 𝒢 (λ G, A ⟶ (G : C))),
278+
haveI : mono t := (is_coseparating_iff_mono 𝒢).1 h𝒢 A,
279+
exact subobject.of_le_mk _ (pullback.fst : pullback s t ⟶ _) bot_le ≫ pullback.snd },
280+
{ generalize : default = g,
281+
suffices : split_epi (equalizer.ι f g),
282+
{ exactI eq_of_epi_equalizer },
283+
exact ⟨subobject.of_le_mk _ (equalizer.ι f g ≫ subobject.arrow _) bot_le, by { ext, simp }⟩ }
284+
end
285+
286+
/-- An ingredient of the proof of the Special Adjoint Functor Theorem: a cocomplete well-copowered
287+
category with a small separating set has a terminal object.
288+
289+
In fact, it follows from the Special Adjoint Functor Theorem that `C` is already complete. -/
290+
lemma has_terminal_of_is_separating [well_powered Cᵒᵖ] [has_colimits C] {𝒢 : set C} [small.{v} 𝒢]
291+
(h𝒢 : is_separating 𝒢) : has_terminal C :=
292+
begin
293+
haveI : has_limits Cᵒᵖ := has_limits_op_of_has_colimits,
294+
haveI : small.{v} 𝒢.op := small_of_injective (set.op_equiv_self 𝒢).injective,
295+
haveI : has_initial Cᵒᵖ := has_initial_of_is_cosepatating ((is_coseparating_op_iff _).2 h𝒢),
296+
exact has_terminal_of_has_initial_op
297+
end
298+
264299
section well_powered
265300

266301
namespace subobject

src/category_theory/limits/essentially_small.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ lemma has_colimits_of_shape_of_essentially_small [essentially_small.{w₁} J]
3030
[has_colimits_of_size.{w₁ w₁} C] : has_colimits_of_shape J C :=
3131
has_colimits_of_shape_of_equivalence $ equivalence.symm $ equiv_small_model.{w₁} J
3232

33-
lemma has_products_of_shape_of_small (β : Type w) [small.{w} β] [has_products.{w} C] :
33+
lemma has_products_of_shape_of_small (β : Type w) [small.{w} β] [has_products.{w} C] :
3434
has_products_of_shape β C :=
3535
has_limits_of_shape_of_equivalence $ discrete.equivalence $ equiv.symm $ equiv_shrink β
3636

37-
lemma has_coproducts_of_shape_of_small (β : Type w) [small.{w} β] [has_coproducts.{w} C] :
37+
lemma has_coproducts_of_shape_of_small (β : Type w) [small.{w} β] [has_coproducts.{w} C] :
3838
has_coproducts_of_shape β C :=
3939
has_colimits_of_shape_of_equivalence $ discrete.equivalence $ equiv.symm $ equiv_shrink β
4040

src/category_theory/limits/shapes/terminal.lean

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,18 @@ def initial_unop_of_terminal {X : Cᵒᵖ} (t : is_terminal X) : is_initial X.un
311311
{ desc := λ s, (t.from (opposite.op s.X)).unop,
312312
uniq' := λ s m w, quiver.hom.op_inj (t.hom_ext _ _) }
313313

314+
instance has_initial_op_of_has_terminal [has_terminal C] : has_initial Cᵒᵖ :=
315+
(initial_op_of_terminal terminal_is_terminal).has_initial
316+
317+
instance has_terminal_op_of_has_initial [has_initial C] : has_terminal Cᵒᵖ :=
318+
(terminal_op_of_initial initial_is_initial).has_terminal
319+
320+
lemma has_terminal_of_has_initial_op [has_initial Cᵒᵖ] : has_terminal C :=
321+
(terminal_unop_of_initial initial_is_initial).has_terminal
322+
323+
lemma has_initial_of_has_terminal_op [has_terminal Cᵒᵖ] : has_initial C :=
324+
(initial_unop_of_terminal terminal_is_terminal).has_initial
325+
314326
instance {J : Type*} [category J] {C : Type*} [category C] [has_terminal C] :
315327
has_limit ((category_theory.functor.const J).obj (⊤_ C)) :=
316328
has_limit.mk

src/data/set/opposite.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ ext (by simp only [mem_unop, op_mem_op, iff_self, implies_true_iff])
4444
@[simp] lemma unop_op (s : set αᵒᵖ) : s.unop.op = s :=
4545
ext (by simp only [mem_op, unop_mem_unop, iff_self, implies_true_iff])
4646

47+
/-- The members of the opposite of a set are in bijection with the members of the set itself. -/
48+
@[simps] def op_equiv_self (s : set α) : s.op ≃ s :=
49+
⟨λ x, ⟨unop x, x.2⟩, λ x, ⟨op x, x.2⟩, λ x, by simp, λ x, by simp⟩
50+
4751
/-- Taking opposites as an equivalence of powersets. -/
4852
@[simps] def op_equiv : set α ≃ set αᵒᵖ :=
4953
⟨set.op, set.unop, op_unop, unop_op⟩

0 commit comments

Comments
 (0)