-- Mathlib/Analysis/NormedSpace/HahnBanach/SeparatingDual.lean
theorem exists_eq_one_ne_zero_of_ne_zero_pair {x y : V} (hx : x ≠ 0) (hy : y ≠ 0) :
    ∃ f : V →L[R] R, f x = 1 ∧ f y ≠ 0

Proof state:
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y = 0
v : V →L[R] R
vy : v y = 1
vx : v x = 0
⊢ (u + v) x = 1

Tactic:
simp [ux, vx]

Result:
no goals

Proof state:
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

Tactic:
obtain ⟨u, ux⟩ : ∃ u : V →L[R] R, u x = 1 := exists_eq_one hx

Result:
case intro
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

Proof state:
case intro.inr
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y = 0
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

Tactic:
obtain ⟨v, vy⟩ : ∃ v : V →L[R] R, v y = 1 := exists_eq_one hy

Result:
case intro.inr.intro
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y = 0
v : V →L[R] R
vy : v y = 1
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

Proof state:
case intro.inr.intro.inr
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y = 0
v : V →L[R] R
vy : v y = 1
vx : v x = 0
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

Tactic:
exact ⟨u + v, by simp [ux, vx], by simp [uy, vy]⟩

Result:
no goals

Proof state:
case intro.inr.intro
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y = 0
v : V →L[R] R
vy : v y = 1
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

Tactic:
rcases ne_or_eq (v x) 0 with vx|vx

Result:
case intro.inr.intro.inl
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y = 0
v : V →L[R] R
vy : v y = 1
vx : v x ≠ 0
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

case intro.inr.intro.inr
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y = 0
v : V →L[R] R
vy : v y = 1
vx : v x = 0
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

Proof state:
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y = 0
v : V →L[R] R
vy : v y = 1
vx : v x ≠ 0
⊢ (v x)⁻¹ * v y ≠ 0

Tactic:
simp [vx, vy]

Result:
no goals

Proof state:
case intro
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

Tactic:
rcases ne_or_eq (u y) 0 with uy|uy

Result:
case intro.inl
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y ≠ 0
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

case intro.inr
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y = 0
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

Proof state:
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y = 0
v : V →L[R] R
vy : v y = 1
vx : v x = 0
⊢ (u + v) y ≠ 0

Tactic:
simp [uy, vy]

Result:
no goals

Proof state:
case intro.inr.intro.inl
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y = 0
v : V →L[R] R
vy : v y = 1
vx : v x ≠ 0
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

Tactic:
exact ⟨(v x)⁻¹ • v, inv_mul_cancel₀ vx, show (v x)⁻¹ * v y ≠ 0 by simp [vx, vy]⟩

Result:
no goals

Proof state:
case intro.inl
R : Type u_1
V : Type u_2
inst✝⁶ : Field R
inst✝⁵ : AddCommGroup V
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalSpace V
inst✝² : IsTopologicalRing R
inst✝¹ : Module R V
inst✝ : SeparatingDual R V
x y : V
hx : x ≠ 0
hy : y ≠ 0
u : V →L[R] R
ux : u x = 1
uy : u y ≠ 0
⊢ ∃ f, f x = 1 ∧ f y ≠ 0

Tactic:
exact ⟨u, ux, uy⟩

Result:
no goals