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

tactic: intro U hU
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: rw [isOpen_iff_forall_mem_open]
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: intro x hx
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: rw [𝒰.gluedCover.isOpen_iff] at hU
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: use 𝒰.fromGlued.val.base '' U ∩ Set.range (𝒰.map (𝒰.f x)).1.base
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 Set.inter_subset_left
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: constructor
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: rw [← Set.image_preimage_eq_inter_range]
state_before: 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)
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 (⇑(𝒰.map (𝒰.f x)).val.base '' (⇑(𝒰.map (𝒰.f x)).val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U)))

tactic: apply (show IsOpenImmersion (𝒰.map (𝒰.f x)) from inferInstance).base_open.isOpenMap
state_before: 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 (⇑(𝒰.map (𝒰.f x)).val.base '' (⇑(𝒰.map (𝒰.f x)).val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U)))
state_after: case right.left.a
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 (⇑(𝒰.map (𝒰.f x)).val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U))

tactic: convert hU (𝒰.f x) using 1
state_before: case right.left.a
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 (⇑(𝒰.map (𝒰.f x)).val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U))
state_after: case h.e'_3.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
e_1✝ : ↑↑(𝒰.obj (𝒰.f x)).toPresheafedSpace = ↑↑(𝒰.gluedCover.U (𝒰.f x)).toPresheafedSpace
⊢ ⇑(𝒰.map (𝒰.f x)).val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U) = ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' U

tactic: rw [← ι_fromGlued]
state_before: case h.e'_3.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
e_1✝ : ↑↑(𝒰.obj (𝒰.f x)).toPresheafedSpace = ↑↑(𝒰.gluedCover.U (𝒰.f x)).toPresheafedSpace
⊢ ⇑(𝒰.map (𝒰.f x)).val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U) = ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' U
state_after: case h.e'_3.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
e_1✝ : ↑↑(𝒰.obj (𝒰.f x)).toPresheafedSpace = ↑↑(𝒰.gluedCover.U (𝒰.f x)).toPresheafedSpace
⊢ ⇑(𝒰.gluedCover.ι (𝒰.f x) ≫ 𝒰.fromGlued).val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U) =
    ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' U

tactic: erw [coe_comp]
state_before: case h.e'_3.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
e_1✝ : ↑↑(𝒰.obj (𝒰.f x)).toPresheafedSpace = ↑↑(𝒰.gluedCover.U (𝒰.f x)).toPresheafedSpace
⊢ ⇑(𝒰.gluedCover.ι (𝒰.f x) ≫ 𝒰.fromGlued).val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U) =
    ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' U
state_after: case h.e'_3.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
e_1✝ : ↑↑(𝒰.obj (𝒰.f x)).toPresheafedSpace = ↑↑(𝒰.gluedCover.U (𝒰.f x)).toPresheafedSpace
⊢ ⇑𝒰.fromGlued.val.base ∘ ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U) =
    ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' U

tactic: rw [Set.preimage_comp]
state_before: case h.e'_3.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
e_1✝ : ↑↑(𝒰.obj (𝒰.f x)).toPresheafedSpace = ↑↑(𝒰.gluedCover.U (𝒰.f x)).toPresheafedSpace
⊢ ⇑𝒰.fromGlued.val.base ∘ ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U) =
    ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' U
state_after: case h.e'_3.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
e_1✝ : ↑↑(𝒰.obj (𝒰.f x)).toPresheafedSpace = ↑↑(𝒰.gluedCover.U (𝒰.f x)).toPresheafedSpace
⊢ ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' (⇑𝒰.fromGlued.val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U)) =
    ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' U

tactic: congr! 1
state_before: case h.e'_3.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
e_1✝ : ↑↑(𝒰.obj (𝒰.f x)).toPresheafedSpace = ↑↑(𝒰.gluedCover.U (𝒰.f x)).toPresheafedSpace
⊢ ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' (⇑𝒰.fromGlued.val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U)) =
    ⇑(𝒰.gluedCover.ι (𝒰.f x)).val.base ⁻¹' U
state_after: case h.e'_3.h.h.e'_4.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
e_1✝ : ↑↑(𝒰.obj (𝒰.f x)).toPresheafedSpace = ↑↑(𝒰.gluedCover.U (𝒰.f x)).toPresheafedSpace
e_2✝ : (CategoryTheory.forget TopCat).obj ↑𝒰.gluedCover.glued.toPresheafedSpace = ↑↑𝒰.gluedCover.glued.toPresheafedSpace
⊢ ⇑𝒰.fromGlued.val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U) = U

tactic: exact Set.preimage_image_eq _ 𝒰.fromGlued_injective
state_before: case h.e'_3.h.h.e'_4.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
e_1✝ : ↑↑(𝒰.obj (𝒰.f x)).toPresheafedSpace = ↑↑(𝒰.gluedCover.U (𝒰.f x)).toPresheafedSpace
e_2✝ : (CategoryTheory.forget TopCat).obj ↑𝒰.gluedCover.glued.toPresheafedSpace = ↑↑𝒰.gluedCover.glued.toPresheafedSpace
⊢ ⇑𝒰.fromGlued.val.base ⁻¹' (⇑𝒰.fromGlued.val.base '' U) = U
state_after: no goals

tactic: exact ⟨hx, 𝒰.covers x⟩
state_before: 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
state_after: no goals