Theorem: AlgebraicGeometry.Scheme.GlueData.isOpen_iff
File: Mathlib/AlgebraicGeometry/Gluing.lean

Proof steps:
state_before: D : GlueData
U : Set ↑↑D.glued.toPresheafedSpace
⊢ IsOpen U ↔ ∀ (i : D.J), IsOpen (⇑(D.ι i).val.base ⁻¹' U)
state_after: D : GlueData
U : Set ↑↑D.glued.toPresheafedSpace
⊢ IsOpen (⇑(TopCat.homeoOfIso D.isoCarrier.symm) ⁻¹' U) ↔ ∀ (i : D.J), IsOpen (⇑(D.ι i).val.base ⁻¹' U)
tactic: rw [← (TopCat.homeoOfIso D.isoCarrier.symm).isOpen_preimage]
state_before: D : GlueData
U : Set ↑↑D.glued.toPresheafedSpace
⊢ IsOpen (⇑(TopCat.homeoOfIso D.isoCarrier.symm) ⁻¹' U) ↔ ∀ (i : D.J), IsOpen (⇑(D.ι i).val.base ⁻¹' U)
state_after: D : GlueData
U : Set ↑↑D.glued.toPresheafedSpace
⊢ (∀ (i : D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.J),
      IsOpen
        (⇑(D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.ι i) ⁻¹'
          (⇑(TopCat.homeoOfIso D.isoCarrier.symm) ⁻¹' U))) ↔
    ∀ (i : D.J), IsOpen (⇑(D.ι i).val.base ⁻¹' U)
tactic: rw [TopCat.GlueData.isOpen_iff]
state_before: D : GlueData
U : Set ↑↑D.glued.toPresheafedSpace
⊢ (∀ (i : D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.J),
      IsOpen
        (⇑(D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.ι i) ⁻¹'
          (⇑(TopCat.homeoOfIso D.isoCarrier.symm) ⁻¹' U))) ↔
    ∀ (i : D.J), IsOpen (⇑(D.ι i).val.base ⁻¹' U)
state_after: case h
D : GlueData
U : Set ↑↑D.glued.toPresheafedSpace
⊢ ∀ (a : D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.J),
    IsOpen
        (⇑(D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.ι a) ⁻¹'
          (⇑(TopCat.homeoOfIso D.isoCarrier.symm) ⁻¹' U)) ↔
      IsOpen (⇑(D.ι a).val.base ⁻¹' U)
tactic: apply forall_congr'
state_before: case h
D : GlueData
U : Set ↑↑D.glued.toPresheafedSpace
⊢ ∀ (a : D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.J),
    IsOpen
        (⇑(D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.ι a) ⁻¹'
          (⇑(TopCat.homeoOfIso D.isoCarrier.symm) ⁻¹' U)) ↔
      IsOpen (⇑(D.ι a).val.base ⁻¹' U)
state_after: case h
D : GlueData
U : Set ↑↑D.glued.toPresheafedSpace
i : D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.J
⊢ IsOpen
      (⇑(D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.ι i) ⁻¹'
        (⇑(TopCat.homeoOfIso D.isoCarrier.symm) ⁻¹' U)) ↔
    IsOpen (⇑(D.ι i).val.base ⁻¹' U)
tactic: intro i
state_before: case h
D : GlueData
U : Set ↑↑D.glued.toPresheafedSpace
i : D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.J
⊢ IsOpen
      (⇑(D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.ι i) ⁻¹'
        (⇑(TopCat.homeoOfIso D.isoCarrier.symm) ⁻¹' U)) ↔
    IsOpen (⇑(D.ι i).val.base ⁻¹' U)
state_after: case h
D : GlueData
U : Set ↑↑D.glued.toPresheafedSpace
i : D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.J
⊢ IsOpen
      (⇑(TopCat.homeoOfIso D.isoCarrier.symm) ∘
          ⇑(D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.ι i) ⁻¹'
        U) ↔
    IsOpen
      (⇑(D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.ι i ≫
            D.isoCarrier.inv) ⁻¹'
        U)
tactic: erw [← Set.preimage_comp, ← ι_isoCarrier_inv]
state_before: case h
D : GlueData
U : Set ↑↑D.glued.toPresheafedSpace
i : D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.J
⊢ IsOpen
      (⇑(TopCat.homeoOfIso D.isoCarrier.symm) ∘
          ⇑(D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.ι i) ⁻¹'
        U) ↔
    IsOpen
      (⇑(D.toLocallyRingedSpaceGlueData.toSheafedSpaceGlueData.toPresheafedSpaceGlueData.toTopGlueData.ι i ≫
            D.isoCarrier.inv) ⁻¹'
        U)
state_after: no goals
tactic: rfl