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

tactic: apply Concrete.limit_ext
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
I : MulticospanIndex C
inst✝¹ : HasMultiequalizer I
inst✝ : PreservesLimit I.multicospan (forget C)
x y : (forget C).obj (multiequalizer I)
h : ∀ (t : I.L), (Multiequalizer.ι I t) x = (Multiequalizer.ι I t) y
⊢ x = y
state_after: case a
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
I : MulticospanIndex C
inst✝¹ : HasMultiequalizer I
inst✝ : PreservesLimit I.multicospan (forget C)
x y : (forget C).obj (multiequalizer I)
h : ∀ (t : I.L), (Multiequalizer.ι I t) x = (Multiequalizer.ι I t) y
⊢ ∀ (j : WalkingMulticospan I.fstTo I.sndTo), (limit.π I.multicospan j) x = (limit.π I.multicospan j) y

tactic: rintro (a | b)
state_before: case a
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
I : MulticospanIndex C
inst✝¹ : HasMultiequalizer I
inst✝ : PreservesLimit I.multicospan (forget C)
x y : (forget C).obj (multiequalizer I)
h : ∀ (t : I.L), (Multiequalizer.ι I t) x = (Multiequalizer.ι I t) y
⊢ ∀ (j : WalkingMulticospan I.fstTo I.sndTo), (limit.π I.multicospan j) x = (limit.π I.multicospan j) y
state_after: case a.left
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
I : MulticospanIndex C
inst✝¹ : HasMultiequalizer I
inst✝ : PreservesLimit I.multicospan (forget C)
x y : (forget C).obj (multiequalizer I)
h : ∀ (t : I.L), (Multiequalizer.ι I t) x = (Multiequalizer.ι I t) y
a : I.L
⊢ (limit.π I.multicospan (WalkingMulticospan.left a)) x = (limit.π I.multicospan (WalkingMulticospan.left a)) y

case a.right
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
I : MulticospanIndex C
inst✝¹ : HasMultiequalizer I
inst✝ : PreservesLimit I.multicospan (forget C)
x y : (forget C).obj (multiequalizer I)
h : ∀ (t : I.L), (Multiequalizer.ι I t) x = (Multiequalizer.ι I t) y
b : I.R
⊢ (limit.π I.multicospan (WalkingMulticospan.right b)) x = (limit.π I.multicospan (WalkingMulticospan.right b)) y

tactic: apply h
state_before: case a.left
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
I : MulticospanIndex C
inst✝¹ : HasMultiequalizer I
inst✝ : PreservesLimit I.multicospan (forget C)
x y : (forget C).obj (multiequalizer I)
h : ∀ (t : I.L), (Multiequalizer.ι I t) x = (Multiequalizer.ι I t) y
a : I.L
⊢ (limit.π I.multicospan (WalkingMulticospan.left a)) x = (limit.π I.multicospan (WalkingMulticospan.left a)) y
state_after: no goals

tactic: rw [← limit.w I.multicospan (WalkingMulticospan.Hom.fst b), comp_apply, comp_apply]
state_before: case a.right
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
I : MulticospanIndex C
inst✝¹ : HasMultiequalizer I
inst✝ : PreservesLimit I.multicospan (forget C)
x y : (forget C).obj (multiequalizer I)
h : ∀ (t : I.L), (Multiequalizer.ι I t) x = (Multiequalizer.ι I t) y
b : I.R
⊢ (limit.π I.multicospan (WalkingMulticospan.right b)) x = (limit.π I.multicospan (WalkingMulticospan.right b)) y
state_after: case a.right
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
I : MulticospanIndex C
inst✝¹ : HasMultiequalizer I
inst✝ : PreservesLimit I.multicospan (forget C)
x y : (forget C).obj (multiequalizer I)
h : ∀ (t : I.L), (Multiequalizer.ι I t) x = (Multiequalizer.ι I t) y
b : I.R
⊢ (I.multicospan.map (WalkingMulticospan.Hom.fst b)) ((limit.π I.multicospan (WalkingMulticospan.left (I.fstTo b))) x) =
    (I.multicospan.map (WalkingMulticospan.Hom.fst b)) ((limit.π I.multicospan (WalkingMulticospan.left (I.fstTo b))) y)

tactic: simp [h]
state_before: case a.right
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : ConcreteCategory C
I : MulticospanIndex C
inst✝¹ : HasMultiequalizer I
inst✝ : PreservesLimit I.multicospan (forget C)
x y : (forget C).obj (multiequalizer I)
h : ∀ (t : I.L), (Multiequalizer.ι I t) x = (Multiequalizer.ι I t) y
b : I.R
⊢ (I.multicospan.map (WalkingMulticospan.Hom.fst b)) ((limit.π I.multicospan (WalkingMulticospan.left (I.fstTo b))) x) =
    (I.multicospan.map (WalkingMulticospan.Hom.fst b)) ((limit.π I.multicospan (WalkingMulticospan.left (I.fstTo b))) y)
state_after: no goals