Documentation

Mathlib.CategoryTheory.Limits.Shapes.Pullback.Pasting

Pasting lemma #

This file proves the pasting lemma for pullbacks. That is, given the following diagram:

  X₁ - f₁ -> X₂ - f₂ -> X₃
  |          |          |
  i₁         i₂         i₃
  ∨          ∨          ∨
  Y₁ - g₁ -> Y₂ - g₂ -> Y₃

if the right square is a pullback, then the left square is a pullback iff the big square is a pullback.

Main results #

@[reducible, inline]
abbrev CategoryTheory.Limits.PullbackCone.pasteHoriz {C : Type u} [Category.{v, u} C] {X₃ Y₁ Y₂ Y₃ : C} {g₁ : Y₁ Y₂} {g₂ : Y₂ Y₃} {i₃ : X₃ Y₃} (t₂ : PullbackCone g₂ i₃) {i₂ : t₂.pt Y₂} (t₁ : PullbackCone g₁ i₂) (hi₂ : i₂ = t₂.fst) :

The PullbackCone obtained by pasting two PullbackCone's horizontally

Equations
def CategoryTheory.Limits.pasteHorizIsPullback {C : Type u} [Category.{v, u} C] {X₃ Y₁ Y₂ Y₃ : C} {g₁ : Y₁ Y₂} {g₂ : Y₂ Y₃} {i₃ : X₃ Y₃} {t₂ : PullbackCone g₂ i₃} {i₂ : t₂.pt Y₂} {t₁ : PullbackCone g₁ i₂} (hi₂ : i₂ = t₂.fst) (H : IsLimit t₂) (H' : IsLimit t₁) :
IsLimit (t₂.pasteHoriz t₁ hi₂)

Given

X₁ - f₁ -> X₂ - f₂ -> X₃
|          |          |
i₁         i₂         i₃
↓          ↓          ↓
Y₁ - g₁ -> Y₂ - g₂ -> Y₃

Then the big square is a pullback if both the small squares are.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Limits.leftSquareIsPullback {C : Type u} [Category.{v, u} C] {X₃ Y₁ Y₂ Y₃ : C} {g₁ : Y₁ Y₂} {g₂ : Y₂ Y₃} {i₃ : X₃ Y₃} {t₂ : PullbackCone g₂ i₃} {i₂ : t₂.pt Y₂} (t₁ : PullbackCone g₁ i₂) (hi₂ : i₂ = t₂.fst) (H : IsLimit t₂) (H' : IsLimit (t₂.pasteHoriz t₁ hi₂)) :
IsLimit t₁

Given

X₁ - f₁ -> X₂ - f₂ -> X₃
|          |          |
i₁         i₂         i₃
↓          ↓          ↓
Y₁ - g₁ -> Y₂ - g₂ -> Y₃

Then the left square is a pullback if the right square and the big square are.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Limits.pasteHorizIsPullbackEquiv {C : Type u} [Category.{v, u} C] {X₃ Y₁ Y₂ Y₃ : C} {g₁ : Y₁ Y₂} {g₂ : Y₂ Y₃} {i₃ : X₃ Y₃} {t₂ : PullbackCone g₂ i₃} {i₂ : t₂.pt Y₂} (t₁ : PullbackCone g₁ i₂) (hi₂ : i₂ = t₂.fst) (H : IsLimit t₂) :
IsLimit (t₂.pasteHoriz t₁ hi₂) IsLimit t₁

Given that the right square is a pullback, the pasted square is a pullback iff the left square is.

Equations
  • One or more equations did not get rendered due to their size.
@[reducible, inline]
abbrev CategoryTheory.Limits.PullbackCone.pasteVert {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ : C} {f₁ : X₂ X₁} {f₂ : X₃ X₂} {i₁ : Y₁ X₁} (t₁ : PullbackCone i₁ f₁) {i₂ : t₁.pt X₂} (t₂ : PullbackCone i₂ f₂) (hi₂ : i₂ = t₁.snd) :

The PullbackCone obtained by pasting two PullbackCone's vertically

Equations
def CategoryTheory.Limits.PullbackCone.pasteVertFlip {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ : C} {f₁ : X₂ X₁} {f₂ : X₃ X₂} {i₁ : Y₁ X₁} (t₁ : PullbackCone i₁ f₁) {i₂ : t₁.pt X₂} (t₂ : PullbackCone i₂ f₂) (hi₂ : i₂ = t₁.snd) :
(t₁.pasteVert t₂ hi₂).flip t₁.flip.pasteHoriz t₂.flip hi₂

Pasting two pullback cones vertically is isomorphic to the pullback cone obtained by flipping them, pasting horizontally, and then flipping the result again.

Equations
def CategoryTheory.Limits.pasteVertIsPullback {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ : C} {f₁ : X₂ X₁} {f₂ : X₃ X₂} {i₁ : Y₁ X₁} {t₁ : PullbackCone i₁ f₁} {i₂ : t₁.pt X₂} {t₂ : PullbackCone i₂ f₂} (hi₂ : i₂ = t₁.snd) (H₁ : IsLimit t₁) (H₂ : IsLimit t₂) :
IsLimit (t₁.pasteVert t₂ hi₂)

Given

Y₃ - i₃ -> X₃
|          |
g₂         f₂
∨          ∨
Y₂ - i₂ -> X₂
|          |
g₁         f₁
∨          ∨
Y₁ - i₁ -> X₁

The big square is a pullback if both the small squares are.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Limits.topSquareIsPullback {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ : C} {f₁ : X₂ X₁} {f₂ : X₃ X₂} {i₁ : Y₁ X₁} {t₁ : PullbackCone i₁ f₁} {i₂ : t₁.pt X₂} (t₂ : PullbackCone i₂ f₂) (hi₂ : i₂ = t₁.snd) (H₁ : IsLimit t₁) (H₂ : IsLimit (t₁.pasteVert t₂ hi₂)) :
IsLimit t₂

Given

Y₃ - i₃ -> X₃
|          |
g₂         f₂
∨          ∨
Y₂ - i₂ -> X₂
|          |
g₁         f₁
∨          ∨
Y₁ - i₁ -> X₁

The top square is a pullback if the bottom square and the big square are.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Limits.pasteVertIsPullbackEquiv {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ : C} {f₁ : X₂ X₁} {f₂ : X₃ X₂} {i₁ : Y₁ X₁} {t₁ : PullbackCone i₁ f₁} {i₂ : t₁.pt X₂} (t₂ : PullbackCone i₂ f₂) (hi₂ : i₂ = t₁.snd) (H : IsLimit t₁) :
IsLimit (t₁.pasteVert t₂ hi₂) IsLimit t₂

Given that the bottom square is a pullback, the pasted square is a pullback iff the top square is.

Equations
  • One or more equations did not get rendered due to their size.
@[reducible, inline]
abbrev CategoryTheory.Limits.PushoutCocone.pasteHoriz {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ : C} {f₁ : X₁ X₂} {f₂ : X₂ X₃} {i₁ : X₁ Y₁} (t₁ : PushoutCocone i₁ f₁) {i₂ : X₂ t₁.pt} (t₂ : PushoutCocone i₂ f₂) (hi₂ : i₂ = t₁.inr) :

The pushout cocone obtained by pasting two pushout cocones horizontally.

Equations
def CategoryTheory.Limits.pasteHorizIsPushout {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ : C} {f₁ : X₁ X₂} {f₂ : X₂ X₃} {i₁ : X₁ Y₁} {t₁ : PushoutCocone i₁ f₁} {i₂ : X₂ t₁.pt} {t₂ : PushoutCocone i₂ f₂} (hi₂ : i₂ = t₁.inr) (H : IsColimit t₁) (H' : IsColimit t₂) :
IsColimit (t₁.pasteHoriz t₂ hi₂)

Given

X₁ - f₁ -> X₂ - f₂ -> X₃
|          |          |
i₁         i₂         i₃
∨          ∨          ∨
Y₁ - g₁ -> Y₂ - g₂ -> Y₃

Then the big square is a pushout if both the small squares are.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Limits.rightSquareIsPushout {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ : C} {f₁ : X₁ X₂} {f₂ : X₂ X₃} {i₁ : X₁ Y₁} {t₁ : PushoutCocone i₁ f₁} {i₂ : X₂ t₁.pt} (t₂ : PushoutCocone i₂ f₂) (hi₂ : i₂ = t₁.inr) (H : IsColimit t₁) (H' : IsColimit (t₁.pasteHoriz t₂ hi₂)) :

Given

X₁ - f₁ -> X₂ - f₂ -> X₃ | | | i₁ i₂ i₃ ∨ ∨ ∨ Y₁ - g₁ -> Y₂ - g₂ -> Y₃

Then the right square is a pushout if the left square and the big square are.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Limits.pasteHorizIsPushoutEquiv {C : Type u} [Category.{v, u} C] {X₁ X₂ X₃ Y₁ : C} {f₁ : X₁ X₂} {f₂ : X₂ X₃} {i₁ : X₁ Y₁} {t₁ : PushoutCocone i₁ f₁} {i₂ : X₂ t₁.pt} (t₂ : PushoutCocone i₂ f₂) (hi₂ : i₂ = t₁.inr) (H : IsColimit t₁) :
IsColimit (t₁.pasteHoriz t₂ hi₂) IsColimit t₂

Given that the left square is a pushout, the pasted square is a pushout iff the right square is.

Equations
  • One or more equations did not get rendered due to their size.
@[reducible, inline]
abbrev CategoryTheory.Limits.PushoutCocone.pasteVert {C : Type u} [Category.{v, u} C] {Y₃ Y₂ Y₁ X₃ : C} {g₂ : Y₃ Y₂} {g₁ : Y₂ Y₁} {i₃ : Y₃ X₃} (t₁ : PushoutCocone g₂ i₃) {i₂ : Y₂ t₁.pt} (t₂ : PushoutCocone g₁ i₂) (hi₂ : i₂ = t₁.inl) :

The PullbackCone obtained by pasting two PullbackCone's vertically

Equations
def CategoryTheory.Limits.PushoutCocone.pasteVertFlip {C : Type u} [Category.{v, u} C] {Y₃ Y₂ Y₁ X₃ : C} {g₂ : Y₃ Y₂} {g₁ : Y₂ Y₁} {i₃ : Y₃ X₃} (t₁ : PushoutCocone g₂ i₃) {i₂ : Y₂ t₁.pt} (t₂ : PushoutCocone g₁ i₂) (hi₂ : i₂ = t₁.inl) :
(t₁.pasteVert t₂ hi₂).flip t₁.flip.pasteHoriz t₂.flip hi₂

Pasting two pushout cocones vertically is isomorphic to the pushout cocone obtained by flipping them, pasting horizontally, and then flipping the result again.

Equations
def CategoryTheory.Limits.pasteVertIsPushout {C : Type u} [Category.{v, u} C] {Y₃ Y₂ Y₁ X₃ : C} {g₂ : Y₃ Y₂} {g₁ : Y₂ Y₁} {i₃ : Y₃ X₃} {t₁ : PushoutCocone g₂ i₃} {i₂ : Y₂ t₁.pt} {t₂ : PushoutCocone g₁ i₂} (hi₂ : i₂ = t₁.inl) (H₁ : IsColimit t₁) (H₂ : IsColimit t₂) :
IsColimit (t₁.pasteVert t₂ hi₂)

Given

Y₃ - i₃ -> X₃
|          |
g₂         f₂
∨          ∨
Y₂ - i₂ -> X₂
|          |
g₁         f₁
∨          ∨
Y₁ - i₁ -> X₁

The big square is a pushout if both the small squares are.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Limits.botSquareIsPushout {C : Type u} [Category.{v, u} C] {Y₃ Y₂ Y₁ X₃ : C} {g₂ : Y₃ Y₂} {g₁ : Y₂ Y₁} {i₃ : Y₃ X₃} {t₁ : PushoutCocone g₂ i₃} {i₂ : Y₂ t₁.pt} (t₂ : PushoutCocone g₁ i₂) (hi₂ : i₂ = t₁.inl) (H₁ : IsColimit t₁) (H₂ : IsColimit (t₁.pasteVert t₂ hi₂)) :

Given

Y₃ - i₃ -> X₃
|          |
g₂         f₂
∨          ∨
Y₂ - i₂ -> X₂
|          |
g₁         f₁
∨          ∨
Y₁ - i₁ -> X₁

The bottom square is a pushout if the top square and the big square are.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Limits.pasteVertIsPushoutEquiv {C : Type u} [Category.{v, u} C] {Y₃ Y₂ Y₁ X₃ : C} {g₂ : Y₃ Y₂} {g₁ : Y₂ Y₁} {i₃ : Y₃ X₃} {t₁ : PushoutCocone g₂ i₃} {i₂ : Y₂ t₁.pt} (t₂ : PushoutCocone g₁ i₂) (hi₂ : i₂ = t₁.inl) (H : IsColimit t₁) :
IsColimit (t₁.pasteVert t₂ hi₂) IsColimit t₂

Given that the top square is a pushout, the pasted square is a pushout iff the bottom square is.

Equations
  • One or more equations did not get rendered due to their size.
instance CategoryTheory.Limits.hasPullbackHorizPaste {C : Type u} [Category.{v, u} C] {W X Y Z : C} (f : X Z) (g : Y Z) (f' : W X) [HasPullback f g] [HasPullback f' (pullback.fst f g)] :
noncomputable def CategoryTheory.Limits.pullbackRightPullbackFstIso {C : Type u} [Category.{v, u} C] {W X Y Z : C} (f : X Z) (g : Y Z) (f' : W X) [HasPullback f g] [HasPullback f' (pullback.fst f g)] :

The canonical isomorphism W ×[X] (X ×[Z] Y) ≅ W ×[Z] Y

Equations
  • One or more equations did not get rendered due to their size.
instance CategoryTheory.Limits.hasPullbackVertPaste {C : Type u} [Category.{v, u} C] {W X Y Z : C} (f : X Z) (g : Y Z) (g' : W Y) [HasPullback f g] [HasPullback (pullback.snd f g) g'] :
def CategoryTheory.Limits.pullbackLeftPullbackSndIso {C : Type u} [Category.{v, u} C] {W X Y Z : C} (f : X Z) (g : Y Z) (g' : W Y) [HasPullback f g] [HasPullback (pullback.snd f g) g'] :

The canonical isomorphism (X ×[Z] Y) ×[Y] W ≅ X ×[Z] W

Equations
  • One or more equations did not get rendered due to their size.
instance CategoryTheory.Limits.instHasPushoutComp {C : Type u} [Category.{v, u} C] {W X Y Z : C} (f : X Y) (g : X Z) (g' : Z W) [HasPushout f g] [HasPushout (pushout.inr f g) g'] :
noncomputable def CategoryTheory.Limits.pushoutLeftPushoutInrIso {C : Type u} [Category.{v, u} C] {W X Y Z : C} (f : X Y) (g : X Z) (g' : Z W) [HasPushout f g] [HasPushout (pushout.inr f g) g'] :

The canonical isomorphism (Y ⨿[X] Z) ⨿[Z] W ≅ Y ⨿[X] W

Equations
  • One or more equations did not get rendered due to their size.
instance CategoryTheory.Limits.hasPushoutVertPaste {C : Type u} [Category.{v, u} C] {W X Y Z : C} (f : X Y) (g : X Z) (f' : Y W) [HasPushout f g] [HasPushout f' (pushout.inl f g)] :
noncomputable def CategoryTheory.Limits.pushoutRightPushoutInlIso {C : Type u} [Category.{v, u} C] {W X Y Z : C} (f : X Y) (g : X Z) (f' : Y W) [HasPushout f g] [HasPushout f' (pushout.inl f g)] :

The canonical isomorphism W ⨿[Y] (Y ⨿[X] Z) ≅ W ⨿[X] Z

Equations
  • One or more equations did not get rendered due to their size.