Theorem: AlgebraicGeometry.map_injective_of_isIntegral
File: Mathlib/AlgebraicGeometry/Properties.lean

tactic: rw [injective_iff_map_eq_zero]
state_before: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
⊢ Function.Injective ⇑(X.presheaf.map i.op)
state_after: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
⊢ ∀ (a : ↑Γ(X, V)), (X.presheaf.map i.op) a = 0 → a = 0

tactic: intro x hx
state_before: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
⊢ ∀ (a : ↑Γ(X, V)), (X.presheaf.map i.op) a = 0 → a = 0
state_after: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
hx : (X.presheaf.map i.op) x = 0
⊢ x = 0

tactic: rw [← basicOpen_eq_bot_iff] at hx ⊢
state_before: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
hx : (X.presheaf.map i.op) x = 0
⊢ x = 0
state_after: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
hx : X.basicOpen ((X.presheaf.map i.op) x) = ⊥
⊢ X.basicOpen x = ⊥

tactic: rw [Scheme.basicOpen_res] at hx
state_before: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
hx : X.basicOpen ((X.presheaf.map i.op) x) = ⊥
⊢ X.basicOpen x = ⊥
state_after: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
hx : U ⊓ X.basicOpen x = ⊥
⊢ X.basicOpen x = ⊥

tactic: revert hx
state_before: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
hx : U ⊓ X.basicOpen x = ⊥
⊢ X.basicOpen x = ⊥
state_after: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
⊢ U ⊓ X.basicOpen x = ⊥ → X.basicOpen x = ⊥

tactic: contrapose!
state_before: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
⊢ U ⊓ X.basicOpen x = ⊥ → X.basicOpen x = ⊥
state_after: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
⊢ X.basicOpen x ≠ ⊥ → U ⊓ X.basicOpen x ≠ ⊥

tactic: simp_rw [Ne, ← Opens.not_nonempty_iff_eq_bot, Classical.not_not]
state_before: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
⊢ X.basicOpen x ≠ ⊥ → U ⊓ X.basicOpen x ≠ ⊥
state_after: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
⊢ (↑(X.basicOpen x)).Nonempty → (↑(U ⊓ X.basicOpen x)).Nonempty

tactic: apply nonempty_preirreducible_inter U.isOpen (RingedSpace.basicOpen _ _).isOpen
state_before: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
⊢ (↑(X.basicOpen x)).Nonempty → (↑(U ⊓ X.basicOpen x)).Nonempty
state_after: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
⊢ (↑U).Nonempty

tactic: simpa using H
state_before: X : Scheme
inst✝ : IsIntegral X
U V : Opens ↑↑X.toPresheafedSpace
i : U ⟶ V
H : Nonempty ↥U
x : ↑Γ(X, V)
⊢ (↑U).Nonempty
state_after: no goals