File: Mathlib/CategoryTheory/Limits/Constructions/Over/Products.lean

full_name: CategoryTheory.Over.ConstructProducts.widePullbackDiagramOfDiagramOver
code: /-- (Implementation)
Given a product diagram in `C/B`, construct the corresponding wide pullback diagram
in `C`.
-/
abbrev widePullbackDiagramOfDiagramOver (B : C) {J : Type w} (F : Discrete J ⥤ Over B) :
    WidePullbackShape J ⥤ C 
goal: CategoryTheory.Limits.WidePullbackShape J ⥤ C

full_name: CategoryTheory.Over.ConstructProducts.conesEquivInverseObj_π_app
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simps]
def conesEquivInverseObj (B : C) {J : Type w} (F : Discrete J ⥤ Over B) (c : Cone F) :
    Cone (widePullbackDiagramOfDiagramOver B F) 
goal: (CategoryTheory.Over.ConstructProducts.conesEquivInverseObj B F c).π.app X =
  Option.casesOn X c.pt.hom fun j => (c.π.app { as := j }).left

full_name: CategoryTheory.Over.ConstructProducts.conesEquivInverseObj
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simps]
def conesEquivInverseObj (B : C) {J : Type w} (F : Discrete J ⥤ Over B) (c : Cone F) :
    Cone (widePullbackDiagramOfDiagramOver B F) 
goal: CategoryTheory.Limits.Cone (CategoryTheory.Over.ConstructProducts.widePullbackDiagramOfDiagramOver B F)

full_name: CategoryTheory.Over.ConstructProducts.conesEquivInverseObj_pt
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simps]
def conesEquivInverseObj (B : C) {J : Type w} (F : Discrete J ⥤ Over B) (c : Cone F) :
    Cone (widePullbackDiagramOfDiagramOver B F) 
goal: (CategoryTheory.Over.ConstructProducts.conesEquivInverseObj B F c).pt = c.pt.left

full_name: CategoryTheory.Over.ConstructProducts.conesEquivInverse_map_hom
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simps]
def conesEquivInverse (B : C) {J : Type w} (F : Discrete J ⥤ Over B) :
    Cone F ⥤ Cone (widePullbackDiagramOfDiagramOver B F) 
goal: ∀ {X Y : CategoryTheory.Limits.Cone F} (f : X ⟶ Y),
  ((CategoryTheory.Over.ConstructProducts.conesEquivInverse B F).map f).hom = f.hom.left

full_name: CategoryTheory.Over.ConstructProducts.conesEquivInverse_obj
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simps]
def conesEquivInverse (B : C) {J : Type w} (F : Discrete J ⥤ Over B) :
    Cone F ⥤ Cone (widePullbackDiagramOfDiagramOver B F) 
goal: (CategoryTheory.Over.ConstructProducts.conesEquivInverse B F).obj c =
  CategoryTheory.Over.ConstructProducts.conesEquivInverseObj B F c

full_name: CategoryTheory.Over.ConstructProducts.conesEquivInverse
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simps]
def conesEquivInverse (B : C) {J : Type w} (F : Discrete J ⥤ Over B) :
    Cone F ⥤ Cone (widePullbackDiagramOfDiagramOver B F) 
goal: CategoryTheory.Limits.Cone F ⥤
  CategoryTheory.Limits.Cone (CategoryTheory.Over.ConstructProducts.widePullbackDiagramOfDiagramOver B F)

full_name: CategoryTheory.Over.ConstructProducts.conesEquivFunctor
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simps]
def conesEquivFunctor (B : C) {J : Type w} (F : Discrete J ⥤ Over B) :
    Cone (widePullbackDiagramOfDiagramOver B F) ⥤ Cone F 
goal: CategoryTheory.Limits.Cone (CategoryTheory.Over.ConstructProducts.widePullbackDiagramOfDiagramOver B F) ⥤
  CategoryTheory.Limits.Cone F

full_name: CategoryTheory.Over.ConstructProducts.conesEquivFunctor_obj_pt
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simps]
def conesEquivFunctor (B : C) {J : Type w} (F : Discrete J ⥤ Over B) :
    Cone (widePullbackDiagramOfDiagramOver B F) ⥤ Cone F 
goal: ((CategoryTheory.Over.ConstructProducts.conesEquivFunctor B F).obj c).pt = CategoryTheory.Over.mk (c.π.app none)

full_name: CategoryTheory.Over.ConstructProducts.conesEquivFunctor_obj_π_app
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simps]
def conesEquivFunctor (B : C) {J : Type w} (F : Discrete J ⥤ Over B) :
    Cone (widePullbackDiagramOfDiagramOver B F) ⥤ Cone F 
goal: ∀ (x : CategoryTheory.Discrete J),
  ((CategoryTheory.Over.ConstructProducts.conesEquivFunctor B F).obj c).π.app x =
    match x with
    | { as := j } => CategoryTheory.Over.homMk (c.π.app (some j)) ⋯

full_name: CategoryTheory.Over.ConstructProducts.conesEquivFunctor_map_hom
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simps]
def conesEquivFunctor (B : C) {J : Type w} (F : Discrete J ⥤ Over B) :
    Cone (widePullbackDiagramOfDiagramOver B F) ⥤ Cone F 
goal: ∀ {X Y : CategoryTheory.Limits.Cone (CategoryTheory.Over.ConstructProducts.widePullbackDiagramOfDiagramOver B F)}
  (f : X ⟶ Y),
  ((CategoryTheory.Over.ConstructProducts.conesEquivFunctor B F).map f).hom = CategoryTheory.Over.homMk f.hom ⋯

full_name: CategoryTheory.Over.ConstructProducts.conesEquivUnitIso
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simp]
def conesEquivUnitIso (B : C) (F : Discrete J ⥤ Over B) :
    𝟭 (Cone (widePullbackDiagramOfDiagramOver B F)) ≅
      conesEquivFunctor B F ⋙ conesEquivInverse B F 
goal: 𝟭 (CategoryTheory.Limits.Cone (CategoryTheory.Over.ConstructProducts.widePullbackDiagramOfDiagramOver B F)) ≅
  CategoryTheory.Over.ConstructProducts.conesEquivFunctor B F ⋙
    CategoryTheory.Over.ConstructProducts.conesEquivInverse B F

full_name: CategoryTheory.Over.ConstructProducts.conesEquivCounitIso
code: /-- (Impl) A preliminary definition to avoid timeouts. -/
@[simp]
def conesEquivCounitIso (B : C) (F : Discrete J ⥤ Over B) :
    conesEquivInverse B F ⋙ conesEquivFunctor B F ≅ 𝟭 (Cone F) 
goal: CategoryTheory.Over.ConstructProducts.conesEquivInverse B F ⋙
    CategoryTheory.Over.ConstructProducts.conesEquivFunctor B F ≅
  𝟭 (CategoryTheory.Limits.Cone F)

full_name: CategoryTheory.Over.ConstructProducts.conesEquiv_functor
code: /-- (Impl) Establish an equivalence between the category of cones for `F` and for the "grown" `F`.
-/
@[simps]
def conesEquiv (B : C) (F : Discrete J ⥤ Over B) :
    Cone (widePullbackDiagramOfDiagramOver B F) ≌ Cone F 
goal: (CategoryTheory.Over.ConstructProducts.conesEquiv B F).functor =
  CategoryTheory.Over.ConstructProducts.conesEquivFunctor B F

full_name: CategoryTheory.Over.ConstructProducts.conesEquiv_unitIso
code: /-- (Impl) Establish an equivalence between the category of cones for `F` and for the "grown" `F`.
-/
@[simps]
def conesEquiv (B : C) (F : Discrete J ⥤ Over B) :
    Cone (widePullbackDiagramOfDiagramOver B F) ≌ Cone F 
goal: (CategoryTheory.Over.ConstructProducts.conesEquiv B F).unitIso =
  CategoryTheory.Over.ConstructProducts.conesEquivUnitIso B F

full_name: CategoryTheory.Over.ConstructProducts.conesEquiv
code: /-- (Impl) Establish an equivalence between the category of cones for `F` and for the "grown" `F`.
-/
@[simps]
def conesEquiv (B : C) (F : Discrete J ⥤ Over B) :
    Cone (widePullbackDiagramOfDiagramOver B F) ≌ Cone F 
goal: CategoryTheory.Limits.Cone (CategoryTheory.Over.ConstructProducts.widePullbackDiagramOfDiagramOver B F) ≌
  CategoryTheory.Limits.Cone F

full_name: CategoryTheory.Over.ConstructProducts.conesEquiv_inverse
code: /-- (Impl) Establish an equivalence between the category of cones for `F` and for the "grown" `F`.
-/
@[simps]
def conesEquiv (B : C) (F : Discrete J ⥤ Over B) :
    Cone (widePullbackDiagramOfDiagramOver B F) ≌ Cone F 
goal: (CategoryTheory.Over.ConstructProducts.conesEquiv B F).inverse =
  CategoryTheory.Over.ConstructProducts.conesEquivInverse B F

full_name: CategoryTheory.Over.ConstructProducts.conesEquiv_counitIso
code: /-- (Impl) Establish an equivalence between the category of cones for `F` and for the "grown" `F`.
-/
@[simps]
def conesEquiv (B : C) (F : Discrete J ⥤ Over B) :
    Cone (widePullbackDiagramOfDiagramOver B F) ≌ Cone F 
goal: (CategoryTheory.Over.ConstructProducts.conesEquiv B F).counitIso =
  CategoryTheory.Over.ConstructProducts.conesEquivCounitIso B F

full_name: CategoryTheory.Over.ConstructProducts.has_over_limit_discrete_of_widePullback_limit
code: /-- Use the above equivalence to prove we have a limit. -/
theorem has_over_limit_discrete_of_widePullback_limit {B : C} (F : Discrete J ⥤ Over B)
    [HasLimit (widePullbackDiagramOfDiagramOver B F)] : HasLimit F 
goal: CategoryTheory.Limits.HasLimit F

full_name: CategoryTheory.Over.ConstructProducts.over_product_of_widePullback
code: /-- Given a wide pullback in `C`, construct a product in `C/B`. -/
theorem over_product_of_widePullback [HasLimitsOfShape (WidePullbackShape J) C] {B : C} :
    HasLimitsOfShape (Discrete J) (Over B) 
goal: CategoryTheory.Limits.HasLimitsOfShape (CategoryTheory.Discrete J) (CategoryTheory.Over B)

full_name: CategoryTheory.Over.ConstructProducts.over_binaryProduct_of_pullback
code: /-- Given a pullback in `C`, construct a binary product in `C/B`. -/
theorem over_binaryProduct_of_pullback [HasPullbacks C] {B : C} : HasBinaryProducts (Over B) 
goal: CategoryTheory.Limits.HasBinaryProducts (CategoryTheory.Over B)

full_name: CategoryTheory.Over.ConstructProducts.over_products_of_widePullbacks
code: /-- Given all wide pullbacks in `C`, construct products in `C/B`. -/
theorem over_products_of_widePullbacks [HasWidePullbacks.{w} C] {B : C} :
    HasProducts.{w} (Over B) 
goal: CategoryTheory.Limits.HasProducts (CategoryTheory.Over B)

full_name: CategoryTheory.Over.ConstructProducts.over_finiteProducts_of_finiteWidePullbacks
code: /-- Given all finite wide pullbacks in `C`, construct finite products in `C/B`. -/
theorem over_finiteProducts_of_finiteWidePullbacks [HasFiniteWidePullbacks C] {B : C} :
    HasFiniteProducts (Over B) 
goal: CategoryTheory.Limits.HasFiniteProducts (CategoryTheory.Over B)

full_name: CategoryTheory.Over.over_hasTerminal
code: /-- Construct terminal object in the over category. This isn't an instance as it's not typically the
way we want to define terminal objects.
(For instance, this gives a terminal object which is different from the generic one given by
`over_product_of_widePullback` above.)
-/
theorem over_hasTerminal (B : C) : HasTerminal (Over B) 
goal: CategoryTheory.Limits.HasTerminal (CategoryTheory.Over B)