Theorem: ConvexCone.hyperplane_separation_of_nonempty_of_isClosed_of_nmem
File: Mathlib/Analysis/Convex/Cone/Dual.lean

tactic: obtain ⟨z, hzK, infi⟩ := exists_norm_eq_iInf_of_complete_convex ne hc.isComplete K.convex b
state_before: 𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
⊢ ∃ y, (∀ (x : H), x ∈ K → 0 ≤ inner x y) ∧ inner y b < 0

tactic: have hinner := (norm_eq_iInf_iff_real_inner_le_zero K.convex hzK).1 infi
state_before: case intro.intro
𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
⊢ ∃ y, (∀ (x : H), x ∈ K → 0 ≤ inner x y) ∧ inner y b < 0

tactic: use z - b
state_before: case intro.intro
𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
⊢ ∃ y, (∀ (x : H), x ∈ K → 0 ≤ inner x y) ∧ inner y b < 0

tactic: constructor
state_before: case intro.intro
𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
⊢ (∀ (x : H), x ∈ K → 0 ≤ inner x (z - b)) ∧ inner (z - b) b < 0

tactic: rintro x hxK
state_before: case intro.intro.left
𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
⊢ ∀ (x : H), x ∈ K → 0 ≤ inner x (z - b)

tactic: specialize hinner _ (K.add_mem hxK hzK)
state_before: case intro.intro.left
𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
x : H
hxK : x ∈ K
⊢ 0 ≤ inner x (z - b)

tactic: rwa [add_sub_cancel, real_inner_comm, ← neg_nonneg, neg_eq_neg_one_mul, ← real_inner_smul_right,
  neg_smul, one_smul, neg_sub] at hinner
state_before: case intro.intro.left
𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
x : H
hxK : x ∈ K
hinner : inner (b - z) (x + z - z) ≤ 0
⊢ 0 ≤ inner x (z - b)

tactic: have hinner₀ := hinner 0 (K.pointed_of_nonempty_of_isClosed ne hc)
state_before: case intro.intro.right
𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
⊢ inner (z - b) b < 0

tactic: rw [zero_sub, inner_neg_right, Right.neg_nonpos_iff] at hinner₀
state_before: case intro.intro.right
𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
hinner₀ : inner (b - z) (0 - z) ≤ 0
⊢ inner (z - b) b < 0

tactic: have hbz : b - z ≠ 0 := by
  rw [sub_ne_zero]
  contrapose! hzK
  rwa [← hzK]
state_before: case intro.intro.right
𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
hinner₀ : 0 ≤ inner (b - z) z
⊢ inner (z - b) b < 0

tactic: rw [← neg_zero, lt_neg, ← neg_one_mul, ← real_inner_smul_left, smul_sub, neg_smul, one_smul,
  neg_smul, neg_sub_neg, one_smul]
state_before: case intro.intro.right
𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
hinner₀ : 0 ≤ inner (b - z) z
hbz : b - z ≠ 0
⊢ inner (z - b) b < 0

tactic: calc
  0 < ⟪b - z, b - z⟫_ℝ := lt_of_not_le ((Iff.not real_inner_self_nonpos).2 hbz)
  _ = ⟪b - z, b - z⟫_ℝ + 0 := (add_zero _).symm
  _ ≤ ⟪b - z, b - z⟫_ℝ + ⟪b - z, z⟫_ℝ := (add_le_add rfl.ge hinner₀)
  _ = ⟪b - z, b - z + z⟫_ℝ := (inner_add_right _ _ _).symm
  _ = ⟪b - z, b⟫_ℝ := by rw [sub_add_cancel]
state_before: case intro.intro.right
𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
hinner₀ : 0 ≤ inner (b - z) z
hbz : b - z ≠ 0
⊢ 0 < inner (b - z) b

tactic: rw [sub_ne_zero]
state_before: 𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
hinner₀ : 0 ≤ inner (b - z) z
⊢ b - z ≠ 0

tactic: contrapose! hzK
state_before: 𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
hinner₀ : 0 ≤ inner (b - z) z
⊢ b ≠ z

tactic: rwa [← hzK]
state_before: 𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
hinner₀ : 0 ≤ inner (b - z) z
hzK : b = z
⊢ ¬z ∈ ↑K

tactic: rw [sub_add_cancel]
state_before: 𝕜 : Type ?u.104992
E : Type ?u.104995
F : Type ?u.104998
G : Type ?u.105001
H : Type u_1
inst✝² : NormedAddCommGroup H
inst✝¹ : InnerProductSpace ℝ H
s t : Set H
inst✝ : CompleteSpace H
K : ConvexCone ℝ H
ne : Set.Nonempty ↑K
hc : IsClosed ↑K
b : H
disj : ¬b ∈ K
z : H
hzK : z ∈ ↑K
infi : ‖b - z‖ = ⨅ (w : ↑↑K), ‖b - ↑w‖
hinner : ∀ (w : H), w ∈ ↑K → inner (b - z) (w - z) ≤ 0
hinner₀ : 0 ≤ inner (b - z) z
hbz : b - z ≠ 0
⊢ inner (b - z) (b - z + z) = inner (b - z) b