awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W E X Z : C
c : BinaryCofan.{v, u} W E
inst_1 : FinitaryExtensive.{v, u} C
inst_2 : HasPullbacks.{v, u} C
hc : IsColimit c
f : W ⟶ X
h : X ⟶ Z
i : c.pt ⟶ Z
H : IsPushout f c.inl h i
hc₁ : IsColimit (BinaryCofan.mk (c.inr ≫ i) h)
W' X' Y' Z' : C
f' : W' ⟶ X'
g' : W' ⟶ Y'
h' : X' ⟶ Z'
i' : Y' ⟶ Z'
αW : W' ⟶ W
αX : X' ⟶ X
αY :
  Y' ⟶
    Functor.obj.{0, v, 0, u} (Functor.obj (Functor.const (Discrete WalkingPair)) c.pt)
      { as := WalkingPair.left : Discrete WalkingPair }
αZ : Z' ⟶ Z
hf : IsPullback f' αW αX f
hg : IsPullback g' αW αY c.inl
hh : CommSq h' αX αZ h
hi : CommSq i' αY αZ i
w : CommSq f' g' h' i'
hc₂ : IsColimit (F := pair W' (pullback αY c.inr)) (BinaryCofan.mk g' (pullback.fst αY c.inr))
hc₃ :
  IsPullback (P :=
    Functor.obj.{0, v, 0, u} (pair (pullback αY c.inr) X') { as := WalkingPair.left : Discrete WalkingPair })
    (BinaryCofan.inl (BinaryCofan.mk (BinaryCofan.inr (BinaryCofan.mk g' (pullback.fst αY c.inr)) ≫ i') h'))
    (pullback.snd αY c.inr) αZ (BinaryCofan.mk (c.inr ≫ i) h).inl
hc₄_1 :
  IsPullback (BinaryCofan.inr (BinaryCofan.mk (BinaryCofan.inr (BinaryCofan.mk g' (pullback.fst αY c.inr)) ≫ i') h')) αX
    αZ (BinaryCofan.mk (c.inr ≫ i) h).inr
Y'' : C := pullback αZ i
cmp : Y' ⟶ Y'' := pullback.lift i' αY ⋯
e₁ : (g' ≫ cmp) ≫ pullback.snd αZ i = αW ≫ c.inl
e₂ :
  Eq (α := pullback αY c.inr ⟶ c.pt) ((pullback.fst αY c.inr ≫ cmp) ≫ pullback.snd αZ i) (pullback.snd αY c.inr ≫ c.inr)
hc₄ : IsColimit (F := pair W' (pullback αY c.inr)) (BinaryCofan.mk (g' ≫ cmp) (pullback.fst αY c.inr ≫ cmp))
this : cmp = (hc₂.coconePointUniqueUpToIso hc₄).hom
rw : i' ≫ 𝟙 Z' = cmp ≫ pullback.fst αZ i
rw₁ : i' = cmp ≫ pullback.fst αZ i
rw₂ rw₃ : i' = i'
⊢ i' ≫ 𝟙 Z' = (hc₂.coconePointUniqueUpToIso hc₄).hom ≫ pullback.fst αZ i

Tactic:
rw [← this, Category.comp_id, pullback.lift_fst]

Premises used: CategoryTheory.Category.comp_id, CategoryTheory.Limits.pullback.lift_fst
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W E X Z : C
c : BinaryCofan.{v, u} W E
inst_1 : FinitaryExtensive.{v, u} C
inst_2 : HasPullbacks.{v, u} C
hc : IsColimit c
f : W ⟶ X
h : X ⟶ Z
i : c.pt ⟶ Z
H : IsPushout f c.inl h i
hc₁ : IsColimit (BinaryCofan.mk (c.inr ≫ i) h)
W' X' Y' Z' : C
f' : W' ⟶ X'
g' : W' ⟶ Y'
h' : X' ⟶ Z'
i' : Y' ⟶ Z'
αW : W' ⟶ W
αX : X' ⟶ X
αY :
  Y' ⟶
    Functor.obj.{0, v, 0, u} (Functor.obj (Functor.const (Discrete WalkingPair)) c.pt)
      { as := WalkingPair.left : Discrete WalkingPair }
αZ : Z' ⟶ Z
hf : IsPullback f' αW αX f
hg : IsPullback g' αW αY c.inl
hh : CommSq h' αX αZ h
hi : CommSq i' αY αZ i
w : CommSq f' g' h' i'
hc₂ : IsColimit (F := pair W' (pullback αY c.inr)) (BinaryCofan.mk g' (pullback.fst αY c.inr))
hc₃ :
  IsPullback (P :=
    Functor.obj.{0, v, 0, u} (pair (pullback αY c.inr) X') { as := WalkingPair.left : Discrete WalkingPair })
    (BinaryCofan.inl (BinaryCofan.mk (BinaryCofan.inr (BinaryCofan.mk g' (pullback.fst αY c.inr)) ≫ i') h'))
    (pullback.snd αY c.inr) αZ (BinaryCofan.mk (c.inr ≫ i) h).inl
hc₄_1 :
  IsPullback (BinaryCofan.inr (BinaryCofan.mk (BinaryCofan.inr (BinaryCofan.mk g' (pullback.fst αY c.inr)) ≫ i') h')) αX
    αZ (BinaryCofan.mk (c.inr ≫ i) h).inr
Y'' : C := pullback αZ i
cmp : Y' ⟶ Y'' := pullback.lift i' αY ⋯
e₁ : (g' ≫ cmp) ≫ pullback.snd αZ i = αW ≫ c.inl
e₂ :
  Eq (α := pullback αY c.inr ⟶ c.pt) ((pullback.fst αY c.inr ≫ cmp) ≫ pullback.snd αZ i) (pullback.snd αY c.inr ≫ c.inr)
hc₄ : IsColimit (F := pair W' (pullback αY c.inr)) (BinaryCofan.mk (g' ≫ cmp) (pullback.fst αY c.inr ≫ cmp))
this : cmp = (hc₂.coconePointUniqueUpToIso hc₄).hom
⊢ IsPullback i' (hc₂.coconePointUniqueUpToIso hc₄).hom (𝟙 Z') (pullback.fst αZ i)

Tactic:
exact IsPullback.of_vert_isIso ⟨by rw [← this, Category.comp_id, pullback.lift_fst]⟩

Premises used: CategoryTheory.IsPullback.of_vert_isIso, CategoryTheory.CommSq.mk
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W E X Z : C
c : BinaryCofan.{v, u} W E
inst_1 : FinitaryExtensive.{v, u} C
inst_2 : HasPullbacks.{v, u} C
hc : IsColimit c
f : W ⟶ X
h : X ⟶ Z
i : c.pt ⟶ Z
H : IsPushout f c.inl h i
hc₁ : IsColimit (BinaryCofan.mk (c.inr ≫ i) h)
W' X' Y' Z' : C
f' : W' ⟶ X'
g' : W' ⟶ Y'
h' : X' ⟶ Z'
i' : Y' ⟶ Z'
αW : W' ⟶ W
αX : X' ⟶ X
αY :
  Y' ⟶
    Functor.obj.{0, v, 0, u} (Functor.obj (Functor.const (Discrete WalkingPair)) c.pt)
      { as := WalkingPair.left : Discrete WalkingPair }
αZ : Z' ⟶ Z
hf : IsPullback f' αW αX f
hg : IsPullback g' αW αY c.inl
hh : CommSq h' αX αZ h
hi : CommSq i' αY αZ i
w : CommSq f' g' h' i'
hc₂ : IsColimit (F := pair W' (pullback αY c.inr)) (BinaryCofan.mk g' (pullback.fst αY c.inr))
hc₃ : IsPullback h' αX αZ h
hc₄ : IsPullback i' αY αZ i
⊢ IsPullback (P :=
      Functor.obj.{0, v, 0, u} (pair (pullback αY c.inr) X') { as := WalkingPair.left : Discrete WalkingPair })
      (BinaryCofan.inl (BinaryCofan.mk (BinaryCofan.inr (BinaryCofan.mk g' (pullback.fst αY c.inr)) ≫ i') h'))
      (pullback.snd αY c.inr) αZ (BinaryCofan.mk (c.inr ≫ i) h).inl ∧
    IsPullback (BinaryCofan.inr (BinaryCofan.mk (BinaryCofan.inr (BinaryCofan.mk g' (pullback.fst αY c.inr)) ≫ i') h'))
      αX αZ (BinaryCofan.mk (c.inr ≫ i) h).inr

Tactic:
⟨(IsPullback.of_hasPullback αY c.inr).paste_horiz hc₄, hc₃⟩

Premises used: CategoryTheory.Limits.BinaryCofan.inr, And.intro, CategoryTheory.IsPullback.of_hasPullback, CategoryTheory.IsPullback.paste_horiz
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W E X Z : C
c : BinaryCofan.{v, u} W E
inst_1 : FinitaryExtensive.{v, u} C
inst_2 : HasPullbacks.{v, u} C
hc : IsColimit c
f : W ⟶ X
h : X ⟶ Z
i : c.pt ⟶ Z
H : IsPushout f c.inl h i
hc₁ : IsColimit (BinaryCofan.mk (c.inr ≫ i) h)
W' X' Y' Z' : C
f' : W' ⟶ X'
g' : W' ⟶ Y'
h' : X' ⟶ Z'
i' : Y' ⟶ Z'
αW : W' ⟶ W
αX : X' ⟶ X
αY :
  Y' ⟶
    Functor.obj.{0, v, 0, u} (Functor.obj (Functor.const (Discrete WalkingPair)) c.pt)
      { as := WalkingPair.left : Discrete WalkingPair }
αZ : Z' ⟶ Z
hf : IsPullback f' αW αX f
hg : IsPullback g' αW αY c.inl
hh : CommSq h' αX αZ h
hi : CommSq i' αY αZ i
w : CommSq f' g' h' i'
hc₂ : IsColimit (F := pair W' (pullback αY c.inr)) (BinaryCofan.mk g' (pullback.fst αY c.inr))
hc₃ : IsPullback h' αX αZ h
hc₄ : IsPullback i' αY αZ i
⊢ IsPullback (P :=
      Functor.obj.{0, v, 0, u} (pair (pullback αY c.inr) X') { as := WalkingPair.left : Discrete WalkingPair })
      (BinaryCofan.inl (BinaryCofan.mk (BinaryCofan.inr (BinaryCofan.mk g' (pullback.fst αY c.inr)) ≫ i') h'))
      (pullback.snd αY c.inr) αZ (BinaryCofan.mk (c.inr ≫ i) h).inl ∧
    IsPullback (BinaryCofan.inr (BinaryCofan.mk (BinaryCofan.inr (BinaryCofan.mk g' (pullback.fst αY c.inr)) ≫ i') h'))
      αX αZ (BinaryCofan.mk (c.inr ≫ i) h).inr

Tactic:
exact ⟨(IsPullback.of_hasPullback αY c.inr).paste_horiz hc₄, hc₃⟩
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W X Y Z : C
f : W ⟶ X
g : W ⟶ Y
h : X ⟶ Z
i : Y ⟶ Z
inst_1 : Mono f
H : IsPushout f g h i
H' : H.IsVanKampen
⊢ g ≫ 𝟙 Y = 𝟙 W ≫ g

Tactic:
simp
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W X Y Z : C
f : W ⟶ X
g : W ⟶ Y
h : X ⟶ Z
i : Y ⟶ Z
inst_1 : Mono f
H : IsPushout f g h i
H' : H.IsVanKampen
⊢ 𝟙 W ≫ g = g ≫ 𝟙 Y

Tactic:
simp
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W X Y Z : C
f : W ⟶ X
g : W ⟶ Y
h : X ⟶ Z
i : Y ⟶ Z
inst_1 : Mono g
H : IsPushout f g h i
H' : H.IsVanKampen
⊢ f ≫ 𝟙 X = 𝟙 W ≫ f

Tactic:
simp
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W X Y Z : C
f : W ⟶ X
g : W ⟶ Y
h : X ⟶ Z
i : Y ⟶ Z
inst_1 : Adhesive.{v, u} C
inst_2 : Mono g
H : IsPushout f g h i
⊢ H.IsVanKampen

Tactic:
(Adhesive.van_kampen H.flip).flip

Premises used: CategoryTheory.Adhesive.van_kampen, CategoryTheory.IsPushout.flip, CategoryTheory.IsPushout.IsVanKampen.flip
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W X Y Z : C
f : W ⟶ X
g : W ⟶ Y
h : X ⟶ Z
i : Y ⟶ Z
inst_1 : Adhesive.{v, u} C
H : IsPushout f g h i
inst_2 : Mono f
⊢ IsPullback f g h i

Tactic:
(Adhesive.van_kampen H).isPullback_of_mono_left

Premises used: CategoryTheory.IsPushout.IsVanKampen.isPullback_of_mono_left, CategoryTheory.Adhesive.van_kampen
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W X Y Z : C
f : W ⟶ X
g : W ⟶ Y
h : X ⟶ Z
i : Y ⟶ Z
inst_1 : Adhesive.{v, u} C
H : IsPushout f g h i
inst_2 : Mono g
⊢ IsPullback f g h i

Tactic:
(Adhesive.van_kampen' H).isPullback_of_mono_right

Premises used: CategoryTheory.IsPushout.IsVanKampen.isPullback_of_mono_right, CategoryTheory.Adhesive.van_kampen'
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W X Y Z : C
f : W ⟶ X
g : W ⟶ Y
h : X ⟶ Z
i : Y ⟶ Z
inst_1 : Adhesive.{v, u} C
H : IsPushout f g h i
inst_2 : Mono f
⊢ Mono i

Tactic:
(Adhesive.van_kampen H).mono_of_mono_left

Premises used: CategoryTheory.Adhesive.van_kampen, CategoryTheory.IsPushout.IsVanKampen.mono_of_mono_left
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W X Y Z : C
f : W ⟶ X
g : W ⟶ Y
h : X ⟶ Z
i : Y ⟶ Z
inst_1 : Adhesive.{v, u} C
H : IsPushout f g h i
inst_2 : Mono g
⊢ Mono h

Tactic:
(Adhesive.van_kampen' H).mono_of_mono_right

Premises used: CategoryTheory.Adhesive.van_kampen', CategoryTheory.IsPushout.IsVanKampen.mono_of_mono_right
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
C : Type u
inst : Category.{v, u} C
W_1 X Y Z : C
f : W_1 ⟶ X
g : W_1 ⟶ Y
h : X ⟶ Z
i : Y ⟶ Z
inst_1 : Adhesive.{v, u} C
inst_2 : Mono f
H : IsPushout f g h i
X' Y' Z' : C
h' : X' ⟶ Z'
i' : Y' ⟶ Z'
αX : X' ⟶ X
αY : Y' ⟶ Y
αZ : Z' ⟶ Z
W : C
f₁ f₂ : Z' ⟶ W
hh : IsPullback h' αX αZ h
hi : IsPullback i' αY αZ i
h'_w : h' ≫ f₁ = h' ≫ f₂
i'_w : i' ≫ f₁ = i' ≫ f₂
⊢ f₁ = f₂

Tactic:
IsPushout.isVanKampen_isPullback_isPullback_hom_ext (Adhesive.van_kampen H) hh hi h'_w i'_w

Premises used: CategoryTheory.IsPushout.isVanKampen_isPullback_isPullback_hom_ext, CategoryTheory.Adhesive.van_kampen
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
J : Type v'
inst : Category.{u', v'} J
C : Type u
inst_1 : Category.{v, u} C
W X Y Z_1 : C
f_1 : W ⟶ X
g_1 : W ⟶ Y
h : X ⟶ Z_1
i : Y ⟶ Z_1
inst_2 : Adhesive.{v, u} C
Z A B : C
a : A ⟶ Z
b : B ⟶ Z
inst_3 : Mono a
inst_4 : Mono b
K : C
f g : K ⟶ pushout (X := pullback a b) (fst a b) (snd a b)
w : f ≫ pushout.desc a b ⋯ = g ≫ pushout.desc a b ⋯
u : A ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inl (fst a b) (snd a b)
v : B ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inr (fst a b) (snd a b)
this_1 : Mono u := ⋯
this : Mono v := ⋯
sq_f_u : IsPullback (P := pullback f u) (fst f u) (snd f u) f u := ⋯
sq_f_v : IsPullback (P := pullback f v) (fst f v) (snd f v) f v := ⋯
sq_g_u : IsPullback (P := pullback g u) (fst g u) (snd g u) g u := ⋯
sq_g_v : IsPullback (P := pullback g v) (fst g v) (snd g v) g v := ⋯
l₁ : pullback f u ⟶ K := fst f u
f₁ : pullback f u ⟶ A := snd f u
l₂ : pullback f v ⟶ K := fst f v
f₂ : pullback f v ⟶ B := snd f v
m₁ : pullback g u ⟶ K := fst g u
g₁ : pullback g u ⟶ A := snd g u
m₂ : pullback g v ⟶ K := fst g v
g₂ : pullback g v ⟶ B := snd g v
obtain :
  ∀ (w : C) (f' : w ⟶ pullback f u) (w_1 : w ⟶ pullback f v) (w_2 : w ⟶ pullback a b)
    (p₁ : IsPullback f' w_2 (snd f u) (fst a b)),
    IsPullback w_1 w_2 (snd f v) (snd a b) → ∀ (h₁ : IsPushout f' w_1 (fst f u) (fst f v)), f = g
⊢ f = g

Tactic:
obtain ⟨_, f', _, _, p₁, _, h₁⟩ :=
      (van_kampen (of_hasPushout _ _)).exists_cube_filling sq_f_u sq_f_v

Premises used: CategoryTheory.IsPushout.of_hasPushout, CategoryTheory.Adhesive.van_kampen, CategoryTheory.IsPushout.IsVanKampen.exists_cube_filling
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
J : Type v'
inst : Category.{u', v'} J
C : Type u
inst_1 : Category.{v, u} C
W X Y Z_1 : C
f_1 : W ⟶ X
g_1 : W ⟶ Y
h : X ⟶ Z_1
i : Y ⟶ Z_1
inst_2 : Adhesive.{v, u} C
Z A B : C
a : A ⟶ Z
b : B ⟶ Z
inst_3 : Mono a
inst_4 : Mono b
K : C
f g : K ⟶ pushout (X := pullback a b) (fst a b) (snd a b)
w : f ≫ pushout.desc a b ⋯ = g ≫ pushout.desc a b ⋯
u : A ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inl (fst a b) (snd a b)
v : B ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inr (fst a b) (snd a b)
this_1 : Mono u := ⋯
this : Mono v := ⋯
sq_f_u : IsPullback (P := pullback f u) (fst f u) (snd f u) f u := ⋯
sq_f_v : IsPullback (P := pullback f v) (fst f v) (snd f v) f v := ⋯
sq_g_u : IsPullback (P := pullback g u) (fst g u) (snd g u) g u := ⋯
sq_g_v : IsPullback (P := pullback g v) (fst g v) (snd g v) g v := ⋯
l₁ : pullback f u ⟶ K := fst f u
f₁ : pullback f u ⟶ A := snd f u
l₂ : pullback f v ⟶ K := fst f v
f₂ : pullback f v ⟶ B := snd f v
m₁ : pullback g u ⟶ K := fst g u
g₁ : pullback g u ⟶ A := snd g u
m₂ : pullback g v ⟶ K := fst g v
g₂ : pullback g v ⟶ B := snd g v
w_1 : C
f' : w_1 ⟶ pullback f u
w_2 : w_1 ⟶ pullback f v
w_3 : w_1 ⟶ pullback a b
p₁ : IsPullback f' w_3 (snd f u) (fst a b)
left : IsPullback w_2 w_3 (snd f v) (snd a b)
h₁ : IsPushout f' w_2 (fst f u) (fst f v)
rw :
  Mono
    (CategoryStruct.comp (Y := pullback (X := pullback f u) (Y := pullback a b) (snd f u) (fst a b))
      (Iso.hom p₁.isoPullback) (fst (snd f u) (fst a b)))
⊢ Mono f'

Tactic:
rw [← p₁.isoPullback_hom_fst]

Premises used: CategoryTheory.IsPullback.isoPullback_hom_fst
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
J : Type v'
inst : Category.{u', v'} J
C : Type u
inst_1 : Category.{v, u} C
W X Y Z_1 : C
f_1 : W ⟶ X
g_1 : W ⟶ Y
h : X ⟶ Z_1
i : Y ⟶ Z_1
inst_2 : Adhesive.{v, u} C
Z A B : C
a : A ⟶ Z
b : B ⟶ Z
inst_3 : Mono a
inst_4 : Mono b
K : C
f g : K ⟶ pushout (X := pullback a b) (fst a b) (snd a b)
w : f ≫ pushout.desc a b ⋯ = g ≫ pushout.desc a b ⋯
u : A ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inl (fst a b) (snd a b)
v : B ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inr (fst a b) (snd a b)
this_1 : Mono u := ⋯
this : Mono v := ⋯
sq_f_u : IsPullback (P := pullback f u) (fst f u) (snd f u) f u := ⋯
sq_f_v : IsPullback (P := pullback f v) (fst f v) (snd f v) f v := ⋯
sq_g_u : IsPullback (P := pullback g u) (fst g u) (snd g u) g u := ⋯
sq_g_v : IsPullback (P := pullback g v) (fst g v) (snd g v) g v := ⋯
l₁ : pullback f u ⟶ K := fst f u
f₁ : pullback f u ⟶ A := snd f u
l₂ : pullback f v ⟶ K := fst f v
f₂ : pullback f v ⟶ B := snd f v
m₁ : pullback g u ⟶ K := fst g u
g₁ : pullback g u ⟶ A := snd g u
m₂ : pullback g v ⟶ K := fst g v
g₂ : pullback g v ⟶ B := snd g v
w_1 : C
f' : w_1 ⟶ pullback f u
w_2 : w_1 ⟶ pullback f v
w_3 : w_1 ⟶ pullback a b
p₁ : IsPullback f' w_3 (snd f u) (fst a b)
left : IsPullback w_2 w_3 (snd f v) (snd a b)
h₁ : IsPushout f' w_2 (fst f u) (fst f v)
⊢ Mono
    (CategoryStruct.comp (Y := pullback (X := pullback f u) (Y := pullback a b) (snd f u) (fst a b))
      (Iso.hom p₁.isoPullback) (fst (snd f u) (fst a b)))

Tactic:
infer_instance
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
J : Type v'
inst : Category.{u', v'} J
C : Type u
inst_1 : Category.{v, u} C
W X Y Z_1 : C
f_1 : W ⟶ X
g_1 : W ⟶ Y
h : X ⟶ Z_1
i : Y ⟶ Z_1
inst_2 : Adhesive.{v, u} C
Z A B : C
a : A ⟶ Z
b : B ⟶ Z
inst_3 : Mono a
inst_4 : Mono b
K : C
f g : K ⟶ pushout (X := pullback a b) (fst a b) (snd a b)
w : f ≫ pushout.desc a b ⋯ = g ≫ pushout.desc a b ⋯
u : A ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inl (fst a b) (snd a b)
v : B ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inr (fst a b) (snd a b)
this_1 : Mono u := ⋯
this_2 : Mono v := ⋯
sq_f_u : IsPullback (P := pullback f u) (fst f u) (snd f u) f u := ⋯
sq_f_v : IsPullback (P := pullback f v) (fst f v) (snd f v) f v := ⋯
sq_g_u : IsPullback (P := pullback g u) (fst g u) (snd g u) g u := ⋯
sq_g_v : IsPullback (P := pullback g v) (fst g v) (snd g v) g v := ⋯
l₁ : pullback f u ⟶ K := fst f u
f₁ : pullback f u ⟶ A := snd f u
l₂ : pullback f v ⟶ K := fst f v
f₂ : pullback f v ⟶ B := snd f v
m₁ : pullback g u ⟶ K := fst g u
g₁ : pullback g u ⟶ A := snd g u
m₂ : pullback g v ⟶ K := fst g v
g₂ : pullback g v ⟶ B := snd g v
w_1 : C
f' : w_1 ⟶ pullback f u
w_2 : w_1 ⟶ pullback f v
w_3 : w_1 ⟶ pullback a b
p₁ : IsPullback f' w_3 (snd f u) (fst a b)
left : IsPullback w_2 w_3 (snd f v) (snd a b)
h₁ : IsPushout f' w_2 (fst f u) (fst f v)
this : Mono f' := ⋯
h'_w : Eq (α := pullback g u ⟶ pushout (X := pullback a b) (fst a b) (snd a b)) (fst g u ≫ f) (fst g u ≫ g)
i'_w : Eq (α := pullback g v ⟶ pushout (X := pullback a b) (fst a b) (snd a b)) (fst g v ≫ f) (fst g v ≫ g)
⊢ f = g

Tactic:
apply isPushout_isPullback_isPullback_hom_ext (of_hasPushout _ _) sq_g_u sq_g_v

Premises used: CategoryTheory.IsPushout.of_hasPushout, CategoryTheory.Adhesive.isPushout_isPullback_isPullback_hom_ext
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
J : Type v'
inst : Category.{u', v'} J
C : Type u
inst_1 : Category.{v, u} C
W X Y Z_1 : C
f_1 : W ⟶ X
g_1 : W ⟶ Y
h : X ⟶ Z_1
i : Y ⟶ Z_1
inst_2 : Adhesive.{v, u} C
Z A B : C
a : A ⟶ Z
b : B ⟶ Z
inst_3 : Mono a
inst_4 : Mono b
K : C
f g : K ⟶ pushout (X := pullback a b) (fst a b) (snd a b)
w : f ≫ pushout.desc a b ⋯ = g ≫ pushout.desc a b ⋯
u : A ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inl (fst a b) (snd a b)
v : B ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inr (fst a b) (snd a b)
this_1 : Mono u := ⋯
this_2 : Mono v := ⋯
sq_f_u : IsPullback (P := pullback f u) (fst f u) (snd f u) f u := ⋯
sq_f_v : IsPullback (P := pullback f v) (fst f v) (snd f v) f v := ⋯
sq_g_u : IsPullback (P := pullback g u) (fst g u) (snd g u) g u := ⋯
sq_g_v : IsPullback (P := pullback g v) (fst g v) (snd g v) g v := ⋯
l₁ : pullback f u ⟶ K := fst f u
f₁ : pullback f u ⟶ A := snd f u
l₂ : pullback f v ⟶ K := fst f v
f₂ : pullback f v ⟶ B := snd f v
m₁ : pullback g u ⟶ K := fst g u
g₁ : pullback g u ⟶ A := snd g u
m₂ : pullback g v ⟶ K := fst g v
g₂ : pullback g v ⟶ B := snd g v
w_1 : C
f' : w_1 ⟶ pullback f u
w_2 : w_1 ⟶ pullback f v
w_3 : w_1 ⟶ pullback a b
p₁ : IsPullback f' w_3 (snd f u) (fst a b)
left : IsPullback w_2 w_3 (snd f v) (snd a b)
h₁ : IsPushout f' w_2 (fst f u) (fst f v)
this : Mono f' := ⋯
sq₁₁ : IsPullback (P := pullback m₁ l₁) (fst m₁ l₁) (snd m₁ l₁) m₁ l₁ := ⋯
sq₁₂ : IsPullback (P := pullback m₁ l₂) (fst m₁ l₂) (snd m₁ l₂) m₁ l₂ := ⋯
h'_w :
  Eq (α := pullback m₁ l₁ ⟶ pushout (X := pullback a b) (fst a b) (snd a b)) (fst m₁ l₁ ≫ fst g u ≫ f)
    (fst m₁ l₁ ≫ fst g u ≫ g)
h'_w₁ :
  Eq (α := pullback m₁ l₂ ⟶ pushout (X := pullback a b) (fst a b) (snd a b)) (fst m₁ l₂ ≫ fst g u ≫ f)
    (fst m₁ l₂ ≫ fst g u ≫ g)
⊢ Eq (α := pullback g u ⟶ pushout (X := pullback a b) (fst a b) (snd a b)) (fst g u ≫ f) (fst g u ≫ g)

Tactic:
apply isPushout_isPullback_isPullback_hom_ext h₁ sq₁₁ sq₁₂

Premises used: CategoryTheory.Adhesive.isPushout_isPullback_isPullback_hom_ext
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
J : Type v'
inst : Category.{u', v'} J
C : Type u
inst_1 : Category.{v, u} C
W X Y Z_1 : C
f_1 : W ⟶ X
g_1 : W ⟶ Y
h : X ⟶ Z_1
i : Y ⟶ Z_1
inst_2 : Adhesive.{v, u} C
Z A B : C
a : A ⟶ Z
b : B ⟶ Z
inst_3 : Mono a
inst_4 : Mono b
K : C
f g : K ⟶ pushout (X := pullback a b) (fst a b) (snd a b)
w : f ≫ pushout.desc a b ⋯ = g ≫ pushout.desc a b ⋯
u : A ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inl (fst a b) (snd a b)
v : B ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inr (fst a b) (snd a b)
this_1 : Mono u := ⋯
this_2 : Mono v := ⋯
sq_f_u : IsPullback (P := pullback f u) (fst f u) (snd f u) f u := ⋯
sq_f_v : IsPullback (P := pullback f v) (fst f v) (snd f v) f v := ⋯
sq_g_u : IsPullback (P := pullback g u) (fst g u) (snd g u) g u := ⋯
sq_g_v : IsPullback (P := pullback g v) (fst g v) (snd g v) g v := ⋯
l₁ : pullback f u ⟶ K := fst f u
f₁ : pullback f u ⟶ A := snd f u
l₂ : pullback f v ⟶ K := fst f v
f₂ : pullback f v ⟶ B := snd f v
m₁ : pullback g u ⟶ K := fst g u
g₁ : pullback g u ⟶ A := snd g u
m₂ : pullback g v ⟶ K := fst g v
g₂ : pullback g v ⟶ B := snd g v
w_1 : C
f' : w_1 ⟶ pullback f u
w_2 : w_1 ⟶ pullback f v
w_3 : w_1 ⟶ pullback a b
p₁ : IsPullback f' w_3 (snd f u) (fst a b)
left : IsPullback w_2 w_3 (snd f v) (snd a b)
h₁ : IsPushout f' w_2 (fst f u) (fst f v)
this : Mono f' := ⋯
sq₁₁ : IsPullback (P := pullback m₁ l₁) (fst m₁ l₁) (snd m₁ l₁) m₁ l₁ := ⋯
sq₁₂ : IsPullback (P := pullback m₁ l₂) (fst m₁ l₂) (snd m₁ l₂) m₁ l₂ := ⋯
h'_w :
  Eq (α := pullback m₁ l₁ ⟶ pushout (X := pullback a b) (fst a b) (snd a b)) ((snd m₁ l₁ ≫ snd f u) ≫ u)
    ((fst m₁ l₁ ≫ snd g u) ≫ u)
⊢ Eq (α := pullback m₁ l₁ ⟶ pushout (X := pullback a b) (fst a b) (snd a b)) (fst m₁ l₁ ≫ fst g u ≫ f)
    (fst m₁ l₁ ≫ fst g u ≫ g)

Tactic:
rw [pullback.condition_assoc, sq_f_u.w, sq_g_u.w, ← Category.assoc, ← Category.assoc]

Premises used: CategoryTheory.Category.assoc, CategoryTheory.Limits.pullback.condition_assoc, CategoryTheory.IsPullback.toCommSq, CategoryTheory.CommSq.w
-- Module: Mathlib.CategoryTheory.Adhesive.Basic
Goal:
J : Type v'
inst : Category.{u', v'} J
C : Type u
inst_1 : Category.{v, u} C
W X Y Z_1 : C
f_1 : W ⟶ X
g_1 : W ⟶ Y
h : X ⟶ Z_1
i : Y ⟶ Z_1
inst_2 : Adhesive.{v, u} C
Z A B : C
a : A ⟶ Z
b : B ⟶ Z
inst_3 : Mono a
inst_4 : Mono b
K : C
f g : K ⟶ pushout (X := pullback a b) (fst a b) (snd a b)
w : f ≫ pushout.desc a b ⋯ = g ≫ pushout.desc a b ⋯
u : A ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inl (fst a b) (snd a b)
v : B ⟶ pushout (X := pullback a b) (fst a b) (snd a b) := inr (fst a b) (snd a b)
this_1 : Mono u := ⋯
this_2 : Mono v := ⋯
sq_f_u : IsPullback (P := pullback f u) (fst f u) (snd f u) f u := ⋯
sq_f_v : IsPullback (P := pullback f v) (fst f v) (snd f v) f v := ⋯
sq_g_u : IsPullback (P := pullback g u) (fst g u) (snd g u) g u := ⋯
sq_g_v : IsPullback (P := pullback g v) (fst g v) (snd g v) g v := ⋯
l₁ : pullback f u ⟶ K := fst f u
f₁ : pullback f u ⟶ A := snd f u
l₂ : pullback f v ⟶ K := fst f v
f₂ : pullback f v ⟶ B := snd f v
m₁ : pullback g u ⟶ K := fst g u
g₁ : pullback g u ⟶ A := snd g u
m₂ : pullback g v ⟶ K := fst g v
g₂ : pullback g v ⟶ B := snd g v
w_1 : C
f' : w_1 ⟶ pullback f u
w_2 : w_1 ⟶ pullback f v
w_3 : w_1 ⟶ pullback a b
p₁ : IsPullback f' w_3 (snd f u) (fst a b)
left : IsPullback w_2 w_3 (snd f v) (snd a b)
h₁ : IsPushout f' w_2 (fst f u) (fst f v)
this : Mono f' := ⋯
sq₁₁ : IsPullback (P := pullback m₁ l₁) (fst m₁ l₁) (snd m₁ l₁) m₁ l₁ := ⋯
sq₁₂ : IsPullback (P := pullback m₁ l₂) (fst m₁ l₂) (snd m₁ l₂) m₁ l₂ := ⋯
⊢ Eq (α := pullback m₁ l₁ ⟶ pushout (X := pullback a b) (fst a b) (snd a b)) ((snd m₁ l₁ ≫ snd f u) ≫ u)
    ((fst m₁ l₁ ≫ snd g u) ≫ u)

Tactic:
?_ =≫ u

Premises used: CategoryTheory.eq_whisker