Documentation

Mathlib.CategoryTheory.Limits.Bicones

Bicones #

Given a category J, a walking Bicone J is a category whose objects are the objects of J and two extra vertices Bicone.left and Bicone.right. The morphisms are the morphisms of J and left ⟶ j, right ⟶ j for each j : J such that (· ⟶ j) and (· ⟶ k) commutes with each f : j ⟶ k.

Given a diagram F : J ⥤ C and two Cone Fs, we can join them into a diagram Bicone J ⥤ C via biconeMk.

This is used in CategoryTheory.Functor.Flat.

inductive CategoryTheory.Bicone (J : Type u₁) :
Type u₁

Given a category J, construct a walking Bicone J by adjoining two elements.

Instances For
    instance CategoryTheory.finBicone (J : Type u₁) [Fintype J] :
    Equations
    • One or more equations did not get rendered due to their size.
    inductive CategoryTheory.BiconeHom (J : Type u₁) [Category.{v₁, u₁} J] :
    Bicone JBicone JType (max u₁ v₁)

    The homs for a walking Bicone J.

    Instances For
      Equations
      • One or more equations did not get rendered due to their size.
      Equations
      • One or more equations did not get rendered due to their size.
      @[simp]
      theorem CategoryTheory.biconeCategoryStruct_comp (J : Type u₁) [Category.{v₁, u₁} J] {X✝ Y✝ Z✝ : Bicone J} (f : X✝ Y✝) (g : Y✝ Z✝) :
      CategoryStruct.comp f g = BiconeHom.casesOn (motive := fun (a a_1 : Bicone J) (x : BiconeHom J a a_1) => X✝ = aY✝ = a_1HEq f x(X✝ Z✝)) f (fun (h : X✝ = Bicone.left) => Eq.ndrec (motive := fun {X : Bicone J} => (f : X Y✝) → Y✝ = Bicone.leftHEq f BiconeHom.left_id(X Z✝)) (fun (f : Bicone.left Y✝) (h : Y✝ = Bicone.left) => Eq.ndrec (motive := fun {Y : Bicone J} => (Y Z✝)(f : Bicone.left Y) → HEq f BiconeHom.left_id(Bicone.left Z✝)) (fun (g : Bicone.left Z✝) (f : Bicone.left Bicone.left) (h : HEq f BiconeHom.left_id) => g) g f) f) (fun (h : X✝ = Bicone.right) => Eq.ndrec (motive := fun {X : Bicone J} => (f : X Y✝) → Y✝ = Bicone.rightHEq f BiconeHom.right_id(X Z✝)) (fun (f : Bicone.right Y✝) (h : Y✝ = Bicone.right) => Eq.ndrec (motive := fun {Y : Bicone J} => (Y Z✝)(f : Bicone.right Y) → HEq f BiconeHom.right_id(Bicone.right Z✝)) (fun (g : Bicone.right Z✝) (f : Bicone.right Bicone.right) (h : HEq f BiconeHom.right_id) => g) g f) f) (fun (j : J) (h : X✝ = Bicone.left) => Eq.ndrec (motive := fun {X : Bicone J} => (f : X Y✝) → Y✝ = Bicone.diagram jHEq f (BiconeHom.left j)(X Z✝)) (fun (f : Bicone.left Y✝) (h : Y✝ = Bicone.diagram j) => Eq.ndrec (motive := fun {Y : Bicone J} => (Y Z✝)(f : Bicone.left Y) → HEq f (BiconeHom.left j)(Bicone.left Z✝)) (fun (g : Bicone.diagram j Z✝) (f : Bicone.left Bicone.diagram j) (h : HEq f (BiconeHom.left j)) => BiconeHom.casesOn (motive := fun (a a_1 : Bicone J) (t : BiconeHom J a a_1) => Bicone.diagram j = aZ✝ = a_1HEq g t(Bicone.left Z✝)) g (fun (h : Bicone.diagram j = Bicone.left) => Bicone.noConfusion h) (fun (h : Bicone.diagram j = Bicone.right) => Bicone.noConfusion h) (fun (j_1 : J) (h : Bicone.diagram j = Bicone.left) => Bicone.noConfusion h) (fun (j_1 : J) (h : Bicone.diagram j = Bicone.right) => Bicone.noConfusion h) (fun {j_1 k : J} (f : j_1 k) (h : Bicone.diagram j = Bicone.diagram j_1) => Bicone.noConfusion h fun (val_eq : j = j_1) => Eq.ndrec (motive := fun {j_2 : J} => (f : j_2 k) → Z✝ = Bicone.diagram kHEq g (BiconeHom.diagram f)(Bicone.left Z✝)) (fun (f : j k) (h : Z✝ = Bicone.diagram k) => Eq.ndrec (motive := fun {Z : Bicone J} => (g : Bicone.diagram j Z) → HEq g (BiconeHom.diagram f)(Bicone.left Z)) (fun (g : Bicone.diagram j Bicone.diagram k) (h : HEq g (BiconeHom.diagram f)) => BiconeHom.left k) g) val_eq f) ) g f) f) (fun (j : J) (h : X✝ = Bicone.right) => Eq.ndrec (motive := fun {X : Bicone J} => (f : X Y✝) → Y✝ = Bicone.diagram jHEq f (BiconeHom.right j)(X Z✝)) (fun (f : Bicone.right Y✝) (h : Y✝ = Bicone.diagram j) => Eq.ndrec (motive := fun {Y : Bicone J} => (Y Z✝)(f : Bicone.right Y) → HEq f (BiconeHom.right j)(Bicone.right Z✝)) (fun (g : Bicone.diagram j Z✝) (f : Bicone.right Bicone.diagram j) (h : HEq f (BiconeHom.right j)) => BiconeHom.casesOn (motive := fun (a a_1 : Bicone J) (t : BiconeHom J a a_1) => Bicone.diagram j = aZ✝ = a_1HEq g t(Bicone.right Z✝)) g (fun (h : Bicone.diagram j = Bicone.left) => Bicone.noConfusion h) (fun (h : Bicone.diagram j = Bicone.right) => Bicone.noConfusion h) (fun (j_1 : J) (h : Bicone.diagram j = Bicone.left) => Bicone.noConfusion h) (fun (j_1 : J) (h : Bicone.diagram j = Bicone.right) => Bicone.noConfusion h) (fun {j_1 k : J} (f : j_1 k) (h : Bicone.diagram j = Bicone.diagram j_1) => Bicone.noConfusion h fun (val_eq : j = j_1) => Eq.ndrec (motive := fun {j_2 : J} => (f : j_2 k) → Z✝ = Bicone.diagram kHEq g (BiconeHom.diagram f)(Bicone.right Z✝)) (fun (f : j k) (h : Z✝ = Bicone.diagram k) => Eq.ndrec (motive := fun {Z : Bicone J} => (g : Bicone.diagram j Z) → HEq g (BiconeHom.diagram f)(Bicone.right Z)) (fun (g : Bicone.diagram j Bicone.diagram k) (h : HEq g (BiconeHom.diagram f)) => BiconeHom.right k) g) val_eq f) ) g f) f) (fun {j k : J} (f_1 : j k) (h : X✝ = Bicone.diagram j) => Eq.ndrec (motive := fun {X : Bicone J} => (f : X Y✝) → Y✝ = Bicone.diagram kHEq f (BiconeHom.diagram f_1)(X Z✝)) (fun (f : Bicone.diagram j Y✝) (h : Y✝ = Bicone.diagram k) => Eq.ndrec (motive := fun {Y : Bicone J} => (Y Z✝)(f : Bicone.diagram j Y) → HEq f (BiconeHom.diagram f_1)(Bicone.diagram j Z✝)) (fun (g : Bicone.diagram k Z✝) (f : Bicone.diagram j Bicone.diagram k) (h : HEq f (BiconeHom.diagram f_1)) => BiconeHom.casesOn (motive := fun (a a_1 : Bicone J) (x : BiconeHom J a a_1) => Bicone.diagram k = aZ✝ = a_1HEq g x(Bicone.diagram j Z✝)) g (fun (h : Bicone.diagram k = Bicone.left) => Bicone.noConfusion h) (fun (h : Bicone.diagram k = Bicone.right) => Bicone.noConfusion h) (fun (j_1 : J) (h : Bicone.diagram k = Bicone.left) => Bicone.noConfusion h) (fun (j_1 : J) (h : Bicone.diagram k = Bicone.right) => Bicone.noConfusion h) (fun {j_1 k_1 : J} (g_1 : j_1 k_1) (h : Bicone.diagram k = Bicone.diagram j_1) => Bicone.noConfusion h fun (val_eq : k = j_1) => Eq.ndrec (motive := fun {j_2 : J} => (g_2 : j_2 k_1) → Z✝ = Bicone.diagram k_1HEq g (BiconeHom.diagram g_2)(Bicone.diagram j Z✝)) (fun (g_2 : k k_1) (h : Z✝ = Bicone.diagram k_1) => Eq.ndrec (motive := fun {Z : Bicone J} => (g : Bicone.diagram k Z) → HEq g (BiconeHom.diagram g_2)(Bicone.diagram j Z)) (fun (g : Bicone.diagram k Bicone.diagram k_1) (h : HEq g (BiconeHom.diagram g_2)) => BiconeHom.diagram (CategoryStruct.comp f_1 g_2)) g) val_eq g_1) ) g f) f)
      @[simp]
      theorem CategoryTheory.biconeCategoryStruct_Hom (J : Type u₁) [Category.{v₁, u₁} J] (a✝ a✝¹ : Bicone J) :
      (a✝ a✝¹) = BiconeHom J a✝ a✝¹
      def CategoryTheory.biconeMk (J : Type v₁) [SmallCategory J] {C : Type u₁} [Category.{v₁, u₁} C] {F : Functor J C} (c₁ c₂ : Limits.Cone F) :

      Given a diagram F : J ⥤ C and two Cone Fs, we can join them into a diagram Bicone J ⥤ C.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[simp]
        theorem CategoryTheory.biconeMk_map (J : Type v₁) [SmallCategory J] {C : Type u₁} [Category.{v₁, u₁} C] {F : Functor J C} (c₁ c₂ : Limits.Cone F) {X✝ Y✝ : Bicone J} (f : X✝ Y✝) :
        (biconeMk J c₁ c₂).map f = BiconeHom.casesOn (motive := fun (a a_1 : Bicone J) (x : BiconeHom J a a_1) => X✝ = aY✝ = a_1HEq f x((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) X✝ (fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Y✝)) f (fun (h : X✝ = Bicone.left) => Eq.ndrec (motive := fun {X : Bicone J} => (f : X Y✝) → Y✝ = Bicone.leftHEq f BiconeHom.left_id((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) X (fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Y✝)) (fun (f : Bicone.left Y✝) (h : Y✝ = Bicone.left) => Eq.ndrec (motive := fun {Y : Bicone J} => (f : Bicone.left Y) → HEq f BiconeHom.left_id((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Bicone.left (fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Y)) (fun (f : Bicone.left Bicone.left) (h : HEq f BiconeHom.left_id) => CategoryStruct.id ((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Bicone.left)) f) f) (fun (h : X✝ = Bicone.right) => Eq.ndrec (motive := fun {X : Bicone J} => (f : X Y✝) → Y✝ = Bicone.rightHEq f BiconeHom.right_id((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) X (fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Y✝)) (fun (f : Bicone.right Y✝) (h : Y✝ = Bicone.right) => Eq.ndrec (motive := fun {Y : Bicone J} => (f : Bicone.right Y) → HEq f BiconeHom.right_id((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Bicone.right (fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Y)) (fun (f : Bicone.right Bicone.right) (h : HEq f BiconeHom.right_id) => CategoryStruct.id ((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Bicone.right)) f) f) (fun (j : J) (h : X✝ = Bicone.left) => Eq.ndrec (motive := fun {X : Bicone J} => (f : X Y✝) → Y✝ = Bicone.diagram jHEq f (BiconeHom.left j)((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) X (fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Y✝)) (fun (f : Bicone.left Y✝) (h : Y✝ = Bicone.diagram j) => Eq.ndrec (motive := fun {Y : Bicone J} => (f : Bicone.left Y) → HEq f (BiconeHom.left j)((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Bicone.left (fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Y)) (fun (f : Bicone.left Bicone.diagram j) (h : HEq f (BiconeHom.left j)) => c₁.app j) f) f) (fun (j : J) (h : X✝ = Bicone.right) => Eq.ndrec (motive := fun {X : Bicone J} => (f : X Y✝) → Y✝ = Bicone.diagram jHEq f (BiconeHom.right j)((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) X (fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Y✝)) (fun (f : Bicone.right Y✝) (h : Y✝ = Bicone.diagram j) => Eq.ndrec (motive := fun {Y : Bicone J} => (f : Bicone.right Y) → HEq f (BiconeHom.right j)((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Bicone.right (fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Y)) (fun (f : Bicone.right Bicone.diagram j) (h : HEq f (BiconeHom.right j)) => c₂.app j) f) f) (fun {j k : J} (f_1 : j k) (h : X✝ = Bicone.diagram j) => Eq.ndrec (motive := fun {X : Bicone J} => (f : X Y✝) → Y✝ = Bicone.diagram kHEq f (BiconeHom.diagram f_1)((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) X (fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Y✝)) (fun (f : Bicone.diagram j Y✝) (h : Y✝ = Bicone.diagram k) => Eq.ndrec (motive := fun {Y : Bicone J} => (f : Bicone.diagram j Y) → HEq f (BiconeHom.diagram f_1)((fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) (Bicone.diagram j) (fun (X : Bicone J) => Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j) Y)) (fun (f : Bicone.diagram j Bicone.diagram k) (h : HEq f (BiconeHom.diagram f_1)) => F.map f_1) f) f)
        @[simp]
        theorem CategoryTheory.biconeMk_obj (J : Type v₁) [SmallCategory J] {C : Type u₁} [Category.{v₁, u₁} C] {F : Functor J C} (c₁ c₂ : Limits.Cone F) (X : Bicone J) :
        (biconeMk J c₁ c₂).obj X = Bicone.casesOn X c₁.pt c₂.pt fun (j : J) => F.obj j
        instance CategoryTheory.finBiconeHom (J : Type v₁) [SmallCategory J] [FinCategory J] (j k : Bicone J) :
        Fintype (j k)
        Equations
        • One or more equations did not get rendered due to their size.