Theorem: TopCat.range_pullback_map
File: Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean

tactic: ext
state_before: J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
⊢ Set.range ⇑(pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) =
    ⇑pullback.fst ⁻¹' Set.range ⇑i₁ ∩ ⇑pullback.snd ⁻¹' Set.range ⇑i₂
state_after: case h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
⊢ x✝ ∈ Set.range ⇑(pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) ↔
    x✝ ∈ ⇑pullback.fst ⁻¹' Set.range ⇑i₁ ∩ ⇑pullback.snd ⁻¹' Set.range ⇑i₂

tactic: constructor
state_before: case h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
⊢ x✝ ∈ Set.range ⇑(pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) ↔
    x✝ ∈ ⇑pullback.fst ⁻¹' Set.range ⇑i₁ ∩ ⇑pullback.snd ⁻¹' Set.range ⇑i₂
state_after: case h.mp
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
⊢ x✝ ∈ Set.range ⇑(pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) →
    x✝ ∈ ⇑pullback.fst ⁻¹' Set.range ⇑i₁ ∩ ⇑pullback.snd ⁻¹' Set.range ⇑i₂

case h.mpr
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
⊢ x✝ ∈ ⇑pullback.fst ⁻¹' Set.range ⇑i₁ ∩ ⇑pullback.snd ⁻¹' Set.range ⇑i₂ →
    x✝ ∈ Set.range ⇑(pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)

tactic: rintro ⟨⟨x₁, hx₁⟩, ⟨x₂, hx₂⟩⟩
state_before: case h.mpr
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
⊢ x✝ ∈ ⇑pullback.fst ⁻¹' Set.range ⇑i₁ ∩ ⇑pullback.snd ⁻¹' Set.range ⇑i₂ →
    x✝ ∈ Set.range ⇑(pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)
state_after: case h.mpr.intro.intro.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
⊢ x✝ ∈ Set.range ⇑(pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)

tactic: have : f₁ x₁ = f₂ x₂ := by
  apply (TopCat.mono_iff_injective _).mp H₃
  erw [← comp_apply, eq₁, ← comp_apply, eq₂, comp_apply, comp_apply, hx₁, hx₂, ← comp_apply, pullback.condition]
  rfl
state_before: case h.mpr.intro.intro.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
⊢ x✝ ∈ Set.range ⇑(pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)
state_after: case h.mpr.intro.intro.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ x✝ ∈ Set.range ⇑(pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)

tactic: use (pullbackIsoProdSubtype f₁ f₂).inv ⟨⟨x₁, x₂⟩, this⟩
state_before: case h.mpr.intro.intro.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ x✝ ∈ Set.range ⇑(pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)
state_after: case h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) ((pullbackIsoProdSubtype f₁ f₂).inv ⟨(x₁, x₂), this⟩) = x✝

tactic: change (forget TopCat).map _ _ = _
state_before: case h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) ((pullbackIsoProdSubtype f₁ f₂).inv ⟨(x₁, x₂), this⟩) = x✝
state_after: case h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ (forget TopCat).map (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)
      ((pullbackIsoProdSubtype f₁ f₂).inv ⟨(x₁, x₂), this⟩) =
    x✝

tactic: apply Concrete.limit_ext
state_before: case h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ (forget TopCat).map (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)
      ((pullbackIsoProdSubtype f₁ f₂).inv ⟨(x₁, x₂), this⟩) =
    x✝
state_after: case h.a
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ∀ (j : WalkingCospan),
    (limit.π (cospan g₁ g₂) j)
        ((forget TopCat).map (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)
          ((pullbackIsoProdSubtype f₁ f₂).inv ⟨(x₁, x₂), this⟩)) =
      (limit.π (cospan g₁ g₂) j) x✝

tactic: rintro (_ | _ | _) <;>
erw [← comp_apply, ← comp_apply]
state_before: case h.a
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ∀ (j : WalkingCospan),
    (limit.π (cospan g₁ g₂) j)
        ((forget TopCat).map (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂)
          ((pullbackIsoProdSubtype f₁ f₂).inv ⟨(x₁, x₂), this⟩)) =
      (limit.π (cospan g₁ g₂) j) x✝
state_after: case h.a.none
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫ pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ limit.π (cospan g₁ g₂) none)
      ⟨(x₁, x₂), this⟩ =
    (limit.π (cospan g₁ g₂) none) x✝

case h.a.some.left
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫
        pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ limit.π (cospan g₁ g₂) (some WalkingPair.left))
      ⟨(x₁, x₂), this⟩ =
    (limit.π (cospan g₁ g₂) (some WalkingPair.left)) x✝

case h.a.some.right
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫
        pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ limit.π (cospan g₁ g₂) (some WalkingPair.right))
      ⟨(x₁, x₂), this⟩ =
    (limit.π (cospan g₁ g₂) (some WalkingPair.right)) x✝

tactic: simp only [Category.assoc, limit.lift_π, PullbackCone.mk_π_app_one]
state_before: case h.a.none
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫ pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ limit.π (cospan g₁ g₂) none)
      ⟨(x₁, x₂), this⟩ =
    (limit.π (cospan g₁ g₂) none) x✝

case h.a.some.left
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫
        pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ limit.π (cospan g₁ g₂) (some WalkingPair.left))
      ⟨(x₁, x₂), this⟩ =
    (limit.π (cospan g₁ g₂) (some WalkingPair.left)) x✝

case h.a.some.right
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫
        pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ limit.π (cospan g₁ g₂) (some WalkingPair.right))
      ⟨(x₁, x₂), this⟩ =
    (limit.π (cospan g₁ g₂) (some WalkingPair.right)) x✝
state_after: case h.a.none
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫ pullback.fst ≫ i₁ ≫ g₁) ⟨(x₁, x₂), this⟩ = (limit.π (cospan g₁ g₂) none) x✝

case h.a.some.left
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫
        pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ limit.π (cospan g₁ g₂) (some WalkingPair.left))
      ⟨(x₁, x₂), this⟩ =
    (limit.π (cospan g₁ g₂) (some WalkingPair.left)) x✝

case h.a.some.right
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫
        pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ limit.π (cospan g₁ g₂) (some WalkingPair.right))
      ⟨(x₁, x₂), this⟩ =
    (limit.π (cospan g₁ g₂) (some WalkingPair.right)) x✝

tactic: rintro ⟨y, rfl⟩
state_before: case h.mp
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
⊢ x✝ ∈ Set.range ⇑(pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) →
    x✝ ∈ ⇑pullback.fst ⁻¹' Set.range ⇑i₁ ∩ ⇑pullback.snd ⁻¹' Set.range ⇑i₂
state_after: case h.mp.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
y : ↑(pullback f₁ f₂)
⊢ (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) y ∈ ⇑pullback.fst ⁻¹' Set.range ⇑i₁ ∩ ⇑pullback.snd ⁻¹' Set.range ⇑i₂

tactic: simp only [Set.mem_inter_iff, Set.mem_preimage, Set.mem_range]
state_before: case h.mp.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
y : ↑(pullback f₁ f₂)
⊢ (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) y ∈ ⇑pullback.fst ⁻¹' Set.range ⇑i₁ ∩ ⇑pullback.snd ⁻¹' Set.range ⇑i₂
state_after: case h.mp.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
y : ↑(pullback f₁ f₂)
⊢ (∃ y_1, i₁ y_1 = pullback.fst ((pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) y)) ∧
    ∃ y_1, i₂ y_1 = pullback.snd ((pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) y)

tactic: erw [← comp_apply, ← comp_apply]
state_before: case h.mp.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
y : ↑(pullback f₁ f₂)
⊢ (∃ y_1, i₁ y_1 = pullback.fst ((pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) y)) ∧
    ∃ y_1, i₂ y_1 = pullback.snd ((pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂) y)
state_after: case h.mp.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
y : ↑(pullback f₁ f₂)
⊢ (∃ y_1, i₁ y_1 = (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ pullback.fst) y) ∧
    ∃ y_1, i₂ y_1 = (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ pullback.snd) y

tactic: simp only [limit.lift_π, PullbackCone.mk_pt, PullbackCone.mk_π_app, comp_apply]
state_before: case h.mp.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
y : ↑(pullback f₁ f₂)
⊢ (∃ y_1, i₁ y_1 = (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ pullback.fst) y) ∧
    ∃ y_1, i₂ y_1 = (pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ pullback.snd) y
state_after: case h.mp.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
y : ↑(pullback f₁ f₂)
⊢ (∃ y_1, i₁ y_1 = i₁ (pullback.fst y)) ∧ ∃ y_1, i₂ y_1 = i₂ (pullback.snd y)

tactic: exact ⟨exists_apply_eq_apply _ _, exists_apply_eq_apply _ _⟩
state_before: case h.mp.intro
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
y : ↑(pullback f₁ f₂)
⊢ (∃ y_1, i₁ y_1 = i₁ (pullback.fst y)) ∧ ∃ y_1, i₂ y_1 = i₂ (pullback.snd y)
state_after: no goals

tactic: apply (TopCat.mono_iff_injective _).mp H₃
state_before: J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
⊢ f₁ x₁ = f₂ x₂
state_after: case a
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
⊢ i₃ (f₁ x₁) = i₃ (f₂ x₂)

tactic: erw [← comp_apply, eq₁, ← comp_apply, eq₂, comp_apply, comp_apply, hx₁, hx₂, ← comp_apply, pullback.condition]
state_before: case a
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
⊢ i₃ (f₁ x₁) = i₃ (f₂ x₂)
state_after: case a
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
⊢ (pullback.snd ≫ g₂) x✝ = g₂ (pullback.snd x✝)

tactic: rfl
state_before: case a
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
⊢ (pullback.snd ≫ g₂) x✝ = g₂ (pullback.snd x✝)
state_after: no goals

tactic: simp only [cospan_one, pullbackIsoProdSubtype_inv_fst_assoc, comp_apply]
state_before: case h.a.none
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫ pullback.fst ≫ i₁ ≫ g₁) ⟨(x₁, x₂), this⟩ = (limit.π (cospan g₁ g₂) none) x✝
state_after: case h.a.none
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ g₁ (i₁ ((pullbackFst f₁ f₂) ⟨(x₁, x₂), this⟩)) = (limit.π (cospan g₁ g₂) none) x✝

tactic: erw [pullbackFst_apply, hx₁]
state_before: case h.a.none
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ g₁ (i₁ ((pullbackFst f₁ f₂) ⟨(x₁, x₂), this⟩)) = (limit.π (cospan g₁ g₂) none) x✝
state_after: case h.a.none
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ g₁ (pullback.fst x✝) = (limit.π (cospan g₁ g₂) none) x✝

tactic: rw [← limit.w _ WalkingCospan.Hom.inl, cospan_map_inl, comp_apply (g := g₁)]
state_before: case h.a.none
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ g₁ (pullback.fst x✝) = (limit.π (cospan g₁ g₂) none) x✝
state_after: case h.a.none
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ g₁ (pullback.fst x✝) = g₁ ((limit.π (cospan g₁ g₂) WalkingCospan.left) x✝)

tactic: rfl
state_before: case h.a.none
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ g₁ (pullback.fst x✝) = g₁ ((limit.π (cospan g₁ g₂) WalkingCospan.left) x✝)
state_after: no goals

tactic: simp only [cospan_left, limit.lift_π, PullbackCone.mk_pt, PullbackCone.mk_π_app,
  pullbackIsoProdSubtype_inv_fst_assoc, comp_apply]
state_before: case h.a.some.left
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫
        pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ limit.π (cospan g₁ g₂) (some WalkingPair.left))
      ⟨(x₁, x₂), this⟩ =
    (limit.π (cospan g₁ g₂) (some WalkingPair.left)) x✝
state_after: case h.a.some.left
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ i₁ ((pullbackFst f₁ f₂) ⟨(x₁, x₂), this⟩) = (limit.π (cospan g₁ g₂) (some WalkingPair.left)) x✝

tactic: erw [hx₁]
state_before: case h.a.some.left
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ i₁ ((pullbackFst f₁ f₂) ⟨(x₁, x₂), this⟩) = (limit.π (cospan g₁ g₂) (some WalkingPair.left)) x✝
state_after: case h.a.some.left
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ pullback.fst x✝ = (limit.π (cospan g₁ g₂) (some WalkingPair.left)) x✝

tactic: rfl
state_before: case h.a.some.left
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ pullback.fst x✝ = (limit.π (cospan g₁ g₂) (some WalkingPair.left)) x✝
state_after: no goals

tactic: simp only [cospan_right, limit.lift_π, PullbackCone.mk_pt, PullbackCone.mk_π_app,
  pullbackIsoProdSubtype_inv_snd_assoc, comp_apply]
state_before: case h.a.some.right
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ ((pullbackIsoProdSubtype f₁ f₂).inv ≫
        pullback.map f₁ f₂ g₁ g₂ i₁ i₂ i₃ eq₁ eq₂ ≫ limit.π (cospan g₁ g₂) (some WalkingPair.right))
      ⟨(x₁, x₂), this⟩ =
    (limit.π (cospan g₁ g₂) (some WalkingPair.right)) x✝
state_after: case h.a.some.right
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ i₂ ((pullbackSnd f₁ f₂) ⟨(x₁, x₂), this⟩) = (limit.π (cospan g₁ g₂) (some WalkingPair.right)) x✝

tactic: erw [hx₂]
state_before: case h.a.some.right
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ i₂ ((pullbackSnd f₁ f₂) ⟨(x₁, x₂), this⟩) = (limit.π (cospan g₁ g₂) (some WalkingPair.right)) x✝
state_after: case h.a.some.right
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ pullback.snd x✝ = (limit.π (cospan g₁ g₂) (some WalkingPair.right)) x✝

tactic: rfl
state_before: case h.a.some.right
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ : TopCat
W X Y Z S T : TopCat
f₁ : W ⟶ S
f₂ : X ⟶ S
g₁ : Y ⟶ T
g₂ : Z ⟶ T
i₁ : W ⟶ Y
i₂ : X ⟶ Z
i₃ : S ⟶ T
H₃ : Mono i₃
eq₁ : f₁ ≫ i₃ = i₁ ≫ g₁
eq₂ : f₂ ≫ i₃ = i₂ ≫ g₂
x✝ : ↑(pullback g₁ g₂)
x₁ : ↑W
hx₁ : i₁ x₁ = pullback.fst x✝
x₂ : ↑X
hx₂ : i₂ x₂ = pullback.snd x✝
this : f₁ x₁ = f₂ x₂
⊢ pullback.snd x✝ = (limit.π (cospan g₁ g₂) (some WalkingPair.right)) x✝
state_after: no goals