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

Proof steps:
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 (D.f i j) (D.f i k)).base '' (⇑(pullback.fst (D.f i j) (D.f i k)).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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
⊢ ⇑(pullback.snd (D.f i j) (D.f i k)).base '' (⇑(pullback.fst (D.f i j) (D.f i k)).base ⁻¹' S) =
    ⇑(D.f i k).base ⁻¹' (⇑(D.f i j).base '' S)
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))
eq₁ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.fst ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
⊢ ⇑(pullback.snd (D.f i j) (D.f i k)).base '' (⇑(pullback.fst (D.f i j) (D.f i k)).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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ ⇑(pullback.snd (D.f i j) (D.f i k)).base '' (⇑(pullback.fst (D.f i j) (D.f i k)).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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ ⇑(pullback.snd (D.f i j) (D.f i k)).base '' (⇑(pullback.fst (D.f i j) (D.f i k)).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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ ⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
          pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ''
      (⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
            pullback.fst ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ⁻¹'
        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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ ⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
          pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ''
      (⇑((PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
            pullback.fst ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ⁻¹'
        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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ ⇑(pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ∘
        ⇑(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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ⁻¹'
        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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ ⇑(pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ∘
        ⇑(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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ⁻¹'
        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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ ⇑(pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ''
      (⇑(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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ⁻¹'
          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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ ⇑(pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ''
      (⇑(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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ⁻¹'
          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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ ⇑(pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ''
      (⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ''
        (⇑(pullback.fst ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ∘
            ⇑(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 [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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ ⇑(pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ''
      (⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ''
        (⇑(pullback.fst ((forget C).map (D.f i j)) ((forget C).map (D.f i k))) ∘
            ⇑(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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ Function.Surjective ⇑(PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom
tactic: erw [Set.preimage_comp, Set.image_preimage_eq, TopCat.pullback_snd_image_fst_preimage]
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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ Epi (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 ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.fst (D.f i j) (D.f i k)).base
eq₂ :
  (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom ≫
      pullback.snd ((forget C).map (D.f i j)) ((forget C).map (D.f i k)) =
    (pullback.snd (D.f i j) (D.f i k)).base
⊢ Epi (PreservesPullback.iso (forget C) (D.f i j) (D.f i k)).hom
state_after: no goals
tactic: infer_instance