Theorem: AlgebraicGeometry.PresheafedSpace.GlueData.pullback_base
File: Mathlib/Geometry/RingedSpace/PresheafedSpace/Gluing.lean

tactic: have eq₁ : _ = (π₁ i, j, k).base := PreservesPullback.iso_hom_fst (forget C) _ _
state_before: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
⊢ ⇑pullback.snd.base '' (⇑pullback.fst.base ⁻¹' S) = ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)
state_after: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
⊢ ⇑pullback.snd.base '' (⇑pullback.fst.base ⁻¹' S) = ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)

tactic: have eq₂ : _ = (π₂ i, j, k).base := PreservesPullback.iso_hom_snd (forget C) _ _
state_before: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
⊢ ⇑pullback.snd.base '' (⇑pullback.fst.base ⁻¹' S) = ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)
state_after: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑pullback.snd.base '' (⇑pullback.fst.base ⁻¹' S) = ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)

tactic: rw [← eq₁, ← eq₂]
state_before: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑pullback.snd.base '' (⇑pullback.fst.base ⁻¹' S) = ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)
state_after: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd) ''
      (⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst) ⁻¹' S) =
    ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)

tactic: erw [coe_comp]
state_before: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd) ''
      (⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst) ⁻¹' S) =
    ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)
state_after: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑pullback.snd ∘ ⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ''
      (⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst) ⁻¹' S) =
    ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)

tactic: rw [Set.image_comp]
state_before: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑pullback.snd ∘ ⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ''
      (⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst) ⁻¹' S) =
    ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)
state_after: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑pullback.snd ''
      (⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ''
        (⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst) ⁻¹' S)) =
    ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)

tactic: erw [coe_comp]
state_before: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑pullback.snd ''
      (⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ''
        (⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst) ⁻¹' S)) =
    ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)
state_after: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑pullback.snd ''
      (⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ''
        (⇑pullback.fst ∘ ⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ⁻¹' S)) =
    ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)

tactic: erw [Set.preimage_comp, Set.image_preimage_eq, TopCat.pullback_snd_image_fst_preimage]
state_before: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑pullback.snd ''
      (⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ''
        (⇑pullback.fst ∘ ⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ⁻¹' S)) =
    ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)
state_after: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑((forget C).map (D.f i k)) ⁻¹' (⇑((forget C).map (D.f i j)) '' S) = ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)

case h
C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ Function.Surjective ⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom

tactic: erw [← TopCat.epi_iff_surjective]
state_before: case h
C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ Function.Surjective ⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom
state_after: case h
C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ Epi (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom

tactic: infer_instance
state_before: case h
C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ Epi (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom
state_after: no goals

tactic: rfl
state_before: C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
S : Set ↑↑(D.V (i, j))
eq₁ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.fst = pullback.fst.base
eq₂ : (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫ pullback.snd = pullback.snd.base
⊢ ⇑((forget C).map (D.f i k)) ⁻¹' (⇑((forget C).map (D.f i j)) '' S) = ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)
state_after: no goals