Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+โ†‘Ctrl+โ†“to navigate, Ctrl+๐Ÿ–ฑ๏ธto focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2020 Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bhavik Mehta
Ported by: Joรซl Riou

! This file was ported from Lean 3 source module category_theory.essential_image
! leanprover-community/mathlib commit 550b58538991c8977703fdeb7c9d51a5aa27df11
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.CategoryTheory.NatIso
import Mathlib.CategoryTheory.FullSubcategory

/-!
# Essential image of a functor

The essential image `essImage` of a functor consists of the objects in the target category which
are isomorphic to an object in the image of the object function.
This, for instance, allows us to talk about objects belonging to a subcategory expressed as a
functor rather than a subtype, preserving the principle of equivalence. For example this lets us
define exponential ideals.

The essential image can also be seen as a subcategory of the target category, and witnesses that
a functor decomposes into a essentially surjective functor and a fully faithful functor.
(TODO: show that this decomposition forms an orthogonal factorisation system).
-/


universe vโ‚ vโ‚‚ uโ‚ uโ‚‚

noncomputable section

namespace CategoryTheory

variable {
C: Type uโ‚
C
:
Type uโ‚: Type (uโ‚+1)
Type uโ‚
} {
D: Type uโ‚‚
D
:
Type uโ‚‚: Type (uโ‚‚+1)
Type uโ‚‚
} [
Category: Type ?u.698 โ†’ Type (max?u.698(vโ‚+1))
Category
.{vโ‚}
C: Type uโ‚
C
] [
Category: Type ?u.192 โ†’ Type (max?u.192(vโ‚‚+1))
Category
.{vโ‚‚}
D: Type uโ‚‚
D
] {
F: C โฅค D
F
:
C: Type uโ‚
C
โฅค
D: Type uโ‚‚
D
} namespace Functor /-- The essential image of a functor `F` consists of those objects in the target category which are isomorphic to an object in the image of the function `F.obj`. In other words, this is the closure under isomorphism of the function `F.obj`. This is the "non-evil" way of describing the image of a functor. -/ def
essImage: C โฅค D โ†’ Set D
essImage
(
F: C โฅค D
F
:
C: Type uโ‚
C
โฅค
D: Type uโ‚‚
D
) :
Set: Type ?u.70 โ†’ Type ?u.70
Set
D: Type uโ‚‚
D
:= fun
Y: ?m.75
Y
=> โˆƒ
X: C
X
:
C: Type uโ‚
C
,
Nonempty: Sort ?u.81 โ†’ Prop
Nonempty
(
F: C โฅค D
F
.
obj: {V : Type ?u.119} โ†’ [inst : Quiver V] โ†’ {W : Type ?u.118} โ†’ [inst_1 : Quiver W] โ†’ V โฅคq W โ†’ V โ†’ W
obj
X: C
X
โ‰…
Y: ?m.75
Y
) #align category_theory.functor.ess_image
CategoryTheory.Functor.essImage: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
CategoryTheory.Functor.essImage
/-- Get the witnessing object that `Y` is in the subcategory given by `F`. -/ def
essImage.witness: {Y : D} โ†’ Y โˆˆ essImage F โ†’ C
essImage.witness
{
Y: D
Y
:
D: Type uโ‚‚
D
} (h :
Y: D
Y
โˆˆ
F: C โฅค D
F
.
essImage: {C : Type ?u.229} โ†’ {D : Type ?u.228} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
essImage
) :
C: Type uโ‚
C
:= h.
choose: {ฮฑ : Sort ?u.270} โ†’ {p : ฮฑ โ†’ Prop} โ†’ (โˆƒ a, p a) โ†’ ฮฑ
choose
#align category_theory.functor.ess_image.witness
CategoryTheory.Functor.essImage.witness: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ {F : C โฅค D} โ†’ {Y : D} โ†’ Y โˆˆ essImage F โ†’ C
CategoryTheory.Functor.essImage.witness
/-- Extract the isomorphism between `F.obj h.witness` and `Y` itself. -/ -- Porting note: in the next, the dot notation `h.witness` no longer works def
essImage.getIso: {Y : D} โ†’ (h : Y โˆˆ essImage F) โ†’ F.obj (witness h) โ‰… Y
essImage.getIso
{
Y: D
Y
:
D: Type uโ‚‚
D
} (h :
Y: D
Y
โˆˆ
F: C โฅค D
F
.
essImage: {C : Type ?u.433} โ†’ {D : Type ?u.432} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
essImage
) :
F: C โฅค D
F
.
obj: {V : Type ?u.500} โ†’ [inst : Quiver V] โ†’ {W : Type ?u.499} โ†’ [inst_1 : Quiver W] โ†’ V โฅคq W โ†’ V โ†’ W
obj
(
essImage.witness: {C : Type ?u.540} โ†’ {D : Type ?u.539} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ {F : C โฅค D} โ†’ {Y : D} โ†’ Y โˆˆ essImage F โ†’ C
essImage.witness
h) โ‰…
Y: D
Y
:=
Classical.choice: {ฮฑ : Sort ?u.596} โ†’ Nonempty ฮฑ โ†’ ฮฑ
Classical.choice
h.
choose_spec: โˆ€ {ฮฑ : Sort ?u.598} {p : ฮฑ โ†’ Prop} (P : โˆƒ a, p a), p (Exists.choose P)
choose_spec
#align category_theory.functor.ess_image.get_iso
CategoryTheory.Functor.essImage.getIso: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ {F : C โฅค D} โ†’ {Y : D} โ†’ (h : Y โˆˆ essImage F) โ†’ F.obj (essImage.witness h) โ‰… Y
CategoryTheory.Functor.essImage.getIso
/-- Being in the essential image is a "hygienic" property: it is preserved under isomorphism. -/ theorem
essImage.ofIso: โˆ€ {Y Y' : D}, (Y โ‰… Y') โ†’ Y โˆˆ essImage F โ†’ Y' โˆˆ essImage F
essImage.ofIso
{
Y: D
Y
Y': D
Y'
:
D: Type uโ‚‚
D
} (
h: Y โ‰… Y'
h
:
Y: D
Y
โ‰…
Y': D
Y'
) (hY :
Y: D
Y
โˆˆ
essImage: {C : Type ?u.764} โ†’ {D : Type ?u.763} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
essImage
F: C โฅค D
F
) :
Y': D
Y'
โˆˆ
essImage: {C : Type ?u.844} โ†’ {D : Type ?u.843} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
essImage
F: C โฅค D
F
:= hY.
imp: โˆ€ {ฮฑ : Sort ?u.896} {p q : ฮฑ โ†’ Prop}, (โˆ€ (a : ฮฑ), p a โ†’ q a) โ†’ (โˆƒ a, p a) โ†’ โˆƒ a, q a
imp
fun
_: ?m.912
_
=>
Nonempty.map: โˆ€ {ฮฑ : Sort ?u.914} {ฮฒ : Sort ?u.915}, (ฮฑ โ†’ ฮฒ) โ†’ Nonempty ฮฑ โ†’ Nonempty ฮฒ
Nonempty.map
(ยท โ‰ชโ‰ซ
h: Y โ‰… Y'
h
) #align category_theory.functor.ess_image.of_iso
CategoryTheory.Functor.essImage.ofIso: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] {F : C โฅค D} {Y Y' : D}, (Y โ‰… Y') โ†’ Y โˆˆ essImage F โ†’ Y' โˆˆ essImage F
CategoryTheory.Functor.essImage.ofIso
/-- If `Y` is in the essential image of `F` then it is in the essential image of `F'` as long as `F โ‰… F'`. -/ theorem
essImage.ofNatIso: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] {F F' : C โฅค D}, (F โ‰… F') โ†’ โˆ€ {Y : D}, Y โˆˆ essImage F โ†’ Y โˆˆ essImage F'
essImage.ofNatIso
{
F': C โฅค D
F'
:
C: Type uโ‚
C
โฅค
D: Type uโ‚‚
D
} (
h: F โ‰… F'
h
:
F: C โฅค D
F
โ‰…
F': C โฅค D
F'
) {
Y: D
Y
:
D: Type uโ‚‚
D
} (hY :
Y: D
Y
โˆˆ
essImage: {C : Type ?u.1084} โ†’ {D : Type ?u.1083} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
essImage
F: C โฅค D
F
) :
Y: D
Y
โˆˆ
essImage: {C : Type ?u.1159} โ†’ {D : Type ?u.1158} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
essImage
F': C โฅค D
F'
:= hY.
imp: โˆ€ {ฮฑ : Sort ?u.1211} {p q : ฮฑ โ†’ Prop}, (โˆ€ (a : ฮฑ), p a โ†’ q a) โ†’ (โˆƒ a, p a) โ†’ โˆƒ a, q a
imp
fun
X: ?m.1227
X
=>
Nonempty.map: โˆ€ {ฮฑ : Sort ?u.1229} {ฮฒ : Sort ?u.1230}, (ฮฑ โ†’ ฮฒ) โ†’ Nonempty ฮฑ โ†’ Nonempty ฮฒ
Nonempty.map
fun
t: ?m.1240
t
=>
h: F โ‰… F'
h
.
symm: {C : Type ?u.1268} โ†’ [inst : Category C] โ†’ {X Y : C} โ†’ (X โ‰… Y) โ†’ (Y โ‰… X)
symm
.
app: {C : Type ?u.1292} โ†’ [inst : Category C] โ†’ {D : Type ?u.1291} โ†’ [inst_1 : Category D] โ†’ {F G : C โฅค D} โ†’ (F โ‰… G) โ†’ (X : C) โ†’ F.obj X โ‰… G.obj X
app
X: ?m.1227
X
โ‰ชโ‰ซ
t: ?m.1240
t
#align category_theory.functor.ess_image.of_nat_iso
CategoryTheory.Functor.essImage.ofNatIso: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] {F F' : C โฅค D}, (F โ‰… F') โ†’ โˆ€ {Y : D}, Y โˆˆ essImage F โ†’ Y โˆˆ essImage F'
CategoryTheory.Functor.essImage.ofNatIso
/-- Isomorphic functors have equal essential images. -/ theorem
essImage_eq_of_natIso: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] {F F' : C โฅค D}, (F โ‰… F') โ†’ essImage F = essImage F'
essImage_eq_of_natIso
{
F': C โฅค D
F'
:
C: Type uโ‚
C
โฅค
D: Type uโ‚‚
D
} (
h: F โ‰… F'
h
:
F: C โฅค D
F
โ‰…
F': C โฅค D
F'
) :
essImage: {C : Type ?u.1431} โ†’ {D : Type ?u.1430} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
essImage
F: C โฅค D
F
=
essImage: {C : Type ?u.1450} โ†’ {D : Type ?u.1449} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
essImage
F': C โฅค D
F'
:=
funext: โˆ€ {ฮฑ : Sort ?u.1470} {ฮฒ : ฮฑ โ†’ Sort ?u.1469} {f g : (x : ฮฑ) โ†’ ฮฒ x}, (โˆ€ (x : ฮฑ), f x = g x) โ†’ f = g
funext
fun
_: ?m.1482
_
=>
propext: โˆ€ {a b : Prop}, (a โ†” b) โ†’ a = b
propext
โŸจ
essImage.ofNatIso: โˆ€ {C : Type ?u.1498} {D : Type ?u.1497} [inst : Category C] [inst_1 : Category D] {F F' : C โฅค D}, (F โ‰… F') โ†’ โˆ€ {Y : D}, Y โˆˆ essImage F โ†’ Y โˆˆ essImage F'
essImage.ofNatIso
h: F โ‰… F'
h
,
essImage.ofNatIso: โˆ€ {C : Type ?u.1539} {D : Type ?u.1538} [inst : Category C] [inst_1 : Category D] {F F' : C โฅค D}, (F โ‰… F') โ†’ โˆ€ {Y : D}, Y โˆˆ essImage F โ†’ Y โˆˆ essImage F'
essImage.ofNatIso
h: F โ‰… F'
h
.
symm: {C : Type ?u.1548} โ†’ [inst : Category C] โ†’ {X Y : C} โ†’ (X โ‰… Y) โ†’ (Y โ‰… X)
symm
โŸฉ #align category_theory.functor.ess_image_eq_of_nat_iso
CategoryTheory.Functor.essImage_eq_of_natIso: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] {F F' : C โฅค D}, (F โ‰… F') โ†’ essImage F = essImage F'
CategoryTheory.Functor.essImage_eq_of_natIso
/-- An object in the image is in the essential image. -/ theorem
obj_mem_essImage: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] (F : D โฅค C) (Y : D), F.obj Y โˆˆ essImage F
obj_mem_essImage
(
F: D โฅค C
F
:
D: Type uโ‚‚
D
โฅค
C: Type uโ‚
C
) (
Y: D
Y
:
D: Type uโ‚‚
D
) :
F: D โฅค C
F
.
obj: {V : Type ?u.1677} โ†’ [inst : Quiver V] โ†’ {W : Type ?u.1676} โ†’ [inst_1 : Quiver W] โ†’ V โฅคq W โ†’ V โ†’ W
obj
Y: D
Y
โˆˆ
essImage: {C : Type ?u.1717} โ†’ {D : Type ?u.1716} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
essImage
F: D โฅค C
F
:= โŸจ
Y: D
Y
, โŸจ
Iso.refl: {C : Type ?u.1792} โ†’ [inst : Category C] โ†’ (X : C) โ†’ X โ‰… X
Iso.refl
_: ?m.1794
_
โŸฉโŸฉ #align category_theory.functor.obj_mem_ess_image
CategoryTheory.Functor.obj_mem_essImage: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] (F : D โฅค C) (Y : D), F.obj Y โˆˆ essImage F
CategoryTheory.Functor.obj_mem_essImage
/-- The essential image of a functor, interpreted of a full subcategory of the target category. -/ -- Porting note: no hasNonEmptyInstance linter yet def
EssImageSubcategory: (F : C โฅค D) โ†’ ?m.1867 F
EssImageSubcategory
(
F: C โฅค D
F
:
C: Type uโ‚
C
โฅค
D: Type uโ‚‚
D
) :=
FullSubcategory: {C : Type ?u.1870} โ†’ (C โ†’ Prop) โ†’ Type ?u.1870
FullSubcategory
F: C โฅค D
F
.
essImage: {C : Type ?u.1879} โ†’ {D : Type ?u.1878} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
essImage
#align category_theory.functor.ess_image_subcategory
CategoryTheory.Functor.EssImageSubcategory: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Type uโ‚‚
CategoryTheory.Functor.EssImageSubcategory
-- Porting note: `deriving Category` is not able to derive this instance
instance: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ {F : C โฅค D} โ†’ Category (EssImageSubcategory F)
instance
:
Category: Type ?u.1937 โ†’ Type (max?u.1937(?u.1938+1))
Category
(
EssImageSubcategory: {C : Type ?u.1940} โ†’ {D : Type ?u.1939} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Type ?u.1939
EssImageSubcategory
F: C โฅค D
F
) := (
inferInstance: {ฮฑ : Sort ?u.1997} โ†’ [i : ฮฑ] โ†’ ฮฑ
inferInstance
:
Category: Type ?u.1993 โ†’ Type (max?u.1993(vโ‚‚+1))
Category
.{vโ‚‚} (
FullSubcategory: {C : Type ?u.1994} โ†’ (C โ†’ Prop) โ†’ Type ?u.1994
FullSubcategory
_: ?m.1995 โ†’ Prop
_
)) /-- The essential image as a subcategory has a fully faithful inclusion into the target category. -/ @[simps!] def
essImageInclusion: (F : C โฅค D) โ†’ EssImageSubcategory F โฅค D
essImageInclusion
(
F: C โฅค D
F
:
C: Type uโ‚
C
โฅค
D: Type uโ‚‚
D
) :
F: C โฅค D
F
.
EssImageSubcategory: {C : Type ?u.2166} โ†’ {D : Type ?u.2165} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Type ?u.2165
EssImageSubcategory
โฅค
D: Type uโ‚‚
D
:=
fullSubcategoryInclusion: {C : Type ?u.2220} โ†’ [inst : Category C] โ†’ (Z : C โ†’ Prop) โ†’ FullSubcategory Z โฅค C
fullSubcategoryInclusion
_: ?m.2222 โ†’ Prop
_
#align category_theory.functor.ess_image_inclusion
CategoryTheory.Functor.essImageInclusion: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ EssImageSubcategory F โฅค D
CategoryTheory.Functor.essImageInclusion
#align category_theory.functor.ess_image_inclusion_obj
CategoryTheory.Functor.essImageInclusion_obj: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] (F : C โฅค D) (self : FullSubcategory (essImage F)), (essImageInclusion F).obj self = self.obj
CategoryTheory.Functor.essImageInclusion_obj
#align category_theory.functor.ess_image_inclusion_map
CategoryTheory.Functor.essImageInclusion_map: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] (F : C โฅค D) {X Y : InducedCategory D FullSubcategory.obj} (f : X โŸถ Y), (essImageInclusion F).map f = f
CategoryTheory.Functor.essImageInclusion_map
-- Porting note: `deriving Full` is not able to derive this instance
instance: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ {F : C โฅค D} โ†’ Full (essImageInclusion F)
instance
:
Full: {C : Type ?u.2390} โ†’ [inst : Category C] โ†’ {D : Type ?u.2389} โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Type (max(max?u.2390?u.2392)?u.2391)
Full
(
essImageInclusion: {C : Type ?u.2434} โ†’ {D : Type ?u.2433} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ EssImageSubcategory F โฅค D
essImageInclusion
F: C โฅค D
F
) := (
inferInstance: {ฮฑ : Sort ?u.2726} โ†’ [i : ฮฑ] โ†’ ฮฑ
inferInstance
:
Full: {C : Type ?u.2493} โ†’ [inst : Category C] โ†’ {D : Type ?u.2492} โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Type (max(max?u.2493?u.2495)?u.2494)
Full
(
fullSubcategoryInclusion: {C : Type ?u.2536} โ†’ [inst : Category C] โ†’ (Z : C โ†’ Prop) โ†’ FullSubcategory Z โฅค C
fullSubcategoryInclusion
_: ?m.2538 โ†’ Prop
_
)) -- Porting note: `deriving Faithful` is not able to derive this instance
instance: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] {F : C โฅค D}, Faithful (essImageInclusion F)
instance
:
Faithful: {C : Type ?u.2957} โ†’ [inst : Category C] โ†’ {D : Type ?u.2956} โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Prop
Faithful
(
essImageInclusion: {C : Type ?u.3001} โ†’ {D : Type ?u.3000} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ EssImageSubcategory F โฅค D
essImageInclusion
F: C โฅค D
F
) := (
inferInstance: โˆ€ {ฮฑ : Sort ?u.3293} [i : ฮฑ], ฮฑ
inferInstance
:
Faithful: {C : Type ?u.3060} โ†’ [inst : Category C] โ†’ {D : Type ?u.3059} โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Prop
Faithful
(
fullSubcategoryInclusion: {C : Type ?u.3103} โ†’ [inst : Category C] โ†’ (Z : C โ†’ Prop) โ†’ FullSubcategory Z โฅค C
fullSubcategoryInclusion
_: ?m.3105 โ†’ Prop
_
)) /-- Given a functor `F : C โฅค D`, we have an (essentially surjective) functor from `C` to the essential image of `F`. -/ @[simps!] def
toEssImage: (F : C โฅค D) โ†’ C โฅค EssImageSubcategory F
toEssImage
(
F: C โฅค D
F
:
C: Type uโ‚
C
โฅค
D: Type uโ‚‚
D
) :
C: Type uโ‚
C
โฅค
F: C โฅค D
F
.
EssImageSubcategory: {C : Type ?u.3503} โ†’ {D : Type ?u.3502} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Type ?u.3502
EssImageSubcategory
:=
FullSubcategory.lift: {C : Type ?u.3557} โ†’ [inst : Category C] โ†’ {D : Type ?u.3556} โ†’ [inst_1 : Category D] โ†’ (P : D โ†’ Prop) โ†’ (F : C โฅค D) โ†’ (โˆ€ (X : C), P (F.obj X)) โ†’ C โฅค FullSubcategory P
FullSubcategory.lift
_: ?m.3562 โ†’ Prop
_
F: C โฅค D
F
(
obj_mem_essImage: โˆ€ {C : Type ?u.3612} {D : Type ?u.3611} [inst : Category C] [inst_1 : Category D] (F : D โฅค C) (Y : D), F.obj Y โˆˆ essImage F
obj_mem_essImage
_: ?m.3616 โฅค ?m.3615
_
) #align category_theory.functor.to_ess_image
CategoryTheory.Functor.toEssImage: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ C โฅค EssImageSubcategory F
CategoryTheory.Functor.toEssImage
#align category_theory.functor.to_ess_image_map
CategoryTheory.Functor.toEssImage_map: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] (F : C โฅค D) {X Y : C} (f : X โŸถ Y), (toEssImage F).map f = F.map f
CategoryTheory.Functor.toEssImage_map
#align category_theory.functor.to_ess_image_obj_obj
CategoryTheory.Functor.toEssImage_obj_obj: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] (F : C โฅค D) (X : C), ((toEssImage F).obj X).obj = F.obj X
CategoryTheory.Functor.toEssImage_obj_obj
/-- The functor `F` factorises through its essential image, where the first functor is essentially surjective and the second is fully faithful. -/ @[simps!] def
toEssImageCompEssentialImageInclusion: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ toEssImage F โ‹™ essImageInclusion F โ‰… F
toEssImageCompEssentialImageInclusion
(
F: C โฅค D
F
:
C: Type uโ‚
C
โฅค
D: Type uโ‚‚
D
) :
F: C โฅค D
F
.
toEssImage: {C : Type ?u.3974} โ†’ {D : Type ?u.3973} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ C โฅค EssImageSubcategory F
toEssImage
โ‹™
F: C โฅค D
F
.
essImageInclusion: {C : Type ?u.4003} โ†’ {D : Type ?u.4002} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ EssImageSubcategory F โฅค D
essImageInclusion
โ‰…
F: C โฅค D
F
:=
FullSubcategory.lift_comp_inclusion: {C : Type ?u.4070} โ†’ [inst : Category C] โ†’ {D : Type ?u.4069} โ†’ [inst_1 : Category D] โ†’ (P : D โ†’ Prop) โ†’ (F : C โฅค D) โ†’ (hF : โˆ€ (X : C), P (F.obj X)) โ†’ FullSubcategory.lift P F hF โ‹™ fullSubcategoryInclusion P โ‰… F
FullSubcategory.lift_comp_inclusion
_: ?m.4075 โ†’ Prop
_
_: ?m.4073 โฅค ?m.4075
_
_: โˆ€ (X : ?m.4073), ?m.4077 (?m.4078.obj X)
_
#align category_theory.functor.to_ess_image_comp_essential_image_inclusion
CategoryTheory.Functor.toEssImageCompEssentialImageInclusion: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ toEssImage F โ‹™ essImageInclusion F โ‰… F
CategoryTheory.Functor.toEssImageCompEssentialImageInclusion
#align category_theory.functor.to_ess_image_comp_essential_image_inclusion_hom_app
CategoryTheory.Functor.toEssImageCompEssentialImageInclusion_hom_app: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] (F : C โฅค D) (X : C), (toEssImageCompEssentialImageInclusion F).hom.app X = ๐Ÿ™ (F.obj X)
CategoryTheory.Functor.toEssImageCompEssentialImageInclusion_hom_app
#align category_theory.functor.to_ess_image_comp_essential_image_inclusion_inv_app
CategoryTheory.Functor.toEssImageCompEssentialImageInclusion_inv_app: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] (F : C โฅค D) (X : C), (toEssImageCompEssentialImageInclusion F).inv.app X = ๐Ÿ™ (F.obj X)
CategoryTheory.Functor.toEssImageCompEssentialImageInclusion_inv_app
end Functor /-- A functor `F : C โฅค D` is essentially surjective if every object of `D` is in the essential image of `F`. In other words, for every `Y : D`, there is some `X : C` with `F.obj X โ‰… Y`. See . -/ class
EssSurj: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Prop
EssSurj
(
F: C โฅค D
F
:
C: Type uโ‚
C
โฅค
D: Type uโ‚‚
D
) :
Prop: Type
Prop
where /-- All the objects of the target category are in the essential image. -/
mem_essImage: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] {F : C โฅค D} [self : EssSurj F] (Y : D), Y โˆˆ Functor.essImage F
mem_essImage
(
Y: D
Y
:
D: Type uโ‚‚
D
) :
Y: D
Y
โˆˆ
F: C โฅค D
F
.
essImage: {C : Type ?u.4873} โ†’ {D : Type ?u.4872} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Set D
essImage
#align category_theory.ess_surj
CategoryTheory.EssSurj: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Prop
CategoryTheory.EssSurj
instance: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] {F : C โฅค D}, EssSurj (Functor.toEssImage F)
instance
:
EssSurj: {C : Type ?u.4965} โ†’ {D : Type ?u.4964} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Prop
EssSurj
F: C โฅค D
F
.
toEssImage: {C : Type ?u.5009} โ†’ {D : Type ?u.5008} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ C โฅค Functor.EssImageSubcategory F
toEssImage
where mem_essImage := fun โŸจ_,
hY: Functor.essImage F objโœ
hY
โŸฉ => โŸจ
_: ?m.5119
_
, โŸจโŸจ
_: ?m.5144 โŸถ ?m.5145
_
,
_: ?m.5145 โŸถ ?m.5144
_
,
hY: Functor.essImage F objโœ
hY
.
getIso: {C : Type ?u.5172} โ†’ {D : Type ?u.5171} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ {F : C โฅค D} โ†’ {Y : D} โ†’ (h : Y โˆˆ Functor.essImage F) โ†’ F.obj (Functor.essImage.witness h) โ‰… Y
getIso
.
hom_inv_id: โˆ€ {C : Type ?u.5199} [inst : Category C] {X Y : C} (self : X โ‰… Y), self.hom โ‰ซ self.inv = ๐Ÿ™ X
hom_inv_id
,
hY: Functor.essImage F objโœ
hY
.
getIso: {C : Type ?u.5234} โ†’ {D : Type ?u.5233} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ {F : C โฅค D} โ†’ {Y : D} โ†’ (h : Y โˆˆ Functor.essImage F) โ†’ F.obj (Functor.essImage.witness h) โ‰… Y
getIso
.
inv_hom_id: โˆ€ {C : Type ?u.5250} [inst : Category C] {X Y : C} (self : X โ‰… Y), self.inv โ‰ซ self.hom = ๐Ÿ™ Y
inv_hom_id
โŸฉโŸฉโŸฉ variable (
F: ?m.5407
F
) [
EssSurj: {C : Type ?u.6180} โ†’ {D : Type ?u.6179} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Prop
EssSurj
F: ?m.5407
F
] /-- Given an essentially surjective functor, we can find a preimage for every object `Y` in the codomain. Applying the functor to this preimage will yield an object isomorphic to `Y`, see `obj_obj_preimage_iso`. -/ def
Functor.objPreimage: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ [inst : EssSurj F] โ†’ D โ†’ C
Functor.objPreimage
(
Y: D
Y
:
D: Type uโ‚‚
D
) :
C: Type uโ‚
C
:=
essImage.witness: {C : Type ?u.5623} โ†’ {D : Type ?u.5622} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ {F : C โฅค D} โ†’ {Y : D} โ†’ Y โˆˆ essImage F โ†’ C
essImage.witness
(@
EssSurj.mem_essImage: โˆ€ {C : Type ?u.5669} {D : Type ?u.5668} [inst : Category C] [inst_1 : Category D] {F : C โฅค D} [self : EssSurj F] (Y : D), Y โˆˆ essImage F
EssSurj.mem_essImage
_: Type ?u.5669
_
_: Type ?u.5668
_
_ _
F: C โฅค D
F
_
Y: D
Y
) #align category_theory.functor.obj_preimage
CategoryTheory.Functor.objPreimage: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ [inst : EssSurj F] โ†’ D โ†’ C
CategoryTheory.Functor.objPreimage
/-- Applying an essentially surjective functor to a preimage of `Y` yields an object that is isomorphic to `Y`. -/ def
Functor.objObjPreimageIso: (Y : D) โ†’ F.obj (objPreimage F Y) โ‰… Y
Functor.objObjPreimageIso
(
Y: D
Y
:
D: Type uโ‚‚
D
) :
F: C โฅค D
F
.
obj: {V : Type ?u.5944} โ†’ [inst : Quiver V] โ†’ {W : Type ?u.5943} โ†’ [inst_1 : Quiver W] โ†’ V โฅคq W โ†’ V โ†’ W
obj
(
F: C โฅค D
F
.
objPreimage: {C : Type ?u.5984} โ†’ {D : Type ?u.5983} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ [inst : EssSurj F] โ†’ D โ†’ C
objPreimage
Y: D
Y
) โ‰…
Y: D
Y
:=
Functor.essImage.getIso: {C : Type ?u.6018} โ†’ {D : Type ?u.6017} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ {F : C โฅค D} โ†’ {Y : D} โ†’ (h : Y โˆˆ essImage F) โ†’ F.obj (essImage.witness h) โ‰… Y
Functor.essImage.getIso
_: ?m.6026 โˆˆ essImage ?m.6025
_
#align category_theory.functor.obj_obj_preimage_iso
CategoryTheory.Functor.objObjPreimageIso: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ [inst_2 : EssSurj F] โ†’ (Y : D) โ†’ F.obj (Functor.objPreimage F Y) โ‰… Y
CategoryTheory.Functor.objObjPreimageIso
/-- The induced functor of a faithful functor is faithful -/ instance
Faithful.toEssImage: โˆ€ (F : C โฅค D) [inst : Faithful F], Faithful (Functor.toEssImage F)
Faithful.toEssImage
(
F: C โฅค D
F
:
C: Type uโ‚
C
โฅค
D: Type uโ‚‚
D
) [
Faithful: {C : Type ?u.6256} โ†’ [inst : Category C] โ†’ {D : Type ?u.6255} โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Prop
Faithful
F: C โฅค D
F
] :
Faithful: {C : Type ?u.6316} โ†’ [inst : Category C] โ†’ {D : Type ?u.6315} โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Prop
Faithful
F: C โฅค D
F
.
toEssImage: {C : Type ?u.6360} โ†’ {D : Type ?u.6359} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ C โฅค Functor.EssImageSubcategory F
toEssImage
:=
Faithful.of_comp_iso: โˆ€ {C : Type ?u.6410} [inst : Category C] {D : Type ?u.6409} [inst_1 : Category D] {E : Type ?u.6408} [inst_2 : Category E] {F : C โฅค D} {G : D โฅค E} {H : C โฅค E} [inst_3 : Faithful H], (F โ‹™ G โ‰… H) โ†’ Faithful F
Faithful.of_comp_iso
F: C โฅค D
F
.
toEssImageCompEssentialImageInclusion: {C : Type ?u.6515} โ†’ {D : Type ?u.6514} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ Functor.toEssImage F โ‹™ Functor.essImageInclusion F โ‰… F
toEssImageCompEssentialImageInclusion
#align category_theory.faithful.to_ess_image
CategoryTheory.Faithful.toEssImage: โˆ€ {C : Type uโ‚} {D : Type uโ‚‚} [inst : Category C] [inst_1 : Category D] (F : C โฅค D) [inst_2 : Faithful F], Faithful (Functor.toEssImage F)
CategoryTheory.Faithful.toEssImage
/-- The induced functor of a full functor is full -/ instance
Full.toEssImage: (F : C โฅค D) โ†’ [inst : Full F] โ†’ Full (Functor.toEssImage F)
Full.toEssImage
(
F: C โฅค D
F
:
C: Type uโ‚
C
โฅค
D: Type uโ‚‚
D
) [
Full: {C : Type ?u.6730} โ†’ [inst : Category C] โ†’ {D : Type ?u.6729} โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Type (max(max?u.6730?u.6732)?u.6731)
Full
F: C โฅค D
F
] :
Full: {C : Type ?u.6790} โ†’ [inst : Category C] โ†’ {D : Type ?u.6789} โ†’ [inst_1 : Category D] โ†’ C โฅค D โ†’ Type (max(max?u.6790?u.6792)?u.6791)
Full
F: C โฅค D
F
.
toEssImage: {C : Type ?u.6834} โ†’ {D : Type ?u.6833} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ C โฅค Functor.EssImageSubcategory F
toEssImage
:= haveI :=
Full.ofIso: {C : Type ?u.6885} โ†’ [inst : Category C] โ†’ {D : Type ?u.6884} โ†’ [inst_1 : Category D] โ†’ {F F' : C โฅค D} โ†’ [inst_2 : Full F] โ†’ (F โ‰… F') โ†’ Full F'
Full.ofIso
F: C โฅค D
F
.
toEssImageCompEssentialImageInclusion: {C : Type ?u.6961} โ†’ {D : Type ?u.6960} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ Functor.toEssImage F โ‹™ Functor.essImageInclusion F โ‰… F
toEssImageCompEssentialImageInclusion
.
symm: {C : Type ?u.6972} โ†’ [inst : Category C] โ†’ {X Y : C} โ†’ (X โ‰… Y) โ†’ (Y โ‰… X)
symm
Full.ofCompFaithful: {C : Type ?u.7032} โ†’ [inst : Category C] โ†’ {D : Type ?u.7031} โ†’ [inst_1 : Category D] โ†’ {E : Type ?u.7030} โ†’ [inst_2 : Category E] โ†’ (F : C โฅค D) โ†’ (G : D โฅค E) โ†’ [inst_3 : Full (F โ‹™ G)] โ†’ [inst_4 : Faithful G] โ†’ Full F
Full.ofCompFaithful
F: C โฅค D
F
.
toEssImage: {C : Type ?u.7043} โ†’ {D : Type ?u.7042} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ C โฅค Functor.EssImageSubcategory F
toEssImage
F: C โฅค D
F
.
essImageInclusion: {C : Type ?u.7096} โ†’ {D : Type ?u.7095} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ Functor.EssImageSubcategory F โฅค D
essImageInclusion
#align category_theory.full.to_ess_image
CategoryTheory.Full.toEssImage: {C : Type uโ‚} โ†’ {D : Type uโ‚‚} โ†’ [inst : Category C] โ†’ [inst_1 : Category D] โ†’ (F : C โฅค D) โ†’ [inst_2 : Full F] โ†’ Full (Functor.toEssImage F)
CategoryTheory.Full.toEssImage
end CategoryTheory