Monomorphisms over a fixed object #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
As preparation for defining subobject X
, we set up the theory for
mono_over X := {f : over X // mono f.hom}
.
Here mono_over X
is a thin category (a pair of objects has at most one morphism between them),
so we can think of it as a preorder. However as it is not skeletal, it is not yet a partial order.
subobject X
will be defined as the skeletalization of mono_over X
.
We provide
def pullback [has_pullbacks C] (f : X ⟶ Y) : mono_over Y ⥤ mono_over X
def map (f : X ⟶ Y) [mono f] : mono_over X ⥤ mono_over Y
def «exists» [has_images C] (f : X ⟶ Y) : mono_over X ⥤ mono_over Y
and prove their basic properties and relationships.
Notes #
This development originally appeared in Bhavik Mehta's "Topos theory for Lean" repository, and was ported to mathlib by Scott Morrison.
The category of monomorphisms into X
as a full subcategory of the over category.
This isn't skeletal, so it's not a partial order.
Later we define subobject X
as the quotient of this by isomorphisms.
Equations
Construct a mono_over X
.
Equations
- category_theory.mono_over.mk' f = {obj := category_theory.over.mk f, property := hf}
The inclusion from monomorphisms over X to morphisms over X.
Equations
Equations
- category_theory.mono_over.has_coe = {coe := λ (Y : category_theory.mono_over X), Y.obj.left}
Convenience notation for the underlying arrow of a monomorphism over X.
The category of monomorphisms over X is a thin category, which makes defining its skeleton easy.
Convenience constructor for a morphism in monomorphisms over X
.
Convenience constructor for an isomorphism in monomorphisms over X
.
Equations
- category_theory.mono_over.iso_mk h w = {hom := category_theory.mono_over.hom_mk h.hom w, inv := category_theory.mono_over.hom_mk h.inv _, hom_inv_id' := _, inv_hom_id' := _}
If f : mono_over X
, then mk' f.arrow
is of course just f
, but not definitionally, so we
package it as an isomorphism.
Lift a functor between over categories to a functor between mono_over
categories,
given suitable evidence that morphisms are taken to monomorphisms.
Equations
- category_theory.mono_over.lift F h = {obj := λ (f : category_theory.mono_over Y), {obj := F.obj ((category_theory.mono_over.forget Y).obj f), property := _}, map := λ (_x _x_1 : category_theory.mono_over Y) (k : _x ⟶ _x_1), (category_theory.mono_over.forget X).preimage ((category_theory.mono_over.forget Y ⋙ F).map k), map_id' := _, map_comp' := _}
Isomorphic functors over Y ⥤ over X
lift to isomorphic functors mono_over Y ⥤ mono_over X
.
mono_over.lift
commutes with composition of functors.
mono_over.lift
preserves the identity functor.
Equations
- category_theory.mono_over.lift_id = category_theory.fully_faithful_cancel_right (category_theory.mono_over.forget X) (category_theory.iso.refl (category_theory.mono_over.lift (𝟭 (category_theory.over X)) category_theory.mono_over.lift_id._proof_2 ⋙ category_theory.mono_over.forget X))
Monomorphisms over an object f : over A
in an over category
are equivalent to monomorphisms over the source of f
.
Equations
- category_theory.mono_over.slice h₁ h₂ = {functor := category_theory.mono_over.lift f.iterated_slice_equiv.functor h₁, inverse := category_theory.mono_over.lift f.iterated_slice_equiv.inverse h₂, unit_iso := category_theory.mono_over.lift_id.symm ≪≫ category_theory.mono_over.lift_iso category_theory.mono_over.slice._proof_3 _ f.iterated_slice_equiv.unit_iso ≪≫ (category_theory.mono_over.lift_comp f.iterated_slice_equiv.functor f.iterated_slice_equiv.inverse h₁ h₂).symm, counit_iso := category_theory.mono_over.lift_comp f.iterated_slice_equiv.inverse f.iterated_slice_equiv.functor h₂ h₁ ≪≫ category_theory.mono_over.lift_iso _ category_theory.mono_over.slice._proof_8 f.iterated_slice_equiv.counit_iso ≪≫ category_theory.mono_over.lift_id, functor_unit_iso_comp' := _}
When C
has pullbacks, a morphism f : X ⟶ Y
induces a functor mono_over Y ⥤ mono_over X
,
by pulling back a monomorphism along f
.
pullback commutes with composition (up to a natural isomorphism)
pullback preserves the identity (up to a natural isomorphism)
Equations
- category_theory.mono_over.pullback_id = category_theory.mono_over.lift_iso category_theory.mono_over.pullback_id._proof_1 category_theory.mono_over.lift_id._proof_1 category_theory.over.pullback_id ≪≫ category_theory.mono_over.lift_id
We can map monomorphisms over X
to monomorphisms over Y
by post-composition with a monomorphism f : X ⟶ Y
.
Equations
Instances for category_theory.mono_over.map
mono_over.map
commutes with composition (up to a natural isomorphism).
mono_over.map
preserves the identity (up to a natural isomorphism).
Equations
- category_theory.mono_over.map_id = category_theory.mono_over.lift_iso category_theory.mono_over.map_id._proof_1 category_theory.mono_over.lift_id._proof_1 category_theory.over.map_id ≪≫ category_theory.mono_over.lift_id
Equations
- category_theory.mono_over.full_map f = {preimage := λ (g h : category_theory.mono_over X) (e : (category_theory.mono_over.map f).obj g ⟶ (category_theory.mono_over.map f).obj h), category_theory.mono_over.hom_mk e.left _, witness' := _}
Isomorphic objects have equivalent mono_over
categories.
Equations
- category_theory.mono_over.map_iso e = {functor := category_theory.mono_over.map e.hom _, inverse := category_theory.mono_over.map e.inv _, unit_iso := ((category_theory.mono_over.map_comp e.hom e.inv).symm ≪≫ category_theory.eq_to_iso _ ≪≫ category_theory.mono_over.map_id).symm, counit_iso := (category_theory.mono_over.map_comp e.inv e.hom).symm ≪≫ category_theory.eq_to_iso _ ≪≫ category_theory.mono_over.map_id, functor_unit_iso_comp' := _}
An equivalence of categories e
between C
and D
induces an equivalence between
mono_over X
and mono_over (e.functor.obj X)
whenever X
is an object of C
.
Equations
- category_theory.mono_over.congr X e = {functor := category_theory.mono_over.lift (category_theory.over.post e.functor) _, inverse := category_theory.mono_over.lift (category_theory.over.post e.inverse) _ ⋙ (category_theory.mono_over.map_iso (e.unit_iso.symm.app X)).functor, unit_iso := category_theory.nat_iso.of_components (λ (Y : category_theory.mono_over X), category_theory.mono_over.iso_mk (e.unit_iso.app ↑Y) _) _, counit_iso := category_theory.nat_iso.of_components (λ (Y : category_theory.mono_over (e.functor.obj X)), category_theory.mono_over.iso_mk (e.counit_iso.app ↑Y) _) _, functor_unit_iso_comp' := _}
map f
is left adjoint to pullback f
when f
is a monomorphism
Equations
- category_theory.mono_over.map_pullback_adj f = category_theory.adjunction.restrict_fully_faithful (category_theory.mono_over.forget X) (category_theory.mono_over.forget Y) (category_theory.over.map_pullback_adj f) (category_theory.iso.refl (category_theory.mono_over.forget X ⋙ category_theory.over.map f)) (category_theory.iso.refl (category_theory.mono_over.forget Y ⋙ category_theory.over.pullback f))
mono_over.map f
followed by mono_over.pullback f
is the identity.
The mono_over Y
for the image inclusion for a morphism f : X ⟶ Y
.
Taking the image of a morphism gives a functor over X ⥤ mono_over X
.
Equations
- category_theory.mono_over.image = {obj := λ (f : category_theory.over X), category_theory.mono_over.image_mono_over f.hom, map := λ (f g : category_theory.over X) (k : f ⟶ g), (category_theory.mono_over.forget X).preimage (category_theory.over.hom_mk (category_theory.limits.image.lift {I := category_theory.limits.image g.hom _, m := category_theory.limits.image.ι g.hom _, m_mono := _, e := k.left ≫ category_theory.limits.factor_thru_image g.hom, fac' := _}) _), map_id' := _, map_comp' := _}
mono_over.image : over X ⥤ mono_over X
is left adjoint to
mono_over.forget : mono_over X ⥤ over X
Equations
- category_theory.mono_over.image_forget_adj = category_theory.adjunction.mk_of_hom_equiv {hom_equiv := λ (f : category_theory.over X) (g : category_theory.mono_over X), {to_fun := λ (k : category_theory.mono_over.image.obj f ⟶ g), category_theory.over.hom_mk (category_theory.limits.factor_thru_image f.hom ≫ k.left) _, inv_fun := λ (k : f ⟶ (category_theory.mono_over.forget X).obj g), category_theory.over.hom_mk (category_theory.limits.image.lift {I := g.obj.left, m := g.arrow, m_mono := _, e := k.left, fac' := _}) _, left_inv := _, right_inv := _}, hom_equiv_naturality_left_symm' := _, hom_equiv_naturality_right' := _}
Equations
Forgetting that a monomorphism over X
is a monomorphism, then taking its image,
is the identity functor.
In the case where f
is not a monomorphism but C
has images,
we can still take the "forward map" under it, which agrees with mono_over.map f
.
Equations
Instances for category_theory.mono_over.exists
When f : X ⟶ Y
is a monomorphism, exists f
agrees with map f
.
exists
is adjoint to pullback
when images exist
Equations
- category_theory.mono_over.exists_pullback_adj f = category_theory.adjunction.restrict_fully_faithful (category_theory.mono_over.forget X) (𝟭 (category_theory.mono_over Y)) ((category_theory.over.map_pullback_adj f).comp category_theory.mono_over.image_forget_adj) (category_theory.iso.refl (category_theory.mono_over.forget X ⋙ category_theory.over.map f ⋙ category_theory.mono_over.image)) (category_theory.iso.refl (𝟭 (category_theory.mono_over Y) ⋙ category_theory.mono_over.forget Y ⋙ category_theory.over.pullback f))