Theorem: AlgebraicGeometry.Scheme.OpenCover.fromGlued_open_map
File: Mathlib/AlgebraicGeometry/Gluing.lean

Proof steps:
state_before: X : Scheme
𝒰 : X.OpenCover
⊢ IsOpenMap ⇑𝒰.fromGlued.val.base
state_after: X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : _root_.IsOpen U
⊢ _root_.IsOpen (⇑𝒰.fromGlued.val.base '' U)
tactic: intro U hU
state_before: X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : _root_.IsOpen U
⊢ _root_.IsOpen (⇑𝒰.fromGlued.val.base '' U)
state_after: X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : _root_.IsOpen U
⊢ ∀ x ∈ ⇑𝒰.fromGlued.val.base '' U, ∃ t ⊆ ⇑𝒰.fromGlued.val.base '' U, _root_.IsOpen t ∧ x ∈ t
tactic: rw [isOpen_iff_forall_mem_open]
state_before: X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : _root_.IsOpen U
⊢ ∀ x ∈ ⇑𝒰.fromGlued.val.base '' U, ∃ t ⊆ ⇑𝒰.fromGlued.val.base '' U, _root_.IsOpen t ∧ x ∈ t
state_after: X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : _root_.IsOpen U
x : ↑↑X.toPresheafedSpace
hx : x ∈ ⇑𝒰.fromGlued.val.base '' U
⊢ ∃ t ⊆ ⇑𝒰.fromGlued.val.base '' U, _root_.IsOpen t ∧ x ∈ t
tactic: intro x hx
state_before: X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : _root_.IsOpen U
x : ↑↑X.toPresheafedSpace
hx : x ∈ ⇑𝒰.fromGlued.val.base '' U
⊢ ∃ t ⊆ ⇑𝒰.fromGlued.val.base '' U, _root_.IsOpen t ∧ x ∈ t
state_after: X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : ∀ (i : 𝒰.gluedCover.J), _root_.IsOpen (⇑(𝒰.gluedCover.ι i).val.base ⁻¹' U)
x : ↑↑X.toPresheafedSpace
hx : x ∈ ⇑𝒰.fromGlued.val.base '' U
⊢ ∃ t ⊆ ⇑𝒰.fromGlued.val.base '' U, _root_.IsOpen t ∧ x ∈ t
tactic: rw [𝒰.gluedCover.isOpen_iff] at hU
state_before: X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : ∀ (i : 𝒰.gluedCover.J), _root_.IsOpen (⇑(𝒰.gluedCover.ι i).val.base ⁻¹' U)
x : ↑↑X.toPresheafedSpace
hx : x ∈ ⇑𝒰.fromGlued.val.base '' U
⊢ ∃ t ⊆ ⇑𝒰.fromGlued.val.base '' U, _root_.IsOpen t ∧ x ∈ t
state_after: case h
X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : ∀ (i : 𝒰.gluedCover.J), _root_.IsOpen (⇑(𝒰.gluedCover.ι i).val.base ⁻¹' U)
x : ↑↑X.toPresheafedSpace
hx : x ∈ ⇑𝒰.fromGlued.val.base '' U
⊢ ⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base ⊆ ⇑𝒰.fromGlued.val.base '' U ∧
    _root_.IsOpen (⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base) ∧
      x ∈ ⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base
tactic: use 𝒰.fromGlued.val.base '' U ∩ Set.range (𝒰.map (𝒰.f x)).1.base
state_before: case h
X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : ∀ (i : 𝒰.gluedCover.J), _root_.IsOpen (⇑(𝒰.gluedCover.ι i).val.base ⁻¹' U)
x : ↑↑X.toPresheafedSpace
hx : x ∈ ⇑𝒰.fromGlued.val.base '' U
⊢ ⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base ⊆ ⇑𝒰.fromGlued.val.base '' U ∧
    _root_.IsOpen (⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base) ∧
      x ∈ ⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base
state_after: case right
X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : ∀ (i : 𝒰.gluedCover.J), _root_.IsOpen (⇑(𝒰.gluedCover.ι i).val.base ⁻¹' U)
x : ↑↑X.toPresheafedSpace
hx : x ∈ ⇑𝒰.fromGlued.val.base '' U
⊢ _root_.IsOpen (⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base) ∧
    x ∈ ⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base
tactic: use Set.inter_subset_left
state_before: case right
X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : ∀ (i : 𝒰.gluedCover.J), _root_.IsOpen (⇑(𝒰.gluedCover.ι i).val.base ⁻¹' U)
x : ↑↑X.toPresheafedSpace
hx : x ∈ ⇑𝒰.fromGlued.val.base '' U
⊢ _root_.IsOpen (⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base) ∧
    x ∈ ⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base
state_after: case right.left
X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : ∀ (i : 𝒰.gluedCover.J), _root_.IsOpen (⇑(𝒰.gluedCover.ι i).val.base ⁻¹' U)
x : ↑↑X.toPresheafedSpace
hx : x ∈ ⇑𝒰.fromGlued.val.base '' U
⊢ _root_.IsOpen (⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base)

case right.right
X : Scheme
𝒰 : X.OpenCover
U : Set ↑↑𝒰.gluedCover.glued.toPresheafedSpace
hU : ∀ (i : 𝒰.gluedCover.J), _root_.IsOpen (⇑(𝒰.gluedCover.ι i).val.base ⁻¹' U)
x : ↑↑X.toPresheafedSpace
hx : x ∈ ⇑𝒰.fromGlued.val.base '' U
⊢ x ∈ ⇑𝒰.fromGlued.val.base '' U ∩ Set.range ⇑(𝒰.map (𝒰.f x)).val.base
tactic: constructor