Theorem: AlgebraicGeometry.image_morphismRestrict_preimage
File: Mathlib/AlgebraicGeometry/Restrict.lean

tactic: ext1
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
⊢ Scheme.ιOpens (f ⁻¹ᵁ U) ''ᵁ (f ∣_ U) ⁻¹ᵁ V = f ⁻¹ᵁ Scheme.ιOpens U ''ᵁ V
state_after: case h
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
⊢ ↑(Scheme.ιOpens (f ⁻¹ᵁ U) ''ᵁ (f ∣_ U) ⁻¹ᵁ V) = ↑(f ⁻¹ᵁ Scheme.ιOpens U ''ᵁ V)

tactic: ext x
state_before: case h
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
⊢ ↑(Scheme.ιOpens (f ⁻¹ᵁ U) ''ᵁ (f ∣_ U) ⁻¹ᵁ V) = ↑(f ⁻¹ᵁ Scheme.ιOpens U ''ᵁ V)
state_after: case h.h
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
⊢ x ∈ ↑(Scheme.ιOpens (f ⁻¹ᵁ U) ''ᵁ (f ∣_ U) ⁻¹ᵁ V) ↔ x ∈ ↑(f ⁻¹ᵁ Scheme.ιOpens U ''ᵁ V)

tactic: constructor
state_before: case h.h
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
⊢ x ∈ ↑(Scheme.ιOpens (f ⁻¹ᵁ U) ''ᵁ (f ∣_ U) ⁻¹ᵁ V) ↔ x ∈ ↑(f ⁻¹ᵁ Scheme.ιOpens U ''ᵁ V)
state_after: case h.h.mp
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
⊢ x ∈ ↑(Scheme.ιOpens (f ⁻¹ᵁ U) ''ᵁ (f ∣_ U) ⁻¹ᵁ V) → x ∈ ↑(f ⁻¹ᵁ Scheme.ιOpens U ''ᵁ V)

case h.h.mpr
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
⊢ x ∈ ↑(f ⁻¹ᵁ Scheme.ιOpens U ''ᵁ V) → x ∈ ↑(Scheme.ιOpens (f ⁻¹ᵁ U) ''ᵁ (f ∣_ U) ⁻¹ᵁ V)

tactic: rintro ⟨⟨x, hx⟩, hx' : (f ∣_ U).1.base _ ∈ V, rfl⟩
state_before: case h.h.mp
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
⊢ x ∈ ↑(Scheme.ιOpens (f ⁻¹ᵁ U) ''ᵁ (f ∣_ U) ⁻¹ᵁ V) → x ∈ ↑(f ⁻¹ᵁ Scheme.ιOpens U ''ᵁ V)
state_after: case h.h.mp.intro.mk.intro
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : x ∈ f ⁻¹ᵁ U
hx' : (f ∣_ U).val.base ⟨x, hx⟩ ∈ V
⊢ (Scheme.ιOpens (f ⁻¹ᵁ U)).val.base ⟨x, hx⟩ ∈ ↑(f ⁻¹ᵁ Scheme.ιOpens U ''ᵁ V)

tactic: refine ⟨⟨_, hx⟩, ?_, rfl⟩
state_before: case h.h.mp.intro.mk.intro
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : x ∈ f ⁻¹ᵁ U
hx' : (f ∣_ U).val.base ⟨x, hx⟩ ∈ V
⊢ (Scheme.ιOpens (f ⁻¹ᵁ U)).val.base ⟨x, hx⟩ ∈ ↑(f ⁻¹ᵁ Scheme.ιOpens U ''ᵁ V)
state_after: case h.h.mp.intro.mk.intro
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : x ∈ f ⁻¹ᵁ U
hx' : (f ∣_ U).val.base ⟨x, hx⟩ ∈ V
⊢ ⟨f.val.base x, hx⟩ ∈ ↑V

tactic: rw [SetLike.mem_coe]
state_before: case h.h.mp.intro.mk.intro
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : x ∈ f ⁻¹ᵁ U
hx' : (f ∣_ U).val.base ⟨x, hx⟩ ∈ V
⊢ ⟨f.val.base x, hx⟩ ∈ ↑V
state_after: case h.h.mp.intro.mk.intro
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : x ∈ f ⁻¹ᵁ U
hx' : (f ∣_ U).val.base ⟨x, hx⟩ ∈ V
⊢ ⟨f.val.base x, hx⟩ ∈ V

tactic: convert hx'
state_before: case h.h.mp.intro.mk.intro
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : x ∈ f ⁻¹ᵁ U
hx' : (f ∣_ U).val.base ⟨x, hx⟩ ∈ V
⊢ ⟨f.val.base x, hx⟩ ∈ V
state_after: case h.e'_4
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : x ∈ f ⁻¹ᵁ U
hx' : (f ∣_ U).val.base ⟨x, hx⟩ ∈ V
⊢ ⟨f.val.base x, hx⟩ = (f ∣_ U).val.base ⟨x, hx⟩

tactic: refine Subtype.ext ?_
state_before: case h.e'_4
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : x ∈ f ⁻¹ᵁ U
hx' : (f ∣_ U).val.base ⟨x, hx⟩ ∈ V
⊢ ⟨f.val.base x, hx⟩ = (f ∣_ U).val.base ⟨x, hx⟩
state_after: case h.e'_4
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : x ∈ f ⁻¹ᵁ U
hx' : (f ∣_ U).val.base ⟨x, hx⟩ ∈ V
⊢ ↑⟨f.val.base x, hx⟩ = ↑((f ∣_ U).val.base ⟨x, hx⟩)

tactic: exact (morphismRestrict_base_coe f U ⟨x, hx⟩).symm
state_before: case h.e'_4
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : x ∈ f ⁻¹ᵁ U
hx' : (f ∣_ U).val.base ⟨x, hx⟩ ∈ V
⊢ ↑⟨f.val.base x, hx⟩ = ↑((f ∣_ U).val.base ⟨x, hx⟩)
state_after: no goals

tactic: rintro ⟨⟨x, hx⟩, hx' : _ ∈ V.1, rfl : x = _⟩
state_before: case h.h.mpr
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
⊢ x ∈ ↑(f ⁻¹ᵁ Scheme.ιOpens U ''ᵁ V) → x ∈ ↑(Scheme.ιOpens (f ⁻¹ᵁ U) ''ᵁ (f ∣_ U) ⁻¹ᵁ V)
state_after: case h.h.mpr.intro.mk.intro
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : f.val.base x ∈ U
hx' : ⟨f.val.base x, hx⟩ ∈ V.carrier
⊢ x ∈ ↑(Scheme.ιOpens (f ⁻¹ᵁ U) ''ᵁ (f ∣_ U) ⁻¹ᵁ V)

tactic: refine ⟨⟨_, hx⟩, (?_ : (f ∣_ U).1.base ⟨x, hx⟩ ∈ V.1), rfl⟩
state_before: case h.h.mpr.intro.mk.intro
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : f.val.base x ∈ U
hx' : ⟨f.val.base x, hx⟩ ∈ V.carrier
⊢ x ∈ ↑(Scheme.ιOpens (f ⁻¹ᵁ U) ''ᵁ (f ∣_ U) ⁻¹ᵁ V)
state_after: case h.h.mpr.intro.mk.intro
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : f.val.base x ∈ U
hx' : ⟨f.val.base x, hx⟩ ∈ V.carrier
⊢ (f ∣_ U).val.base ⟨x, hx⟩ ∈ V.carrier

tactic: convert hx'
state_before: case h.h.mpr.intro.mk.intro
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : f.val.base x ∈ U
hx' : ⟨f.val.base x, hx⟩ ∈ V.carrier
⊢ (f ∣_ U).val.base ⟨x, hx⟩ ∈ V.carrier
state_after: case h.e'_4.h
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : f.val.base x ∈ U
hx' : ⟨f.val.base x, hx⟩ ∈ V.carrier
e_1✝ : ↑↑(Y ∣_ᵤ U).toPresheafedSpace = ↥U
⊢ (f ∣_ U).val.base ⟨x, hx⟩ = ⟨f.val.base x, hx⟩

tactic: refine Subtype.ext ?_
state_before: case h.e'_4.h
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : f.val.base x ∈ U
hx' : ⟨f.val.base x, hx⟩ ∈ V.carrier
e_1✝ : ↑↑(Y ∣_ᵤ U).toPresheafedSpace = ↥U
⊢ (f ∣_ U).val.base ⟨x, hx⟩ = ⟨f.val.base x, hx⟩
state_after: case h.e'_4.h
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : f.val.base x ∈ U
hx' : ⟨f.val.base x, hx⟩ ∈ V.carrier
e_1✝ : ↑↑(Y ∣_ᵤ U).toPresheafedSpace = ↥U
⊢ ↑((f ∣_ U).val.base ⟨x, hx⟩) = ↑⟨f.val.base x, hx⟩

tactic: exact morphismRestrict_base_coe f U ⟨x, hx⟩
state_before: case h.e'_4.h
C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Opens ↑↑Y.toPresheafedSpace
V : Opens ↥U
x : ↑↑X.toPresheafedSpace
hx : f.val.base x ∈ U
hx' : ⟨f.val.base x, hx⟩ ∈ V.carrier
e_1✝ : ↑↑(Y ∣_ᵤ U).toPresheafedSpace = ↥U
⊢ ↑((f ∣_ U).val.base ⟨x, hx⟩) = ↑⟨f.val.base x, hx⟩
state_after: no goals