Theorem: CategoryTheory.Limits.Concrete.widePushout_exists_rep
File: Mathlib/CategoryTheory/Limits/Shapes/ConcreteCategory.lean

tactic: obtain ⟨_ | j, y, rfl⟩ := Concrete.colimit_exists_rep _ x
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
x : (forget C).obj (widePushout B X f)
⊢ (∃ y, (head f) y = x) ∨ ∃ i y, (ι f i) y = x
state_after: case intro.none.intro
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
y : (forget C).obj ((wideSpan B X f).obj none)
⊢ (∃ y_1, (head f) y_1 = (colimit.ι (wideSpan B X f) none) y) ∨
    ∃ i y_1, (ι f i) y_1 = (colimit.ι (wideSpan B X f) none) y

case intro.some.intro
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
j : α
y : (forget C).obj ((wideSpan B X f).obj (some j))
⊢ (∃ y_1, (head f) y_1 = (colimit.ι (wideSpan B X f) (some j)) y) ∨
    ∃ i y_1, (ι f i) y_1 = (colimit.ι (wideSpan B X f) (some j)) y

tactic: left
state_before: case intro.none.intro
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
y : (forget C).obj ((wideSpan B X f).obj none)
⊢ (∃ y_1, (head f) y_1 = (colimit.ι (wideSpan B X f) none) y) ∨
    ∃ i y_1, (ι f i) y_1 = (colimit.ι (wideSpan B X f) none) y
state_after: case intro.none.intro.h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
y : (forget C).obj ((wideSpan B X f).obj none)
⊢ ∃ y_1, (head f) y_1 = (colimit.ι (wideSpan B X f) none) y

tactic: use y
state_before: case intro.none.intro.h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
y : (forget C).obj ((wideSpan B X f).obj none)
⊢ ∃ y_1, (head f) y_1 = (colimit.ι (wideSpan B X f) none) y
state_after: case h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
y : (forget C).obj ((wideSpan B X f).obj none)
⊢ (head f) y = (colimit.ι (wideSpan B X f) none) y

tactic: rfl
state_before: case h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
y : (forget C).obj ((wideSpan B X f).obj none)
⊢ (head f) y = (colimit.ι (wideSpan B X f) none) y
state_after: no goals

tactic: right
state_before: case intro.some.intro
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
j : α
y : (forget C).obj ((wideSpan B X f).obj (some j))
⊢ (∃ y_1, (head f) y_1 = (colimit.ι (wideSpan B X f) (some j)) y) ∨
    ∃ i y_1, (ι f i) y_1 = (colimit.ι (wideSpan B X f) (some j)) y
state_after: case intro.some.intro.h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
j : α
y : (forget C).obj ((wideSpan B X f).obj (some j))
⊢ ∃ i y_1, (ι f i) y_1 = (colimit.ι (wideSpan B X f) (some j)) y

tactic: use j, y
state_before: case intro.some.intro.h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
j : α
y : (forget C).obj ((wideSpan B X f).obj (some j))
⊢ ∃ i y_1, (ι f i) y_1 = (colimit.ι (wideSpan B X f) (some j)) y
state_after: case h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
j : α
y : (forget C).obj ((wideSpan B X f).obj (some j))
⊢ (ι f j) y = (colimit.ι (wideSpan B X f) (some j)) y

tactic: rfl
state_before: case h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
B : C
α : Type v
X : α → C
f : (j : α) → B ⟶ X j
inst✝¹ : HasWidePushout B X f
inst✝ : PreservesColimit (wideSpan B X f) (forget C)
j : α
y : (forget C).obj ((wideSpan B X f).obj (some j))
⊢ (ι f j) y = (colimit.ι (wideSpan B X f) (some j)) y
state_after: no goals