[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
⊢ ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
let δ := ⨅ w : K, ‖u - w‖
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
⊢ ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
letI : Nonempty K := ne.to_subtype
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
⊢ ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
have zero_le_δ : 0 ≤ δ := le_ciInf fun _ => norm_nonneg _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
⊢ ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
have δ_le : ∀ w : K, δ ≤ ‖u - w‖ := ciInf_le ⟨0, Set.forall_range_iff.2 fun _ => norm_nonneg _⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
⊢ ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
have δ_le' : ∀ w ∈ K, δ ≤ ‖u - w‖ := fun w hw =>
  δ_le
    ⟨w, hw⟩
      -- Step 1: since `δ` is the infimum, can find a sequence `w : ℕ → K` in `K`
        -- such that `‖u - w n‖ < δ + 1 / (n + 1)` (which implies `‖u - w n‖ --> δ`);
        -- maybe this should be a separate lemma
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
⊢ ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
have exists_seq : ∃ w : ℕ → K, ∀ n, ‖u - w n‖ < δ + 1 / (n + 1) :=
  by
  have hδ : ∀ n : ℕ, δ < δ + 1 / (n + 1) := fun n => lt_add_of_le_of_pos le_rfl Nat.one_div_pos_of_nat
  have h := fun n => exists_lt_of_ciInf_lt (hδ n)
  let w : ℕ → K := fun n => Classical.choose (h n)
  exact ⟨w, fun n => Classical.choose_spec (h n)⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
⊢ ∃ w, ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
[PROOFSTEP]
have hδ : ∀ n : ℕ, δ < δ + 1 / (n + 1) := fun n => lt_add_of_le_of_pos le_rfl Nat.one_div_pos_of_nat
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
hδ : ∀ (n : ℕ), δ < δ + 1 / (↑n + 1)
⊢ ∃ w, ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
[PROOFSTEP]
have h := fun n => exists_lt_of_ciInf_lt (hδ n)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
hδ : ∀ (n : ℕ), δ < δ + 1 / (↑n + 1)
h : ∀ (n : ℕ), ∃ i, ‖u - ↑i‖ < δ + 1 / (↑n + 1)
⊢ ∃ w, ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
[PROOFSTEP]
let w : ℕ → K := fun n => Classical.choose (h n)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
hδ : ∀ (n : ℕ), δ < δ + 1 / (↑n + 1)
h : ∀ (n : ℕ), ∃ i, ‖u - ↑i‖ < δ + 1 / (↑n + 1)
w : ℕ → ↑K := fun n => Classical.choose (_ : ∃ i, ‖u - ↑i‖ < δ + 1 / (↑n + 1))
⊢ ∃ w, ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
[PROOFSTEP]
exact ⟨w, fun n => Classical.choose_spec (h n)⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
exists_seq : ∃ w, ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
⊢ ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
rcases exists_seq with ⟨w, hw⟩
[GOAL]
case intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
⊢ ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
have norm_tendsto : Tendsto (fun n => ‖u - w n‖) atTop (nhds δ) :=
  by
  have h : Tendsto (fun _ : ℕ => δ) atTop (nhds δ) := tendsto_const_nhds
  have h' : Tendsto (fun n : ℕ => δ + 1 / (n + 1)) atTop (nhds δ) :=
    by
    convert h.add tendsto_one_div_add_atTop_nhds_0_nat
    simp only [add_zero]
  exact
    tendsto_of_tendsto_of_tendsto_of_le_of_le h h' (fun x => δ_le _) fun x =>
      le_of_lt
        (hw _)
          -- Step 2: Prove that the sequence `w : ℕ → K` is a Cauchy sequence
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
⊢ Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
[PROOFSTEP]
have h : Tendsto (fun _ : ℕ => δ) atTop (nhds δ) := tendsto_const_nhds
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
h : Tendsto (fun x => δ) atTop (𝓝 δ)
⊢ Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
[PROOFSTEP]
have h' : Tendsto (fun n : ℕ => δ + 1 / (n + 1)) atTop (nhds δ) :=
  by
  convert h.add tendsto_one_div_add_atTop_nhds_0_nat
  simp only [add_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
h : Tendsto (fun x => δ) atTop (𝓝 δ)
⊢ Tendsto (fun n => δ + 1 / (↑n + 1)) atTop (𝓝 δ)
[PROOFSTEP]
convert h.add tendsto_one_div_add_atTop_nhds_0_nat
[GOAL]
case h.e'_5.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
h : Tendsto (fun x => δ) atTop (𝓝 δ)
⊢ δ = δ + 0
[PROOFSTEP]
simp only [add_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
h : Tendsto (fun x => δ) atTop (𝓝 δ)
h' : Tendsto (fun n => δ + 1 / (↑n + 1)) atTop (𝓝 δ)
⊢ Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
[PROOFSTEP]
exact
  tendsto_of_tendsto_of_tendsto_of_le_of_le h h' (fun x => δ_le _) fun x =>
    le_of_lt
      (hw _)
        -- Step 2: Prove that the sequence `w : ℕ → K` is a Cauchy sequence
[GOAL]
case intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
⊢ ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
have seq_is_cauchy : CauchySeq fun n => (w n : F) :=
  by
  rw [cauchySeq_iff_le_tendsto_0]
    -- splits into three goals
  let b := fun n : ℕ => 8 * δ * (1 / (n + 1)) + 4 * (1 / (n + 1)) * (1 / (n + 1))
  use fun n => sqrt (b n)
  constructor
    -- first goal :  `∀ (n : ℕ), 0 ≤ sqrt (b n)`
  intro n
  exact sqrt_nonneg _
  constructor
    -- second goal : `∀ (n m N : ℕ), N ≤ n → N ≤ m → dist ↑(w n) ↑(w m) ≤ sqrt (b N)`
  intro p q N hp hq
  let wp := (w p : F)
  let wq := (w q : F)
  let a := u - wq
  let b := u - wp
  let half := 1 / (2 : ℝ)
  let div := 1 / ((N : ℝ) + 1)
  have : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) :=
    calc
      4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ =
          2 * ‖u - half • (wq + wp)‖ * (2 * ‖u - half • (wq + wp)‖) + ‖wp - wq‖ * ‖wp - wq‖ :=
        by ring
      _ = absR (2 : ℝ) * ‖u - half • (wq + wp)‖ * (absR (2 : ℝ) * ‖u - half • (wq + wp)‖) + ‖wp - wq‖ * ‖wp - wq‖ :=
        by
        rw [_root_.abs_of_nonneg]
        exact zero_le_two
      _ = ‖(2 : ℝ) • (u - half • (wq + wp))‖ * ‖(2 : ℝ) • (u - half • (wq + wp))‖ + ‖wp - wq‖ * ‖wp - wq‖ := by
        simp [norm_smul]
      _ = ‖a + b‖ * ‖a + b‖ + ‖a - b‖ * ‖a - b‖ :=
        by
        rw [smul_sub, smul_smul, mul_one_div_cancel (_root_.two_ne_zero : (2 : ℝ) ≠ 0), ← one_add_one_eq_two, add_smul]
        simp only [one_smul]
        have eq₁ : wp - wq = a - b := (sub_sub_sub_cancel_left _ _ _).symm
        have eq₂ : u + u - (wq + wp) = a + b
        show u + u - (wq + wp) = u - wq + (u - wp)
        abel
        rw [eq₁, eq₂]
      _ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) := parallelogram_law_with_norm ℝ _ _
  have eq : δ ≤ ‖u - half • (wq + wp)‖ := by
    rw [smul_add]
    apply δ_le'
    apply h₂
    repeat' exact Subtype.mem _
    repeat' exact le_of_lt one_half_pos
    exact add_halves 1
  have eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ :=
    by
    simp_rw [mul_assoc]
    gcongr
  have eq₂ : ‖a‖ ≤ δ + div := le_trans (le_of_lt <| hw q) (add_le_add_left (Nat.one_div_le_one_div hq) _)
  have eq₂' : ‖b‖ ≤ δ + div := le_trans (le_of_lt <| hw p) (add_le_add_left (Nat.one_div_le_one_div hp) _)
  rw [dist_eq_norm]
  apply nonneg_le_nonneg_of_sq_le_sq
  · exact sqrt_nonneg _
  rw [mul_self_sqrt]
  calc
    ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) - 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ := by
      simp [← this]
    _ ≤ 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) - 4 * δ * δ := by gcongr
    _ ≤ 2 * ((δ + div) * (δ + div) + (δ + div) * (δ + div)) - 4 * δ * δ := by gcongr
    _ = 8 * δ * div + 4 * div * div := by ring
  positivity
    -- third goal : `Tendsto (fun (n : ℕ) => sqrt (b n)) atTop (𝓝 0)`
  apply Tendsto.comp (f := b) (g := sqrt)
  · have : Tendsto sqrt (nhds 0) (nhds (sqrt 0)) := continuous_sqrt.continuousAt
    convert this
    exact sqrt_zero.symm
  have eq₁ : Tendsto (fun n : ℕ => 8 * δ * (1 / (n + 1))) atTop (nhds (0 : ℝ)) :=
    by
    convert (@tendsto_const_nhds _ _ _ (8 * δ) _).mul tendsto_one_div_add_atTop_nhds_0_nat
    simp only [mul_zero]
  have : Tendsto (fun n : ℕ => (4 : ℝ) * (1 / (n + 1))) atTop (nhds (0 : ℝ)) :=
    by
    convert (@tendsto_const_nhds _ _ _ (4 : ℝ) _).mul tendsto_one_div_add_atTop_nhds_0_nat
    simp only [mul_zero]
  have eq₂ : Tendsto (fun n : ℕ => (4 : ℝ) * (1 / (n + 1)) * (1 / (n + 1))) atTop (nhds (0 : ℝ)) :=
    by
    convert this.mul tendsto_one_div_add_atTop_nhds_0_nat
    simp only [mul_zero]
  convert eq₁.add eq₂
  simp only [add_zero]
    -- Step 3: By completeness of `K`, let `w : ℕ → K` converge to some `v : K`.
      -- Prove that it satisfies all requirements.
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
⊢ CauchySeq fun n => ↑(w n)
[PROOFSTEP]
rw [cauchySeq_iff_le_tendsto_0]
  -- splits into three goals
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
⊢ ∃ b, (∀ (n : ℕ), 0 ≤ b n) ∧ (∀ (n m N : ℕ), N ≤ n → N ≤ m → dist ↑(w n) ↑(w m) ≤ b N) ∧ Tendsto b atTop (𝓝 0)
[PROOFSTEP]
let b := fun n : ℕ => 8 * δ * (1 / (n + 1)) + 4 * (1 / (n + 1)) * (1 / (n + 1))
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ ∃ b, (∀ (n : ℕ), 0 ≤ b n) ∧ (∀ (n m N : ℕ), N ≤ n → N ≤ m → dist ↑(w n) ↑(w m) ≤ b N) ∧ Tendsto b atTop (𝓝 0)
[PROOFSTEP]
use fun n => sqrt (b n)
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ (∀ (n : ℕ), 0 ≤ sqrt (b n)) ∧
    (∀ (n m N : ℕ), N ≤ n → N ≤ m → dist ↑(w n) ↑(w m) ≤ sqrt (b N)) ∧ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
constructor
  -- first goal :  `∀ (n : ℕ), 0 ≤ sqrt (b n)`
[GOAL]
case h.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ ∀ (n : ℕ), 0 ≤ sqrt (b n)
case h.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ (∀ (n m N : ℕ), N ≤ n → N ≤ m → dist ↑(w n) ↑(w m) ≤ sqrt (b N)) ∧ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
intro n
[GOAL]
case h.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
n : ℕ
⊢ 0 ≤ sqrt (b n)
case h.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ (∀ (n m N : ℕ), N ≤ n → N ≤ m → dist ↑(w n) ↑(w m) ≤ sqrt (b N)) ∧ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
exact sqrt_nonneg _
[GOAL]
case h.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ (∀ (n m N : ℕ), N ≤ n → N ≤ m → dist ↑(w n) ↑(w m) ≤ sqrt (b N)) ∧ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
constructor
  -- second goal : `∀ (n m N : ℕ), N ≤ n → N ≤ m → dist ↑(w n) ↑(w m) ≤ sqrt (b N)`
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ ∀ (n m N : ℕ), N ≤ n → N ≤ m → dist ↑(w n) ↑(w m) ≤ sqrt (b N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
intro p q N hp hq
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
let wp := (w p : F)
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
let wq := (w q : F)
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
let a := u - wq
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
let b := u - wp
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b✝ N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
let half := 1 / (2 : ℝ)
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b✝ N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
let div := 1 / ((N : ℝ) + 1)
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b✝ N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
have : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) :=
  calc
    4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ =
        2 * ‖u - half • (wq + wp)‖ * (2 * ‖u - half • (wq + wp)‖) + ‖wp - wq‖ * ‖wp - wq‖ :=
      by ring
    _ = absR (2 : ℝ) * ‖u - half • (wq + wp)‖ * (absR (2 : ℝ) * ‖u - half • (wq + wp)‖) + ‖wp - wq‖ * ‖wp - wq‖ :=
      by
      rw [_root_.abs_of_nonneg]
      exact zero_le_two
    _ = ‖(2 : ℝ) • (u - half • (wq + wp))‖ * ‖(2 : ℝ) • (u - half • (wq + wp))‖ + ‖wp - wq‖ * ‖wp - wq‖ := by
      simp [norm_smul]
    _ = ‖a + b‖ * ‖a + b‖ + ‖a - b‖ * ‖a - b‖ :=
      by
      rw [smul_sub, smul_smul, mul_one_div_cancel (_root_.two_ne_zero : (2 : ℝ) ≠ 0), ← one_add_one_eq_two, add_smul]
      simp only [one_smul]
      have eq₁ : wp - wq = a - b := (sub_sub_sub_cancel_left _ _ _).symm
      have eq₂ : u + u - (wq + wp) = a + b
      show u + u - (wq + wp) = u - wq + (u - wp)
      abel
      rw [eq₁, eq₂]
    _ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) := parallelogram_law_with_norm ℝ _ _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
⊢ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ =
    2 * ‖u - half • (wq + wp)‖ * (2 * ‖u - half • (wq + wp)‖) + ‖wp - wq‖ * ‖wp - wq‖
[PROOFSTEP]
ring
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
⊢ 2 * ‖u - half • (wq + wp)‖ * (2 * ‖u - half • (wq + wp)‖) + ‖wp - wq‖ * ‖wp - wq‖ =
    absR 2 * ‖u - half • (wq + wp)‖ * (absR 2 * ‖u - half • (wq + wp)‖) + ‖wp - wq‖ * ‖wp - wq‖
[PROOFSTEP]
rw [_root_.abs_of_nonneg]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
⊢ 0 ≤ 2
[PROOFSTEP]
exact zero_le_two
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
⊢ absR 2 * ‖u - half • (wq + wp)‖ * (absR 2 * ‖u - half • (wq + wp)‖) + ‖wp - wq‖ * ‖wp - wq‖ =
    ‖2 • (u - half • (wq + wp))‖ * ‖2 • (u - half • (wq + wp))‖ + ‖wp - wq‖ * ‖wp - wq‖
[PROOFSTEP]
simp [norm_smul]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
⊢ ‖2 • (u - half • (wq + wp))‖ * ‖2 • (u - half • (wq + wp))‖ + ‖wp - wq‖ * ‖wp - wq‖ =
    ‖a + b‖ * ‖a + b‖ + ‖a - b‖ * ‖a - b‖
[PROOFSTEP]
rw [smul_sub, smul_smul, mul_one_div_cancel (_root_.two_ne_zero : (2 : ℝ) ≠ 0), ← one_add_one_eq_two, add_smul]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
⊢ ‖1 • u + 1 • u - 1 • (wq + wp)‖ * ‖1 • u + 1 • u - 1 • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ =
    ‖a + b‖ * ‖a + b‖ + ‖a - b‖ * ‖a - b‖
[PROOFSTEP]
simp only [one_smul]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
⊢ ‖u + u - (↑(w q) + ↑(w p))‖ * ‖u + u - (↑(w q) + ↑(w p))‖ + ‖↑(w p) - ↑(w q)‖ * ‖↑(w p) - ↑(w q)‖ =
    ‖u - ↑(w q) + (u - ↑(w p))‖ * ‖u - ↑(w q) + (u - ↑(w p))‖ +
      ‖u - ↑(w q) - (u - ↑(w p))‖ * ‖u - ↑(w q) - (u - ↑(w p))‖
[PROOFSTEP]
have eq₁ : wp - wq = a - b := (sub_sub_sub_cancel_left _ _ _).symm
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
eq₁ : wp - wq = a - b
⊢ ‖u + u - (↑(w q) + ↑(w p))‖ * ‖u + u - (↑(w q) + ↑(w p))‖ + ‖↑(w p) - ↑(w q)‖ * ‖↑(w p) - ↑(w q)‖ =
    ‖u - ↑(w q) + (u - ↑(w p))‖ * ‖u - ↑(w q) + (u - ↑(w p))‖ +
      ‖u - ↑(w q) - (u - ↑(w p))‖ * ‖u - ↑(w q) - (u - ↑(w p))‖
[PROOFSTEP]
have eq₂ : u + u - (wq + wp) = a + b
[GOAL]
case eq₂
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
eq₁ : wp - wq = a - b
⊢ u + u - (wq + wp) = a + b
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
eq₁ : wp - wq = a - b
eq₂ : u + u - (wq + wp) = a + b
⊢ ‖u + u - (↑(w q) + ↑(w p))‖ * ‖u + u - (↑(w q) + ↑(w p))‖ + ‖↑(w p) - ↑(w q)‖ * ‖↑(w p) - ↑(w q)‖ =
    ‖u - ↑(w q) + (u - ↑(w p))‖ * ‖u - ↑(w q) + (u - ↑(w p))‖ +
      ‖u - ↑(w q) - (u - ↑(w p))‖ * ‖u - ↑(w q) - (u - ↑(w p))‖
[PROOFSTEP]
show u + u - (wq + wp) = u - wq + (u - wp)
[GOAL]
case eq₂
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
eq₁ : wp - wq = a - b
⊢ u + u - (wq + wp) = u - wq + (u - wp)
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
eq₁ : wp - wq = a - b
eq₂ : u + u - (wq + wp) = a + b
⊢ ‖u + u - (↑(w q) + ↑(w p))‖ * ‖u + u - (↑(w q) + ↑(w p))‖ + ‖↑(w p) - ↑(w q)‖ * ‖↑(w p) - ↑(w q)‖ =
    ‖u - ↑(w q) + (u - ↑(w p))‖ * ‖u - ↑(w q) + (u - ↑(w p))‖ +
      ‖u - ↑(w q) - (u - ↑(w p))‖ * ‖u - ↑(w q) - (u - ↑(w p))‖
[PROOFSTEP]
abel
[GOAL]
case eq₂
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
eq₁ : wp - wq = a - b
⊢ u + u - (wq + wp) = u - wq + (u - wp)
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
eq₁ : wp - wq = a - b
eq₂ : u + u - (wq + wp) = a + b
⊢ ‖u + u - (↑(w q) + ↑(w p))‖ * ‖u + u - (↑(w q) + ↑(w p))‖ + ‖↑(w p) - ↑(w q)‖ * ‖↑(w p) - ↑(w q)‖ =
    ‖u - ↑(w q) + (u - ↑(w p))‖ * ‖u - ↑(w q) + (u - ↑(w p))‖ +
      ‖u - ↑(w q) - (u - ↑(w p))‖ * ‖u - ↑(w q) - (u - ↑(w p))‖
[PROOFSTEP]
abel
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
eq₁ : wp - wq = a - b
eq₂ : u + u - (wq + wp) = a + b
⊢ ‖u + u - (↑(w q) + ↑(w p))‖ * ‖u + u - (↑(w q) + ↑(w p))‖ + ‖↑(w p) - ↑(w q)‖ * ‖↑(w p) - ↑(w q)‖ =
    ‖u - ↑(w q) + (u - ↑(w p))‖ * ‖u - ↑(w q) + (u - ↑(w p))‖ +
      ‖u - ↑(w q) - (u - ↑(w p))‖ * ‖u - ↑(w q) - (u - ↑(w p))‖
[PROOFSTEP]
rw [eq₁, eq₂]
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b✝ N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
have eq : δ ≤ ‖u - half • (wq + wp)‖ := by
  rw [smul_add]
  apply δ_le'
  apply h₂
  repeat' exact Subtype.mem _
  repeat' exact le_of_lt one_half_pos
  exact add_halves 1
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ δ ≤ ‖u - half • (wq + wp)‖
[PROOFSTEP]
rw [smul_add]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ δ ≤ ‖u - (half • wq + half • wp)‖
[PROOFSTEP]
apply δ_le'
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ half • wq + half • wp ∈ K
[PROOFSTEP]
apply h₂
[GOAL]
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ wq ∈ K
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ wp ∈ K
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ 0 ≤ half
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ 0 ≤ half
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ half + half = 1
[PROOFSTEP]
repeat' exact Subtype.mem _
[GOAL]
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ wq ∈ K
[PROOFSTEP]
exact Subtype.mem _
[GOAL]
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ wp ∈ K
[PROOFSTEP]
exact Subtype.mem _
[GOAL]
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ 0 ≤ half
[PROOFSTEP]
exact Subtype.mem _
[GOAL]
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ 0 ≤ half
[PROOFSTEP]
exact Subtype.mem _
[GOAL]
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ half + half = 1
[PROOFSTEP]
exact Subtype.mem _
[GOAL]
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ 0 ≤ half
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ 0 ≤ half
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ half + half = 1
[PROOFSTEP]
repeat' exact le_of_lt one_half_pos
[GOAL]
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ 0 ≤ half
[PROOFSTEP]
exact le_of_lt one_half_pos
[GOAL]
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ 0 ≤ half
[PROOFSTEP]
exact le_of_lt one_half_pos
[GOAL]
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ half + half = 1
[PROOFSTEP]
exact le_of_lt one_half_pos
[GOAL]
case a.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
⊢ half + half = 1
[PROOFSTEP]
exact add_halves 1
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b✝ N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
have eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ :=
  by
  simp_rw [mul_assoc]
  gcongr
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
⊢ 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
[PROOFSTEP]
simp_rw [mul_assoc]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
⊢ 4 * ((⨅ (w : ↑K), ‖u - ↑w‖) * ⨅ (w : ↑K), ‖u - ↑w‖) ≤
    4 * (‖u - (1 / 2) • (↑(w q) + ↑(w p))‖ * ‖u - (1 / 2) • (↑(w q) + ↑(w p))‖)
[PROOFSTEP]
gcongr
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b✝ N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
have eq₂ : ‖a‖ ≤ δ + div := le_trans (le_of_lt <| hw q) (add_le_add_left (Nat.one_div_le_one_div hq) _)
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b✝ N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
have eq₂' : ‖b‖ ≤ δ + div := le_trans (le_of_lt <| hw p) (add_le_add_left (Nat.one_div_le_one_div hp) _)
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
eq₂' : ‖b‖ ≤ δ + div
⊢ dist ↑(w p) ↑(w q) ≤ sqrt (b✝ N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
rw [dist_eq_norm]
[GOAL]
case h.right.left
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
eq₂' : ‖b‖ ≤ δ + div
⊢ ‖↑(w p) - ↑(w q)‖ ≤ sqrt (b✝ N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
apply nonneg_le_nonneg_of_sq_le_sq
[GOAL]
case h.right.left.hb
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
eq₂' : ‖b‖ ≤ δ + div
⊢ 0 ≤ sqrt (b✝ N)
[PROOFSTEP]
exact sqrt_nonneg _
[GOAL]
case h.right.left.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
eq₂' : ‖b‖ ≤ δ + div
⊢ ‖↑(w p) - ↑(w q)‖ * ‖↑(w p) - ↑(w q)‖ ≤ sqrt (b✝ N) * sqrt (b✝ N)
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
rw [mul_self_sqrt]
[GOAL]
case h.right.left.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
eq₂' : ‖b‖ ≤ δ + div
⊢ ‖↑(w p) - ↑(w q)‖ * ‖↑(w p) - ↑(w q)‖ ≤ b✝ N
case h.right.left.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
eq₂' : ‖b‖ ≤ δ + div
⊢ 0 ≤ b✝ N
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
calc
  ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) - 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ := by
    simp [← this]
  _ ≤ 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) - 4 * δ * δ := by gcongr
  _ ≤ 2 * ((δ + div) * (δ + div) + (δ + div) * (δ + div)) - 4 * δ * δ := by gcongr
  _ = 8 * δ * div + 4 * div * div := by ring
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
eq₂' : ‖b‖ ≤ δ + div
⊢ ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) - 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
[PROOFSTEP]
simp [← this]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
eq₂' : ‖b‖ ≤ δ + div
⊢ 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) - 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ ≤
    2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) - 4 * δ * δ
[PROOFSTEP]
gcongr
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
eq₂' : ‖b‖ ≤ δ + div
⊢ 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖) - 4 * δ * δ ≤ 2 * ((δ + div) * (δ + div) + (δ + div) * (δ + div)) - 4 * δ * δ
[PROOFSTEP]
gcongr
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
eq₂' : ‖b‖ ≤ δ + div
⊢ 2 * ((δ + div) * (δ + div) + (δ + div) * (δ + div)) - 4 * δ * δ = 8 * δ * div + 4 * div * div
[PROOFSTEP]
ring
[GOAL]
case h.right.left.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b✝ : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
p q N : ℕ
hp : N ≤ p
hq : N ≤ q
wp : F := ↑(w p)
wq : F := ↑(w q)
a : F := u - wq
b : F := u - wp
half : ℝ := 1 / 2
div : ℝ := 1 / (↑N + 1)
this : 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖ + ‖wp - wq‖ * ‖wp - wq‖ = 2 * (‖a‖ * ‖a‖ + ‖b‖ * ‖b‖)
eq : δ ≤ ‖u - half • (wq + wp)‖
eq₁ : 4 * δ * δ ≤ 4 * ‖u - half • (wq + wp)‖ * ‖u - half • (wq + wp)‖
eq₂ : ‖a‖ ≤ δ + div
eq₂' : ‖b‖ ≤ δ + div
⊢ 0 ≤ b✝ N
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
positivity
  -- third goal : `Tendsto (fun (n : ℕ) => sqrt (b n)) atTop (𝓝 0)`
[GOAL]
case h.right.right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => sqrt (b n)) atTop (𝓝 0)
[PROOFSTEP]
apply Tendsto.comp (f := b) (g := sqrt)
[GOAL]
case h.right.right.hg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto sqrt ?m.169624 (𝓝 0)
[PROOFSTEP]
have : Tendsto sqrt (nhds 0) (nhds (sqrt 0)) := continuous_sqrt.continuousAt
[GOAL]
case h.right.right.hg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
this : Tendsto sqrt (𝓝 0) (𝓝 (sqrt 0))
⊢ Tendsto sqrt ?m.169624 (𝓝 0)
[PROOFSTEP]
convert this
[GOAL]
case h.e'_5.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
this : Tendsto sqrt (𝓝 0) (𝓝 (sqrt 0))
⊢ 0 = sqrt 0
[PROOFSTEP]
exact sqrt_zero.symm
[GOAL]
case h.right.right.hf
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto b atTop (𝓝 0)
[PROOFSTEP]
have eq₁ : Tendsto (fun n : ℕ => 8 * δ * (1 / (n + 1))) atTop (nhds (0 : ℝ)) :=
  by
  convert (@tendsto_const_nhds _ _ _ (8 * δ) _).mul tendsto_one_div_add_atTop_nhds_0_nat
  simp only [mul_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ Tendsto (fun n => 8 * δ * (1 / (↑n + 1))) atTop (𝓝 0)
[PROOFSTEP]
convert (@tendsto_const_nhds _ _ _ (8 * δ) _).mul tendsto_one_div_add_atTop_nhds_0_nat
[GOAL]
case h.e'_5.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
⊢ 0 = 8 * δ * 0
[PROOFSTEP]
simp only [mul_zero]
[GOAL]
case h.right.right.hf
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
eq₁ : Tendsto (fun n => 8 * δ * (1 / (↑n + 1))) atTop (𝓝 0)
⊢ Tendsto b atTop (𝓝 0)
[PROOFSTEP]
have : Tendsto (fun n : ℕ => (4 : ℝ) * (1 / (n + 1))) atTop (nhds (0 : ℝ)) :=
  by
  convert (@tendsto_const_nhds _ _ _ (4 : ℝ) _).mul tendsto_one_div_add_atTop_nhds_0_nat
  simp only [mul_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
eq₁ : Tendsto (fun n => 8 * δ * (1 / (↑n + 1))) atTop (𝓝 0)
⊢ Tendsto (fun n => 4 * (1 / (↑n + 1))) atTop (𝓝 0)
[PROOFSTEP]
convert (@tendsto_const_nhds _ _ _ (4 : ℝ) _).mul tendsto_one_div_add_atTop_nhds_0_nat
[GOAL]
case h.e'_5.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
eq₁ : Tendsto (fun n => 8 * δ * (1 / (↑n + 1))) atTop (𝓝 0)
⊢ 0 = 4 * 0
[PROOFSTEP]
simp only [mul_zero]
[GOAL]
case h.right.right.hf
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
eq₁ : Tendsto (fun n => 8 * δ * (1 / (↑n + 1))) atTop (𝓝 0)
this : Tendsto (fun n => 4 * (1 / (↑n + 1))) atTop (𝓝 0)
⊢ Tendsto b atTop (𝓝 0)
[PROOFSTEP]
have eq₂ : Tendsto (fun n : ℕ => (4 : ℝ) * (1 / (n + 1)) * (1 / (n + 1))) atTop (nhds (0 : ℝ)) :=
  by
  convert this.mul tendsto_one_div_add_atTop_nhds_0_nat
  simp only [mul_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
eq₁ : Tendsto (fun n => 8 * δ * (1 / (↑n + 1))) atTop (𝓝 0)
this : Tendsto (fun n => 4 * (1 / (↑n + 1))) atTop (𝓝 0)
⊢ Tendsto (fun n => 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))) atTop (𝓝 0)
[PROOFSTEP]
convert this.mul tendsto_one_div_add_atTop_nhds_0_nat
[GOAL]
case h.e'_5.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
eq₁ : Tendsto (fun n => 8 * δ * (1 / (↑n + 1))) atTop (𝓝 0)
this : Tendsto (fun n => 4 * (1 / (↑n + 1))) atTop (𝓝 0)
⊢ 0 = 0 * 0
[PROOFSTEP]
simp only [mul_zero]
[GOAL]
case h.right.right.hf
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
eq₁ : Tendsto (fun n => 8 * δ * (1 / (↑n + 1))) atTop (𝓝 0)
this : Tendsto (fun n => 4 * (1 / (↑n + 1))) atTop (𝓝 0)
eq₂ : Tendsto (fun n => 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))) atTop (𝓝 0)
⊢ Tendsto b atTop (𝓝 0)
[PROOFSTEP]
convert eq₁.add eq₂
[GOAL]
case h.e'_5.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
b : ℕ → ℝ := fun n => 8 * δ * (1 / (↑n + 1)) + 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))
eq₁ : Tendsto (fun n => 8 * δ * (1 / (↑n + 1))) atTop (𝓝 0)
this : Tendsto (fun n => 4 * (1 / (↑n + 1))) atTop (𝓝 0)
eq₂ : Tendsto (fun n => 4 * (1 / (↑n + 1)) * (1 / (↑n + 1))) atTop (𝓝 0)
⊢ 0 = 0 + 0
[PROOFSTEP]
simp only [add_zero]
  -- Step 3: By completeness of `K`, let `w : ℕ → K` converge to some `v : K`.
    -- Prove that it satisfies all requirements.
[GOAL]
case intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
seq_is_cauchy : CauchySeq fun n => ↑(w n)
⊢ ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
rcases cauchySeq_tendsto_of_isComplete h₁ (fun n => Subtype.mem _) seq_is_cauchy with ⟨v, hv, w_tendsto⟩
[GOAL]
case intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
seq_is_cauchy : CauchySeq fun n => ↑(w n)
v : F
hv : v ∈ K
w_tendsto : Tendsto (fun n => ↑(w n)) atTop (𝓝 v)
⊢ ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
use v
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
seq_is_cauchy : CauchySeq fun n => ↑(w n)
v : F
hv : v ∈ K
w_tendsto : Tendsto (fun n => ↑(w n)) atTop (𝓝 v)
⊢ v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
use hv
[GOAL]
case right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
seq_is_cauchy : CauchySeq fun n => ↑(w n)
v : F
hv : v ∈ K
w_tendsto : Tendsto (fun n => ↑(w n)) atTop (𝓝 v)
⊢ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
have h_cont : Continuous fun v => ‖u - v‖ :=
  Continuous.comp continuous_norm (Continuous.sub continuous_const continuous_id)
[GOAL]
case right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
seq_is_cauchy : CauchySeq fun n => ↑(w n)
v : F
hv : v ∈ K
w_tendsto : Tendsto (fun n => ↑(w n)) atTop (𝓝 v)
h_cont : Continuous fun v => ‖u - v‖
⊢ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
have : Tendsto (fun n => ‖u - w n‖) atTop (nhds ‖u - v‖)
[GOAL]
case this
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
seq_is_cauchy : CauchySeq fun n => ↑(w n)
v : F
hv : v ∈ K
w_tendsto : Tendsto (fun n => ↑(w n)) atTop (𝓝 v)
h_cont : Continuous fun v => ‖u - v‖
⊢ Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 ‖u - v‖)
case right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
seq_is_cauchy : CauchySeq fun n => ↑(w n)
v : F
hv : v ∈ K
w_tendsto : Tendsto (fun n => ↑(w n)) atTop (𝓝 v)
h_cont : Continuous fun v => ‖u - v‖
this : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 ‖u - v‖)
⊢ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
convert Tendsto.comp h_cont.continuousAt w_tendsto
[GOAL]
case right
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
ne : Set.Nonempty K
h₁ : IsComplete K
h₂ : Convex ℝ K
u : F
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
this✝ : Nonempty ↑K := Set.Nonempty.to_subtype ne
zero_le_δ : 0 ≤ δ
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
w : ℕ → ↑K
hw : ∀ (n : ℕ), ‖u - ↑(w n)‖ < δ + 1 / (↑n + 1)
norm_tendsto : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 δ)
seq_is_cauchy : CauchySeq fun n => ↑(w n)
v : F
hv : v ∈ K
w_tendsto : Tendsto (fun n => ↑(w n)) atTop (𝓝 v)
h_cont : Continuous fun v => ‖u - v‖
this : Tendsto (fun n => ‖u - ↑(w n)‖) atTop (𝓝 ‖u - v‖)
⊢ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
exact tendsto_nhds_unique this norm_tendsto
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
⊢ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖ ↔ ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
letI : Nonempty K := ⟨⟨v, hv⟩⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
⊢ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖ ↔ ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
constructor
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
⊢ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖ → ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
intro eq w hw
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
let δ := ⨅ w : K, ‖u - w‖
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
let p := ⟪u - v, w - v⟫_ℝ
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
let q := ‖w - v‖ ^ 2
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
have δ_le (w : K) : δ ≤ ‖u - w‖ := ciInf_le ⟨0, fun _ ⟨_, h⟩ => h ▸ norm_nonneg _⟩ _
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
have δ_le' (w) (hw : w ∈ K) : δ ≤ ‖u - w‖ := δ_le ⟨w, hw⟩
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
have (θ : ℝ) (hθ₁ : 0 < θ) (hθ₂ : θ ≤ 1) : 2 * p ≤ θ * q :=
  by
  have : ‖u - v‖ ^ 2 ≤ ‖u - v‖ ^ 2 - 2 * θ * ⟪u - v, w - v⟫_ℝ + θ * θ * ‖w - v‖ ^ 2 :=
    calc
      ‖u - v‖ ^ 2
      _ ≤ ‖u - (θ • w + (1 - θ) • v)‖ ^ 2 := by
        simp only [sq]; apply mul_self_le_mul_self (norm_nonneg _)
        rw [eq]; apply δ_le'
        apply h hw hv
        exacts [le_of_lt hθ₁, sub_nonneg.2 hθ₂, add_sub_cancel'_right _ _]
      _ = ‖u - v - θ • (w - v)‖ ^ 2 :=
        by
        have : u - (θ • w + (1 - θ) • v) = u - v - θ • (w - v) :=
          by
          rw [smul_sub, sub_smul, one_smul]
          simp only [sub_eq_add_neg, add_comm, add_left_comm, add_assoc, neg_add_rev]
        rw [this]
      _ = ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 :=
        by
        rw [@norm_sub_sq ℝ, inner_smul_right, norm_smul]
        simp only [sq]
        show
          ‖u - v‖ * ‖u - v‖ - 2 * (θ * inner (u - v) (w - v)) + absR θ * ‖w - v‖ * (absR θ * ‖w - v‖) =
            ‖u - v‖ * ‖u - v‖ - 2 * θ * inner (u - v) (w - v) + θ * θ * (‖w - v‖ * ‖w - v‖)
        rw [abs_of_pos hθ₁]; ring
  have eq₁ :
    ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 =
      ‖u - v‖ ^ 2 + (θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v)) :=
    by abel
  rw [eq₁, le_add_iff_nonneg_right] at this 
  have eq₂ : θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) = θ * (θ * ‖w - v‖ ^ 2 - 2 * inner (u - v) (w - v))
  ring
  rw [eq₂] at this 
  have := le_of_sub_nonneg (nonneg_of_mul_nonneg_right this hθ₁)
  exact this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ 2 * p ≤ θ * q
[PROOFSTEP]
have : ‖u - v‖ ^ 2 ≤ ‖u - v‖ ^ 2 - 2 * θ * ⟪u - v, w - v⟫_ℝ + θ * θ * ‖w - v‖ ^ 2 :=
  calc
    ‖u - v‖ ^ 2
    _ ≤ ‖u - (θ • w + (1 - θ) • v)‖ ^ 2 := by
      simp only [sq]; apply mul_self_le_mul_self (norm_nonneg _)
      rw [eq]; apply δ_le'
      apply h hw hv
      exacts [le_of_lt hθ₁, sub_nonneg.2 hθ₂, add_sub_cancel'_right _ _]
    _ = ‖u - v - θ • (w - v)‖ ^ 2 :=
      by
      have : u - (θ • w + (1 - θ) • v) = u - v - θ • (w - v) :=
        by
        rw [smul_sub, sub_smul, one_smul]
        simp only [sub_eq_add_neg, add_comm, add_left_comm, add_assoc, neg_add_rev]
      rw [this]
    _ = ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 :=
      by
      rw [@norm_sub_sq ℝ, inner_smul_right, norm_smul]
      simp only [sq]
      show
        ‖u - v‖ * ‖u - v‖ - 2 * (θ * inner (u - v) (w - v)) + absR θ * ‖w - v‖ * (absR θ * ‖w - v‖) =
          ‖u - v‖ * ‖u - v‖ - 2 * θ * inner (u - v) (w - v) + θ * θ * (‖w - v‖ * ‖w - v‖)
      rw [abs_of_pos hθ₁]; ring
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ ‖u - v‖ ^ 2 ≤ ‖u - (θ • w + (1 - θ) • v)‖ ^ 2
[PROOFSTEP]
simp only [sq]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ ‖u - v‖ * ‖u - v‖ ≤ ‖u - (θ • w + (1 - θ) • v)‖ * ‖u - (θ • w + (1 - θ) • v)‖
[PROOFSTEP]
apply mul_self_le_mul_self (norm_nonneg _)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ ‖u - v‖ ≤ ‖u - (θ • w + (1 - θ) • v)‖
[PROOFSTEP]
rw [eq]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ ⨅ (w : ↑K), ‖u - ↑w‖ ≤ ‖u - (θ • w + (1 - θ) • v)‖
[PROOFSTEP]
apply δ_le'
[GOAL]
case hw
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ θ • w + (1 - θ) • v ∈ K
[PROOFSTEP]
apply h hw hv
[GOAL]
case hw.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ 0 ≤ θ
case hw.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ 0 ≤ 1 - θ
case hw.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ θ + (1 - θ) = 1
[PROOFSTEP]
exacts [le_of_lt hθ₁, sub_nonneg.2 hθ₂, add_sub_cancel'_right _ _]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ ‖u - (θ • w + (1 - θ) • v)‖ ^ 2 = ‖u - v - θ • (w - v)‖ ^ 2
[PROOFSTEP]
have : u - (θ • w + (1 - θ) • v) = u - v - θ • (w - v) :=
  by
  rw [smul_sub, sub_smul, one_smul]
  simp only [sub_eq_add_neg, add_comm, add_left_comm, add_assoc, neg_add_rev]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ u - (θ • w + (1 - θ) • v) = u - v - θ • (w - v)
[PROOFSTEP]
rw [smul_sub, sub_smul, one_smul]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ u - (θ • w + (v - θ • v)) = u - v - (θ • w - θ • v)
[PROOFSTEP]
simp only [sub_eq_add_neg, add_comm, add_left_comm, add_assoc, neg_add_rev]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
this : u - (θ • w + (1 - θ) • v) = u - v - θ • (w - v)
⊢ ‖u - (θ • w + (1 - θ) • v)‖ ^ 2 = ‖u - v - θ • (w - v)‖ ^ 2
[PROOFSTEP]
rw [this]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ ‖u - v - θ • (w - v)‖ ^ 2 = ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2
[PROOFSTEP]
rw [@norm_sub_sq ℝ, inner_smul_right, norm_smul]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ ‖u - v‖ ^ 2 - 2 * ↑re (θ * inner (u - v) (w - v)) + (‖θ‖ * ‖w - v‖) ^ 2 =
    ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2
[PROOFSTEP]
simp only [sq]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ ‖u - v‖ * ‖u - v‖ - 2 * ↑re (θ * inner (u - v) (w - v)) + ‖θ‖ * ‖w - v‖ * (‖θ‖ * ‖w - v‖) =
    ‖u - v‖ * ‖u - v‖ - 2 * θ * inner (u - v) (w - v) + θ * θ * (‖w - v‖ * ‖w - v‖)
[PROOFSTEP]
show
  ‖u - v‖ * ‖u - v‖ - 2 * (θ * inner (u - v) (w - v)) + absR θ * ‖w - v‖ * (absR θ * ‖w - v‖) =
    ‖u - v‖ * ‖u - v‖ - 2 * θ * inner (u - v) (w - v) + θ * θ * (‖w - v‖ * ‖w - v‖)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ ‖u - v‖ * ‖u - v‖ - 2 * (θ * inner (u - v) (w - v)) + absR θ * ‖w - v‖ * (absR θ * ‖w - v‖) =
    ‖u - v‖ * ‖u - v‖ - 2 * θ * inner (u - v) (w - v) + θ * θ * (‖w - v‖ * ‖w - v‖)
[PROOFSTEP]
rw [abs_of_pos hθ₁]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
⊢ ‖u - v‖ * ‖u - v‖ - 2 * (θ * inner (u - v) (w - v)) + θ * ‖w - v‖ * (θ * ‖w - v‖) =
    ‖u - v‖ * ‖u - v‖ - 2 * θ * inner (u - v) (w - v) + θ * θ * (‖w - v‖ * ‖w - v‖)
[PROOFSTEP]
ring
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
this : ‖u - v‖ ^ 2 ≤ ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2
⊢ 2 * p ≤ θ * q
[PROOFSTEP]
have eq₁ :
  ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 =
    ‖u - v‖ ^ 2 + (θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v)) :=
  by abel
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
this : ‖u - v‖ ^ 2 ≤ ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2
⊢ ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 =
    ‖u - v‖ ^ 2 + (θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v))
[PROOFSTEP]
abel
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
this : ‖u - v‖ ^ 2 ≤ ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2
⊢ ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 =
    ‖u - v‖ ^ 2 + (θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v))
[PROOFSTEP]
abel
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
this : ‖u - v‖ ^ 2 ≤ ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2
eq₁ :
  ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 =
    ‖u - v‖ ^ 2 + (θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v))
⊢ 2 * p ≤ θ * q
[PROOFSTEP]
rw [eq₁, le_add_iff_nonneg_right] at this 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
this : 0 ≤ θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v)
eq₁ :
  ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 =
    ‖u - v‖ ^ 2 + (θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v))
⊢ 2 * p ≤ θ * q
[PROOFSTEP]
have eq₂ : θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) = θ * (θ * ‖w - v‖ ^ 2 - 2 * inner (u - v) (w - v))
[GOAL]
case eq₂
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
this : 0 ≤ θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v)
eq₁ :
  ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 =
    ‖u - v‖ ^ 2 + (θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v))
⊢ θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) = θ * (θ * ‖w - v‖ ^ 2 - 2 * inner (u - v) (w - v))
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
this : 0 ≤ θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v)
eq₁ :
  ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 =
    ‖u - v‖ ^ 2 + (θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v))
eq₂ : θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) = θ * (θ * ‖w - v‖ ^ 2 - 2 * inner (u - v) (w - v))
⊢ 2 * p ≤ θ * q
[PROOFSTEP]
ring
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
this : 0 ≤ θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v)
eq₁ :
  ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 =
    ‖u - v‖ ^ 2 + (θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v))
eq₂ : θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) = θ * (θ * ‖w - v‖ ^ 2 - 2 * inner (u - v) (w - v))
⊢ 2 * p ≤ θ * q
[PROOFSTEP]
rw [eq₂] at this 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
this : 0 ≤ θ * (θ * ‖w - v‖ ^ 2 - 2 * inner (u - v) (w - v))
eq₁ :
  ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 =
    ‖u - v‖ ^ 2 + (θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v))
eq₂ : θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) = θ * (θ * ‖w - v‖ ^ 2 - 2 * inner (u - v) (w - v))
⊢ 2 * p ≤ θ * q
[PROOFSTEP]
have := le_of_sub_nonneg (nonneg_of_mul_nonneg_right this hθ₁)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝¹ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
θ : ℝ
hθ₁ : 0 < θ
hθ₂ : θ ≤ 1
this✝ : 0 ≤ θ * (θ * ‖w - v‖ ^ 2 - 2 * inner (u - v) (w - v))
eq₁ :
  ‖u - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) + θ * θ * ‖w - v‖ ^ 2 =
    ‖u - v‖ ^ 2 + (θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v))
eq₂ : θ * θ * ‖w - v‖ ^ 2 - 2 * θ * inner (u - v) (w - v) = θ * (θ * ‖w - v‖ ^ 2 - 2 * inner (u - v) (w - v))
this : 2 * inner (u - v) (w - v) ≤ θ * ‖w - v‖ ^ 2
⊢ 2 * p ≤ θ * q
[PROOFSTEP]
exact this
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
by_cases hq : q = 0
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
hq : q = 0
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
rw [hq] at this 
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * 0
hq : q = 0
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
have : p ≤ 0 := by
  have := this (1 : ℝ) (by norm_num) (by norm_num)
  linarith
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * 0
hq : q = 0
⊢ p ≤ 0
[PROOFSTEP]
have := this (1 : ℝ) (by norm_num) (by norm_num)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * 0
hq : q = 0
⊢ 0 < 1
[PROOFSTEP]
norm_num
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * 0
hq : q = 0
⊢ 1 ≤ 1
[PROOFSTEP]
norm_num
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝¹ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this✝ : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * 0
hq : q = 0
this : 2 * p ≤ 1 * 0
⊢ p ≤ 0
[PROOFSTEP]
linarith
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝¹ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this✝ : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * 0
hq : q = 0
this : p ≤ 0
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
exact this
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
hq : ¬q = 0
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
have q_pos : 0 < q := lt_of_le_of_ne (sq_nonneg _) fun h ↦ hq h.symm
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
hq : ¬q = 0
q_pos : 0 < q
⊢ inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
by_contra hp
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
hq : ¬q = 0
q_pos : 0 < q
hp : ¬inner (u - v) (w - v) ≤ 0
⊢ False
[PROOFSTEP]
rw [not_le] at hp 
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
hq : ¬q = 0
q_pos : 0 < q
hp : 0 < inner (u - v) (w - v)
⊢ False
[PROOFSTEP]
let θ := min (1 : ℝ) (p / q)
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
hq : ¬q = 0
q_pos : 0 < q
hp : 0 < inner (u - v) (w - v)
θ : ℝ := min 1 (p / q)
⊢ False
[PROOFSTEP]
have eq₁ : θ * q ≤ p :=
  calc
    θ * q ≤ p / q * q := mul_le_mul_of_nonneg_right (min_le_right _ _) (sq_nonneg _)
    _ = p := div_mul_cancel _ hq
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
hq : ¬q = 0
q_pos : 0 < q
hp : 0 < inner (u - v) (w - v)
θ : ℝ := min 1 (p / q)
eq₁ : θ * q ≤ p
⊢ False
[PROOFSTEP]
have : 2 * p ≤ p :=
  calc
    2 * p ≤ θ * q := by refine' this θ (lt_min (by norm_num) (div_pos hp q_pos)) (by norm_num)
    _ ≤ p := eq₁
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
hq : ¬q = 0
q_pos : 0 < q
hp : 0 < inner (u - v) (w - v)
θ : ℝ := min 1 (p / q)
eq₁ : θ * q ≤ p
⊢ 2 * p ≤ θ * q
[PROOFSTEP]
refine' this θ (lt_min (by norm_num) (div_pos hp q_pos)) (by norm_num)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
hq : ¬q = 0
q_pos : 0 < q
hp : 0 < inner (u - v) (w - v)
θ : ℝ := min 1 (p / q)
eq₁ : θ * q ≤ p
⊢ 0 < 1
[PROOFSTEP]
norm_num
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
hq : ¬q = 0
q_pos : 0 < q
hp : 0 < inner (u - v) (w - v)
θ : ℝ := min 1 (p / q)
eq₁ : θ * q ≤ p
⊢ θ ≤ 1
[PROOFSTEP]
norm_num
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this✝¹ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
eq : ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
w : F
hw : w ∈ K
δ : ℝ := ⨅ (w : ↑K), ‖u - ↑w‖
p : ℝ := inner (u - v) (w - v)
q : ℝ := ‖w - v‖ ^ 2
δ_le : ∀ (w : ↑K), δ ≤ ‖u - ↑w‖
δ_le' : ∀ (w : F), w ∈ K → δ ≤ ‖u - w‖
this✝ : ∀ (θ : ℝ), 0 < θ → θ ≤ 1 → 2 * p ≤ θ * q
hq : ¬q = 0
q_pos : 0 < q
hp : 0 < inner (u - v) (w - v)
θ : ℝ := min 1 (p / q)
eq₁ : θ * q ≤ p
this : 2 * p ≤ p
⊢ False
[PROOFSTEP]
linarith
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
⊢ (∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0) → ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
intro h
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ‖u - v‖ = ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
apply le_antisymm
[GOAL]
case mpr.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ‖u - v‖ ≤ ⨅ (w : ↑K), ‖u - ↑w‖
[PROOFSTEP]
apply le_ciInf
[GOAL]
case mpr.a.H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ∀ (x : ↑K), ‖u - v‖ ≤ ‖u - ↑x‖
[PROOFSTEP]
intro w
[GOAL]
case mpr.a.H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : ↑K
⊢ ‖u - v‖ ≤ ‖u - ↑w‖
[PROOFSTEP]
apply nonneg_le_nonneg_of_sq_le_sq (norm_nonneg _)
[GOAL]
case mpr.a.H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : ↑K
⊢ ‖u - v‖ * ‖u - v‖ ≤ ‖u - ↑w‖ * ‖u - ↑w‖
[PROOFSTEP]
have := h w w.2
[GOAL]
case mpr.a.H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : ↑K
this : inner (u - v) (↑w - v) ≤ 0
⊢ ‖u - v‖ * ‖u - v‖ ≤ ‖u - ↑w‖ * ‖u - ↑w‖
[PROOFSTEP]
calc
  ‖u - v‖ * ‖u - v‖ ≤ ‖u - v‖ * ‖u - v‖ - 2 * inner (u - v) ((w : F) - v) := by linarith
  _ ≤ ‖u - v‖ ^ 2 - 2 * inner (u - v) ((w : F) - v) + ‖(w : F) - v‖ ^ 2 :=
    by
    rw [sq]
    refine' le_add_of_nonneg_right _
    exact sq_nonneg _
  _ = ‖u - v - (w - v)‖ ^ 2 := (@norm_sub_sq ℝ _ _ _ _ _ _).symm
  _ = ‖u - w‖ * ‖u - w‖ := by
    have : u - v - (w - v) = u - w := by abel
    rw [this, sq]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : ↑K
this : inner (u - v) (↑w - v) ≤ 0
⊢ ‖u - v‖ * ‖u - v‖ ≤ ‖u - v‖ * ‖u - v‖ - 2 * inner (u - v) (↑w - v)
[PROOFSTEP]
linarith
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : ↑K
this : inner (u - v) (↑w - v) ≤ 0
⊢ ‖u - v‖ * ‖u - v‖ - 2 * inner (u - v) (↑w - v) ≤ ‖u - v‖ ^ 2 - 2 * inner (u - v) (↑w - v) + ‖↑w - v‖ ^ 2
[PROOFSTEP]
rw [sq]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : ↑K
this : inner (u - v) (↑w - v) ≤ 0
⊢ ‖u - v‖ * ‖u - v‖ - 2 * inner (u - v) (↑w - v) ≤ ‖u - v‖ * ‖u - v‖ - 2 * inner (u - v) (↑w - v) + ‖↑w - v‖ ^ 2
[PROOFSTEP]
refine' le_add_of_nonneg_right _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : ↑K
this : inner (u - v) (↑w - v) ≤ 0
⊢ 0 ≤ ‖↑w - v‖ ^ 2
[PROOFSTEP]
exact sq_nonneg _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : ↑K
this : inner (u - v) (↑w - v) ≤ 0
⊢ ‖u - v - (↑w - v)‖ ^ 2 = ‖u - ↑w‖ * ‖u - ↑w‖
[PROOFSTEP]
have : u - v - (w - v) = u - w := by abel
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : ↑K
this : inner (u - v) (↑w - v) ≤ 0
⊢ u - v - (↑w - v) = u - ↑w
[PROOFSTEP]
abel
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this✝ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : ↑K
this : inner (u - v) (↑w - v) ≤ 0
⊢ u - v - (↑w - v) = u - ↑w
[PROOFSTEP]
abel
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this✝¹ : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : ↑K
this✝ : inner (u - v) (↑w - v) ≤ 0
this : u - v - (↑w - v) = u - ↑w
⊢ ‖u - v - (↑w - v)‖ ^ 2 = ‖u - ↑w‖ * ‖u - ↑w‖
[PROOFSTEP]
rw [this, sq]
[GOAL]
case mpr.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ⨅ (w : ↑K), ‖u - ↑w‖ ≤ ‖u - v‖
[PROOFSTEP]
show ⨅ w : K, ‖u - w‖ ≤ (fun w : K => ‖u - w‖) ⟨v, hv⟩
[GOAL]
case mpr.a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ⨅ (w : ↑K), ‖u - ↑w‖ ≤ (fun w => ‖u - ↑w‖) { val := v, property := hv }
[PROOFSTEP]
apply ciInf_le
[GOAL]
case mpr.a.H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ BddBelow (Set.range fun w => ‖u - ↑w‖)
[PROOFSTEP]
use 0
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ 0 ∈ lowerBounds (Set.range fun w => ‖u - ↑w‖)
[PROOFSTEP]
rintro y ⟨z, rfl⟩
[GOAL]
case h.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Set F
h✝ : Convex ℝ K
u v : F
hv : v ∈ K
this : Nonempty ↑K := Nonempty.intro { val := v, property := hv }
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
z : ↑K
⊢ 0 ≤ (fun w => ‖u - ↑w‖) z
[PROOFSTEP]
exact norm_nonneg _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
h : IsComplete ↑K
⊢ ∀ (u : E), ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
letI : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
h : IsComplete ↑K
this : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
⊢ ∀ (u : E), ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
letI : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
h : IsComplete ↑K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
⊢ ∀ (u : E), ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
let K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
h : IsComplete ↑K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
⊢ ∀ (u : E), ∃ v, v ∈ K ∧ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
exact exists_norm_eq_iInf_of_complete_convex ⟨0, K'.zero_mem⟩ h K'.convex
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
⊢ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖ → ∀ (w : F), w ∈ K → inner (u - v) w = 0
[PROOFSTEP]
intro h
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
⊢ ∀ (w : F), w ∈ K → inner (u - v) w = 0
[PROOFSTEP]
have h : ∀ w ∈ K, ⟪u - v, w - v⟫_ℝ ≤ 0 :=
  by
  rwa [norm_eq_iInf_iff_real_inner_le_zero] at h 
  exacts [K.convex, hv]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
⊢ ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
[PROOFSTEP]
rwa [norm_eq_iInf_iff_real_inner_le_zero] at h 
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
⊢ Convex ℝ ↑K
case hv
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
⊢ v ∈ ↑K
[PROOFSTEP]
exacts [K.convex, hv]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ∀ (w : F), w ∈ K → inner (u - v) w = 0
[PROOFSTEP]
intro w hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
⊢ inner (u - v) w = 0
[PROOFSTEP]
have le : ⟪u - v, w⟫_ℝ ≤ 0
[GOAL]
case le
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
⊢ inner (u - v) w ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
let w' := w + v
[GOAL]
case le
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
w' : F := w + v
⊢ inner (u - v) w ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
have : w' ∈ K := Submodule.add_mem _ hw hv
[GOAL]
case le
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
w' : F := w + v
this : w' ∈ K
⊢ inner (u - v) w ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
have h₁ := h w' this
[GOAL]
case le
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
w' : F := w + v
this : w' ∈ K
h₁ : inner (u - v) (w' - v) ≤ 0
⊢ inner (u - v) w ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
have h₂ : w' - v = w
[GOAL]
case h₂
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
w' : F := w + v
this : w' ∈ K
h₁ : inner (u - v) (w' - v) ≤ 0
⊢ w' - v = w
case le
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
w' : F := w + v
this : w' ∈ K
h₁ : inner (u - v) (w' - v) ≤ 0
h₂ : w' - v = w
⊢ inner (u - v) w ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
simp only [add_neg_cancel_right, sub_eq_add_neg]
[GOAL]
case le
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
w' : F := w + v
this : w' ∈ K
h₁ : inner (u - v) (w' - v) ≤ 0
h₂ : w' - v = w
⊢ inner (u - v) w ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
rw [h₂] at h₁ 
[GOAL]
case le
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
w' : F := w + v
this : w' ∈ K
h₁ : inner (u - v) w ≤ 0
h₂ : w' - v = w
⊢ inner (u - v) w ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
exact h₁
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
have ge : ⟪u - v, w⟫_ℝ ≥ 0
[GOAL]
case ge
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
⊢ inner (u - v) w ≥ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
ge : inner (u - v) w ≥ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
let w'' := -w + v
[GOAL]
case ge
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
w'' : F := -w + v
⊢ inner (u - v) w ≥ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
ge : inner (u - v) w ≥ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
have : w'' ∈ K := Submodule.add_mem _ (Submodule.neg_mem _ hw) hv
[GOAL]
case ge
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
w'' : F := -w + v
this : w'' ∈ K
⊢ inner (u - v) w ≥ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
ge : inner (u - v) w ≥ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
have h₁ := h w'' this
[GOAL]
case ge
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
w'' : F := -w + v
this : w'' ∈ K
h₁ : inner (u - v) (w'' - v) ≤ 0
⊢ inner (u - v) w ≥ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
ge : inner (u - v) w ≥ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
have h₂ : w'' - v = -w
[GOAL]
case h₂
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
w'' : F := -w + v
this : w'' ∈ K
h₁ : inner (u - v) (w'' - v) ≤ 0
⊢ w'' - v = -w
case ge
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
w'' : F := -w + v
this : w'' ∈ K
h₁ : inner (u - v) (w'' - v) ≤ 0
h₂ : w'' - v = -w
⊢ inner (u - v) w ≥ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
ge : inner (u - v) w ≥ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
simp only [neg_inj, add_neg_cancel_right, sub_eq_add_neg]
[GOAL]
case ge
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
w'' : F := -w + v
this : w'' ∈ K
h₁ : inner (u - v) (w'' - v) ≤ 0
h₂ : w'' - v = -w
⊢ inner (u - v) w ≥ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
ge : inner (u - v) w ≥ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
rw [h₂, inner_neg_right] at h₁ 
[GOAL]
case ge
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
w'' : F := -w + v
this : w'' ∈ K
h₁ : -inner (u - v) w ≤ 0
h₂ : w'' - v = -w
⊢ inner (u - v) w ≥ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
ge : inner (u - v) w ≥ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
linarith
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h✝ : ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
h : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
w : F
hw : w ∈ K
le : inner (u - v) w ≤ 0
ge : inner (u - v) w ≥ 0
⊢ inner (u - v) w = 0
[PROOFSTEP]
exact le_antisymm le ge
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
⊢ (∀ (w : F), w ∈ K → inner (u - v) w = 0) → ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
intro h
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
⊢ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
have : ∀ w ∈ K, ⟪u - v, w - v⟫_ℝ ≤ 0
[GOAL]
case this
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
⊢ ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
this : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
intro w hw
[GOAL]
case this
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
w : F
hw : w ∈ K
⊢ inner (u - v) (w - v) ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
this : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
let w' := w - v
[GOAL]
case this
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
w : F
hw : w ∈ K
w' : F := w - v
⊢ inner (u - v) (w - v) ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
this : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
have : w' ∈ K := Submodule.sub_mem _ hw hv
[GOAL]
case this
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
w : F
hw : w ∈ K
w' : F := w - v
this : w' ∈ K
⊢ inner (u - v) (w - v) ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
this : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
have h₁ := h w' this
[GOAL]
case this
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
w : F
hw : w ∈ K
w' : F := w - v
this : w' ∈ K
h₁ : inner (u - v) w' = 0
⊢ inner (u - v) (w - v) ≤ 0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
this : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
exact le_of_eq h₁
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
this : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ ‖u - v‖ = ⨅ (w : ↑↑K), ‖u - ↑w‖
[PROOFSTEP]
rwa [norm_eq_iInf_iff_real_inner_le_zero]
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
this : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ Convex ℝ ↑K
case hv
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
K : Submodule ℝ F
u v : F
hv : v ∈ K
h : ∀ (w : F), w ∈ K → inner (u - v) w = 0
this : ∀ (w : F), w ∈ K → inner (u - v) (w - v) ≤ 0
⊢ v ∈ ↑K
[PROOFSTEP]
exacts [Submodule.convex _, hv]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
⊢ ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖ ↔ ∀ (w : E), w ∈ K → inner (u - v) w = 0
[PROOFSTEP]
letI : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
⊢ ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖ ↔ ∀ (w : E), w ∈ K → inner (u - v) w = 0
[PROOFSTEP]
letI : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
⊢ ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖ ↔ ∀ (w : E), w ∈ K → inner (u - v) w = 0
[PROOFSTEP]
let K' : Submodule ℝ E := K.restrictScalars ℝ
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
⊢ ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖ ↔ ∀ (w : E), w ∈ K → inner (u - v) w = 0
[PROOFSTEP]
constructor
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
⊢ ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖ → ∀ (w : E), w ∈ K → inner (u - v) w = 0
[PROOFSTEP]
intro H
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
⊢ ∀ (w : E), w ∈ K → inner (u - v) w = 0
[PROOFSTEP]
have A : ∀ w ∈ K, re ⟪u - v, w⟫ = 0 := (norm_eq_iInf_iff_real_inner_eq_zero K' hv).1 H
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
⊢ ∀ (w : E), w ∈ K → inner (u - v) w = 0
[PROOFSTEP]
intro w hw
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ inner (u - v) w = 0
[PROOFSTEP]
apply ext
[GOAL]
case mp.hre
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ ↑re (inner (u - v) w) = ↑re 0
[PROOFSTEP]
simp [A w hw]
[GOAL]
case mp.him
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ ↑im (inner (u - v) w) = ↑im 0
[PROOFSTEP]
symm
[GOAL]
case mp.him
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ ↑im 0 = ↑im (inner (u - v) w)
[PROOFSTEP]
calc
  im (0 : 𝕜) = 0 := im.map_zero
  _ = re ⟪u - v, (-I : 𝕜) • w⟫ := (A _ (K.smul_mem (-I) hw)).symm
  _ = re (-I * ⟪u - v, w⟫) := by rw [inner_smul_right]
  _ = im ⟪u - v, w⟫ := by simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ ↑re (inner (u - v) (-I • w)) = ↑re (-I * inner (u - v) w)
[PROOFSTEP]
rw [inner_smul_right]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
A : ∀ (w : E), w ∈ K → ↑re (inner (u - v) w) = 0
w : E
hw : w ∈ K
⊢ ↑re (-I * inner (u - v) w) = ↑im (inner (u - v) w)
[PROOFSTEP]
simp
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
⊢ (∀ (w : E), w ∈ K → inner (u - v) w = 0) → ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
[PROOFSTEP]
intro H
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ∀ (w : E), w ∈ K → inner (u - v) w = 0
⊢ ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
[PROOFSTEP]
have : ∀ w ∈ K', ⟪u - v, w⟫_ℝ = 0 := by
  intro w hw
  rw [real_inner_eq_re_inner, H w hw]
  exact zero_re'
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ∀ (w : E), w ∈ K → inner (u - v) w = 0
⊢ ∀ (w : E), w ∈ K' → inner (u - v) w = 0
[PROOFSTEP]
intro w hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ∀ (w : E), w ∈ K → inner (u - v) w = 0
w : E
hw : w ∈ K'
⊢ inner (u - v) w = 0
[PROOFSTEP]
rw [real_inner_eq_re_inner, H w hw]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ∀ (w : E), w ∈ K → inner (u - v) w = 0
w : E
hw : w ∈ K'
⊢ ↑re 0 = 0
[PROOFSTEP]
exact zero_re'
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
u v : E
hv : v ∈ K
this✝¹ : InnerProductSpace ℝ E := InnerProductSpace.isROrCToReal 𝕜 E
this✝ : Module ℝ E := RestrictScalars.module ℝ 𝕜 E
K' : Submodule ℝ E := Submodule.restrictScalars ℝ K
H : ∀ (w : E), w ∈ K → inner (u - v) w = 0
this : ∀ (w : E), w ∈ K' → inner (u - v) w = 0
⊢ ‖u - v‖ = ⨅ (w : { x // x ∈ K }), ‖u - ↑w‖
[PROOFSTEP]
exact (norm_eq_iInf_iff_real_inner_eq_zero K' hv).2 this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace { x // x ∈ K }
v : E
⊢ ∃ w, w ∈ K ∧ v - w ∈ Kᗮ
[PROOFSTEP]
rcases exists_norm_eq_iInf_of_complete_subspace K (completeSpace_coe_iff_isComplete.mp ‹_›) v with ⟨w, hwK, hw⟩
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace { x // x ∈ K }
v w : E
hwK : w ∈ K
hw : ‖v - w‖ = ⨅ (w : ↑↑K), ‖v - ↑w‖
⊢ ∃ w, w ∈ K ∧ v - w ∈ Kᗮ
[PROOFSTEP]
refine ⟨w, hwK, (K.mem_orthogonal' _).2 ?_⟩
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace { x // x ∈ K }
v w : E
hwK : w ∈ K
hw : ‖v - w‖ = ⨅ (w : ↑↑K), ‖v - ↑w‖
⊢ ∀ (u : E), u ∈ K → inner (v - w) u = 0
[PROOFSTEP]
rwa [← norm_eq_iInf_iff_inner_eq_zero K hwK]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ ∃ w, w ∈ Kᗮ ∧ v - w ∈ Kᗮᗮ
[PROOFSTEP]
rcases HasOrthogonalProjection.exists_orthogonal (K := K) v with ⟨w, hwK, hw⟩
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hwK : w ∈ K
hw : v - w ∈ Kᗮ
⊢ ∃ w, w ∈ Kᗮ ∧ v - w ∈ Kᗮᗮ
[PROOFSTEP]
refine ⟨_, hw, ?_⟩
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hwK : w ∈ K
hw : v - w ∈ Kᗮ
⊢ v - (v - w) ∈ Kᗮᗮ
[PROOFSTEP]
rw [sub_sub_cancel]
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hwK : w ∈ K
hw : v - w ∈ Kᗮ
⊢ w ∈ Kᗮᗮ
[PROOFSTEP]
exact K.le_orthogonal_orthogonal hwK
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : HasOrthogonalProjection K
E' : Type u_4
inst✝¹ : NormedAddCommGroup E'
inst✝ : InnerProductSpace 𝕜 E'
f : E ≃ₗᵢ[𝕜] E'
v : E'
⊢ ∃ w, w ∈ Submodule.map (↑f.toLinearEquiv) K ∧ v - w ∈ (Submodule.map (↑f.toLinearEquiv) K)ᗮ
[PROOFSTEP]
rcases HasOrthogonalProjection.exists_orthogonal (K := K) (f.symm v) with ⟨w, hwK, hw⟩
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : HasOrthogonalProjection K
E' : Type u_4
inst✝¹ : NormedAddCommGroup E'
inst✝ : InnerProductSpace 𝕜 E'
f : E ≃ₗᵢ[𝕜] E'
v : E'
w : E
hwK : w ∈ K
hw : ↑(LinearIsometryEquiv.symm f) v - w ∈ Kᗮ
⊢ ∃ w, w ∈ Submodule.map (↑f.toLinearEquiv) K ∧ v - w ∈ (Submodule.map (↑f.toLinearEquiv) K)ᗮ
[PROOFSTEP]
refine ⟨f w, Submodule.mem_map_of_mem hwK, Set.ball_image_iff.2 fun u hu ↦ ?_⟩
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : HasOrthogonalProjection K
E' : Type u_4
inst✝¹ : NormedAddCommGroup E'
inst✝ : InnerProductSpace 𝕜 E'
f : E ≃ₗᵢ[𝕜] E'
v : E'
w : E
hwK : w ∈ K
hw : ↑(LinearIsometryEquiv.symm f) v - w ∈ Kᗮ
u : E
hu : u ∈ ↑K
⊢ inner (↑↑f.toLinearEquiv u) (v - ↑f w) = 0
[PROOFSTEP]
erw [← f.symm.inner_map_map, f.symm_apply_apply, map_sub, f.symm_apply_apply, hw u hu]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : E
⊢ v - v ∈ ⊤ᗮ
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ (w : E), w ∈ K → inner (u - v) w = 0
⊢ orthogonalProjectionFn K u = v
[PROOFSTEP]
rw [← sub_eq_zero, ← @inner_self_eq_zero 𝕜]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ (w : E), w ∈ K → inner (u - v) w = 0
⊢ inner (orthogonalProjectionFn K u - v) (orthogonalProjectionFn K u - v) = 0
[PROOFSTEP]
have hvs : orthogonalProjectionFn K u - v ∈ K := Submodule.sub_mem K (orthogonalProjectionFn_mem u) hvm
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ (w : E), w ∈ K → inner (u - v) w = 0
hvs : orthogonalProjectionFn K u - v ∈ K
⊢ inner (orthogonalProjectionFn K u - v) (orthogonalProjectionFn K u - v) = 0
[PROOFSTEP]
have huo : ⟪u - orthogonalProjectionFn K u, orthogonalProjectionFn K u - v⟫ = 0 :=
  orthogonalProjectionFn_inner_eq_zero u _ hvs
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ (w : E), w ∈ K → inner (u - v) w = 0
hvs : orthogonalProjectionFn K u - v ∈ K
huo : inner (u - orthogonalProjectionFn K u) (orthogonalProjectionFn K u - v) = 0
⊢ inner (orthogonalProjectionFn K u - v) (orthogonalProjectionFn K u - v) = 0
[PROOFSTEP]
have huv : ⟪u - v, orthogonalProjectionFn K u - v⟫ = 0 := hvo _ hvs
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ (w : E), w ∈ K → inner (u - v) w = 0
hvs : orthogonalProjectionFn K u - v ∈ K
huo : inner (u - orthogonalProjectionFn K u) (orthogonalProjectionFn K u - v) = 0
huv : inner (u - v) (orthogonalProjectionFn K u - v) = 0
⊢ inner (orthogonalProjectionFn K u - v) (orthogonalProjectionFn K u - v) = 0
[PROOFSTEP]
have houv : ⟪u - v - (u - orthogonalProjectionFn K u), orthogonalProjectionFn K u - v⟫ = 0 := by
  rw [inner_sub_left, huo, huv, sub_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ (w : E), w ∈ K → inner (u - v) w = 0
hvs : orthogonalProjectionFn K u - v ∈ K
huo : inner (u - orthogonalProjectionFn K u) (orthogonalProjectionFn K u - v) = 0
huv : inner (u - v) (orthogonalProjectionFn K u - v) = 0
⊢ inner (u - v - (u - orthogonalProjectionFn K u)) (orthogonalProjectionFn K u - v) = 0
[PROOFSTEP]
rw [inner_sub_left, huo, huv, sub_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
hvm : v ∈ K
hvo : ∀ (w : E), w ∈ K → inner (u - v) w = 0
hvs : orthogonalProjectionFn K u - v ∈ K
huo : inner (u - orthogonalProjectionFn K u) (orthogonalProjectionFn K u - v) = 0
huv : inner (u - v) (orthogonalProjectionFn K u - v) = 0
houv : inner (u - v - (u - orthogonalProjectionFn K u)) (orthogonalProjectionFn K u - v) = 0
⊢ inner (orthogonalProjectionFn K u - v) (orthogonalProjectionFn K u - v) = 0
[PROOFSTEP]
rwa [sub_sub_sub_cancel_left] at houv 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ ‖v‖ * ‖v‖ =
    ‖v - orthogonalProjectionFn K v‖ * ‖v - orthogonalProjectionFn K v‖ +
      ‖orthogonalProjectionFn K v‖ * ‖orthogonalProjectionFn K v‖
[PROOFSTEP]
set p := orthogonalProjectionFn K v
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
p : E := orthogonalProjectionFn K v
⊢ ‖v‖ * ‖v‖ = ‖v - p‖ * ‖v - p‖ + ‖p‖ * ‖p‖
[PROOFSTEP]
have h' : ⟪v - p, p⟫ = 0 := orthogonalProjectionFn_inner_eq_zero _ _ (orthogonalProjectionFn_mem v)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
p : E := orthogonalProjectionFn K v
h' : inner (v - p) p = 0
⊢ ‖v‖ * ‖v‖ = ‖v - p‖ * ‖v - p‖ + ‖p‖ * ‖p‖
[PROOFSTEP]
convert norm_add_sq_eq_norm_sq_add_norm_sq_of_inner_eq_zero (v - p) p h' using 2
[GOAL]
case h.e'_2.h.e'_5
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
p : E := orthogonalProjectionFn K v
h' : inner (v - p) p = 0
⊢ ‖v‖ = ‖v - p + p‖
[PROOFSTEP]
simp
[GOAL]
case h.e'_2.h.e'_6
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
p : E := orthogonalProjectionFn K v
h' : inner (v - p) p = 0
⊢ ‖v‖ = ‖v - p + p‖
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x y : E
⊢ (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) (x + y) =
    (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) x +
      (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) y
[PROOFSTEP]
have hm : orthogonalProjectionFn K x + orthogonalProjectionFn K y ∈ K :=
  Submodule.add_mem K (orthogonalProjectionFn_mem x) (orthogonalProjectionFn_mem y)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x y : E
hm : orthogonalProjectionFn K x + orthogonalProjectionFn K y ∈ K
⊢ (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) (x + y) =
    (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) x +
      (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) y
[PROOFSTEP]
have ho : ∀ w ∈ K, ⟪x + y - (orthogonalProjectionFn K x + orthogonalProjectionFn K y), w⟫ = 0 :=
  by
  intro w hw
  rw [add_sub_add_comm, inner_add_left, orthogonalProjectionFn_inner_eq_zero _ w hw,
    orthogonalProjectionFn_inner_eq_zero _ w hw, add_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x y : E
hm : orthogonalProjectionFn K x + orthogonalProjectionFn K y ∈ K
⊢ ∀ (w : E), w ∈ K → inner (x + y - (orthogonalProjectionFn K x + orthogonalProjectionFn K y)) w = 0
[PROOFSTEP]
intro w hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x y : E
hm : orthogonalProjectionFn K x + orthogonalProjectionFn K y ∈ K
w : E
hw : w ∈ K
⊢ inner (x + y - (orthogonalProjectionFn K x + orthogonalProjectionFn K y)) w = 0
[PROOFSTEP]
rw [add_sub_add_comm, inner_add_left, orthogonalProjectionFn_inner_eq_zero _ w hw,
  orthogonalProjectionFn_inner_eq_zero _ w hw, add_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x y : E
hm : orthogonalProjectionFn K x + orthogonalProjectionFn K y ∈ K
ho : ∀ (w : E), w ∈ K → inner (x + y - (orthogonalProjectionFn K x + orthogonalProjectionFn K y)) w = 0
⊢ (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) (x + y) =
    (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) x +
      (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) y
[PROOFSTEP]
ext
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x y : E
hm : orthogonalProjectionFn K x + orthogonalProjectionFn K y ∈ K
ho : ∀ (w : E), w ∈ K → inner (x + y - (orthogonalProjectionFn K x + orthogonalProjectionFn K y)) w = 0
⊢ ↑((fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) (x + y)) =
    ↑((fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) x +
        (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) y)
[PROOFSTEP]
simp [eq_orthogonalProjectionFn_of_mem_of_inner_eq_zero hm ho]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
c : 𝕜
x : E
⊢ AddHom.toFun
      { toFun := fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
        map_add' :=
          (_ :
            ∀ (x y : E),
              (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                  (x + y) =
                (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) x +
                  (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                    y) }
      (c • x) =
    ↑(RingHom.id 𝕜) c •
      AddHom.toFun
        { toFun := fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
          map_add' :=
            (_ :
              ∀ (x y : E),
                (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                    (x + y) =
                  (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) x +
                    (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                      y) }
        x
[PROOFSTEP]
have hm : c • orthogonalProjectionFn K x ∈ K := Submodule.smul_mem K _ (orthogonalProjectionFn_mem x)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
c : 𝕜
x : E
hm : c • orthogonalProjectionFn K x ∈ K
⊢ AddHom.toFun
      { toFun := fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
        map_add' :=
          (_ :
            ∀ (x y : E),
              (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                  (x + y) =
                (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) x +
                  (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                    y) }
      (c • x) =
    ↑(RingHom.id 𝕜) c •
      AddHom.toFun
        { toFun := fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
          map_add' :=
            (_ :
              ∀ (x y : E),
                (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                    (x + y) =
                  (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) x +
                    (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                      y) }
        x
[PROOFSTEP]
have ho : ∀ w ∈ K, ⟪c • x - c • orthogonalProjectionFn K x, w⟫ = 0 :=
  by
  intro w hw
  rw [← smul_sub, inner_smul_left, orthogonalProjectionFn_inner_eq_zero _ w hw, mul_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
c : 𝕜
x : E
hm : c • orthogonalProjectionFn K x ∈ K
⊢ ∀ (w : E), w ∈ K → inner (c • x - c • orthogonalProjectionFn K x) w = 0
[PROOFSTEP]
intro w hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
c : 𝕜
x : E
hm : c • orthogonalProjectionFn K x ∈ K
w : E
hw : w ∈ K
⊢ inner (c • x - c • orthogonalProjectionFn K x) w = 0
[PROOFSTEP]
rw [← smul_sub, inner_smul_left, orthogonalProjectionFn_inner_eq_zero _ w hw, mul_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
c : 𝕜
x : E
hm : c • orthogonalProjectionFn K x ∈ K
ho : ∀ (w : E), w ∈ K → inner (c • x - c • orthogonalProjectionFn K x) w = 0
⊢ AddHom.toFun
      { toFun := fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
        map_add' :=
          (_ :
            ∀ (x y : E),
              (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                  (x + y) =
                (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) x +
                  (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                    y) }
      (c • x) =
    ↑(RingHom.id 𝕜) c •
      AddHom.toFun
        { toFun := fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
          map_add' :=
            (_ :
              ∀ (x y : E),
                (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                    (x + y) =
                  (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) x +
                    (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                      y) }
        x
[PROOFSTEP]
ext
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
c : 𝕜
x : E
hm : c • orthogonalProjectionFn K x ∈ K
ho : ∀ (w : E), w ∈ K → inner (c • x - c • orthogonalProjectionFn K x) w = 0
⊢ ↑(AddHom.toFun
        { toFun := fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
          map_add' :=
            (_ :
              ∀ (x y : E),
                (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                    (x + y) =
                  (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) }) x +
                    (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                      y) }
        (c • x)) =
    ↑(↑(RingHom.id 𝕜) c •
        AddHom.toFun
          { toFun := fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
            map_add' :=
              (_ :
                ∀ (x y : E),
                  (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                      (x + y) =
                    (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                        x +
                      (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                        y) }
          x)
[PROOFSTEP]
simp [eq_orthogonalProjectionFn_of_mem_of_inner_eq_zero hm ho]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
⊢ ‖↑{
            toAddHom :=
              {
                toFun := fun v =>
                  { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
                map_add' :=
                  (_ :
                    ∀ (x y : E),
                      (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                          (x + y) =
                        (fun v =>
                              { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                            x +
                          (fun v =>
                              { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                            y) },
            map_smul' :=
              (_ :
                ∀ (c : 𝕜) (x : E),
                  AddHom.toFun
                      {
                        toFun := fun v =>
                          { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
                        map_add' :=
                          (_ :
                            ∀ (x y : E),
                              (fun v =>
                                    { val := orthogonalProjectionFn K v,
                                      property := (_ : orthogonalProjectionFn K v ∈ K) })
                                  (x + y) =
                                (fun v =>
                                      { val := orthogonalProjectionFn K v,
                                        property := (_ : orthogonalProjectionFn K v ∈ K) })
                                    x +
                                  (fun v =>
                                      { val := orthogonalProjectionFn K v,
                                        property := (_ : orthogonalProjectionFn K v ∈ K) })
                                    y) }
                      (c • x) =
                    ↑(RingHom.id 𝕜) c •
                      AddHom.toFun
                        {
                          toFun := fun v =>
                            { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
                          map_add' :=
                            (_ :
                              ∀ (x y : E),
                                (fun v =>
                                      { val := orthogonalProjectionFn K v,
                                        property := (_ : orthogonalProjectionFn K v ∈ K) })
                                    (x + y) =
                                  (fun v =>
                                        { val := orthogonalProjectionFn K v,
                                          property := (_ : orthogonalProjectionFn K v ∈ K) })
                                      x +
                                    (fun v =>
                                        { val := orthogonalProjectionFn K v,
                                          property := (_ : orthogonalProjectionFn K v ∈ K) })
                                      y) }
                        x) }
        x‖ ≤
    1 * ‖x‖
[PROOFSTEP]
simp only [one_mul, LinearMap.coe_mk]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
⊢ ‖↑{ toFun := fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
            map_add' :=
              (_ :
                ∀ (x y : E),
                  (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                      (x + y) =
                    (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                        x +
                      (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                        y) }
        x‖ ≤
    ‖x‖
[PROOFSTEP]
refine' le_of_pow_le_pow 2 (norm_nonneg _) (by norm_num) _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
⊢ 0 < 2
[PROOFSTEP]
norm_num
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
⊢ ‖↑{ toFun := fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) },
              map_add' :=
                (_ :
                  ∀ (x y : E),
                    (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                        (x + y) =
                      (fun v => { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                          x +
                        (fun v =>
                            { val := orthogonalProjectionFn K v, property := (_ : orthogonalProjectionFn K v ∈ K) })
                          y) }
          x‖ ^
      2 ≤
    ‖x‖ ^ 2
[PROOFSTEP]
change ‖orthogonalProjectionFn K x‖ ^ 2 ≤ ‖x‖ ^ 2
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
⊢ ‖orthogonalProjectionFn K x‖ ^ 2 ≤ ‖x‖ ^ 2
[PROOFSTEP]
nlinarith [orthogonalProjectionFn_norm_sq K x]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ v - ↑(↑(orthogonalProjection K) v) ∈ Kᗮ
[PROOFSTEP]
intro w hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hw : w ∈ K
⊢ inner w (v - ↑(↑(orthogonalProjection K) v)) = 0
[PROOFSTEP]
rw [inner_eq_zero_symm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hw : w ∈ K
⊢ inner (v - ↑(↑(orthogonalProjection K) v)) w = 0
[PROOFSTEP]
exact orthogonalProjection_inner_eq_zero _ _ hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝¹ inst✝ : HasOrthogonalProjection K
u v z : E
hv : v ∈ K
hz : z ∈ Kᗮ
hu : u = v + z
⊢ u - v ∈ Kᗮ
[PROOFSTEP]
simpa [hu]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝¹ inst✝ : HasOrthogonalProjection K
u : E
⊢ u = u - ↑(↑(orthogonalProjection K) u) + ↑(↑(orthogonalProjection K) u)
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝¹ : HasOrthogonalProjection K
U : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection U
y : E
⊢ ‖y - ↑(↑(orthogonalProjection U) y)‖ = ⨅ (x : { x // x ∈ U }), ‖y - ↑x‖
[PROOFSTEP]
rw [norm_eq_iInf_iff_inner_eq_zero _ (Submodule.coe_mem _)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝¹ : HasOrthogonalProjection K
U : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection U
y : E
⊢ ∀ (w : E), w ∈ U → inner (y - ↑(↑(orthogonalProjection U) y)) w = 0
[PROOFSTEP]
exact orthogonalProjection_inner_eq_zero _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝¹ : HasOrthogonalProjection K
K' : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K'
h : K = K'
u : E
⊢ ↑(↑(orthogonalProjection K) u) = ↑(↑(orthogonalProjection K') u)
[PROOFSTEP]
subst h
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝¹ : HasOrthogonalProjection K
u : E
inst✝ : HasOrthogonalProjection K
⊢ ↑(↑(orthogonalProjection K) u) = ↑(↑(orthogonalProjection K) u)
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : { x // x ∈ K }
⊢ ↑(orthogonalProjection K) ↑v = v
[PROOFSTEP]
ext
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : { x // x ∈ K }
⊢ ↑(↑(orthogonalProjection K) ↑v) = ↑v
[PROOFSTEP]
apply eq_orthogonalProjection_of_mem_of_inner_eq_zero
[GOAL]
case a.hvm
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : { x // x ∈ K }
⊢ ↑v ∈ K
[PROOFSTEP]
simp
[GOAL]
case a.hvo
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : { x // x ∈ K }
⊢ ∀ (w : E), w ∈ K → inner (↑v - ↑v) w = 0
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ ↑(↑(orthogonalProjection K) v) = v ↔ v ∈ K
[PROOFSTEP]
refine' ⟨fun h => _, fun h => eq_orthogonalProjection_of_mem_of_inner_eq_zero h _⟩
[GOAL]
case refine'_1
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
h : ↑(↑(orthogonalProjection K) v) = v
⊢ v ∈ K
[PROOFSTEP]
rw [← h]
[GOAL]
case refine'_1
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
h : ↑(↑(orthogonalProjection K) v) = v
⊢ ↑(↑(orthogonalProjection K) v) ∈ K
[PROOFSTEP]
simp
[GOAL]
case refine'_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
h : v ∈ K
⊢ ∀ (w : E), w ∈ K → inner (v - v) w = 0
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E✝ : Type u_2
F : Type u_3
inst✝¹¹ : IsROrC 𝕜
inst✝¹⁰ : NormedAddCommGroup E✝
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace 𝕜 E✝
inst✝⁷ : InnerProductSpace ℝ F
K : Submodule 𝕜 E✝
inst✝⁶ : HasOrthogonalProjection K
E : Type u_4
E' : Type u_5
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 E'
f : E →ₗᵢ[𝕜] E'
p : Submodule 𝕜 E
inst✝¹ : HasOrthogonalProjection p
inst✝ : HasOrthogonalProjection (Submodule.map f.toLinearMap p)
x : E
⊢ ↑f ↑(↑(orthogonalProjection p) x) = ↑(↑(orthogonalProjection (Submodule.map f.toLinearMap p)) (↑f x))
[PROOFSTEP]
refine' (eq_orthogonalProjection_of_mem_of_inner_eq_zero _ fun y hy => _).symm
[GOAL]
case refine'_1
𝕜 : Type u_1
E✝ : Type u_2
F : Type u_3
inst✝¹¹ : IsROrC 𝕜
inst✝¹⁰ : NormedAddCommGroup E✝
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace 𝕜 E✝
inst✝⁷ : InnerProductSpace ℝ F
K : Submodule 𝕜 E✝
inst✝⁶ : HasOrthogonalProjection K
E : Type u_4
E' : Type u_5
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 E'
f : E →ₗᵢ[𝕜] E'
p : Submodule 𝕜 E
inst✝¹ : HasOrthogonalProjection p
inst✝ : HasOrthogonalProjection (Submodule.map f.toLinearMap p)
x : E
⊢ ↑f ↑(↑(orthogonalProjection p) x) ∈ Submodule.map f.toLinearMap p
case refine'_2
𝕜 : Type u_1
E✝ : Type u_2
F : Type u_3
inst✝¹¹ : IsROrC 𝕜
inst✝¹⁰ : NormedAddCommGroup E✝
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace 𝕜 E✝
inst✝⁷ : InnerProductSpace ℝ F
K : Submodule 𝕜 E✝
inst✝⁶ : HasOrthogonalProjection K
E : Type u_4
E' : Type u_5
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 E'
f : E →ₗᵢ[𝕜] E'
p : Submodule 𝕜 E
inst✝¹ : HasOrthogonalProjection p
inst✝ : HasOrthogonalProjection (Submodule.map f.toLinearMap p)
x : E
y : (fun x => E') ↑(↑(orthogonalProjection p) x)
hy : y ∈ Submodule.map f.toLinearMap p
⊢ inner (↑f x - ↑f ↑(↑(orthogonalProjection p) x)) y = 0
[PROOFSTEP]
refine' Submodule.apply_coe_mem_map _ _
[GOAL]
case refine'_2
𝕜 : Type u_1
E✝ : Type u_2
F : Type u_3
inst✝¹¹ : IsROrC 𝕜
inst✝¹⁰ : NormedAddCommGroup E✝
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace 𝕜 E✝
inst✝⁷ : InnerProductSpace ℝ F
K : Submodule 𝕜 E✝
inst✝⁶ : HasOrthogonalProjection K
E : Type u_4
E' : Type u_5
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 E'
f : E →ₗᵢ[𝕜] E'
p : Submodule 𝕜 E
inst✝¹ : HasOrthogonalProjection p
inst✝ : HasOrthogonalProjection (Submodule.map f.toLinearMap p)
x : E
y : (fun x => E') ↑(↑(orthogonalProjection p) x)
hy : y ∈ Submodule.map f.toLinearMap p
⊢ inner (↑f x - ↑f ↑(↑(orthogonalProjection p) x)) y = 0
[PROOFSTEP]
rcases hy with ⟨x', hx', rfl : f x' = y⟩
[GOAL]
case refine'_2.intro.intro
𝕜 : Type u_1
E✝ : Type u_2
F : Type u_3
inst✝¹¹ : IsROrC 𝕜
inst✝¹⁰ : NormedAddCommGroup E✝
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace 𝕜 E✝
inst✝⁷ : InnerProductSpace ℝ F
K : Submodule 𝕜 E✝
inst✝⁶ : HasOrthogonalProjection K
E : Type u_4
E' : Type u_5
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace 𝕜 E'
f : E →ₗᵢ[𝕜] E'
p : Submodule 𝕜 E
inst✝¹ : HasOrthogonalProjection p
inst✝ : HasOrthogonalProjection (Submodule.map f.toLinearMap p)
x x' : E
hx' : x' ∈ ↑p
⊢ inner (↑f x - ↑f ↑(↑(orthogonalProjection p) x)) (↑f x') = 0
[PROOFSTEP]
rw [← f.map_sub, f.inner_map_map, orthogonalProjection_inner_eq_zero x x' hx']
[GOAL]
𝕜 : Type u_1
E✝ : Type u_2
F : Type u_3
inst✝¹⁰ : IsROrC 𝕜
inst✝⁹ : NormedAddCommGroup E✝
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : InnerProductSpace 𝕜 E✝
inst✝⁶ : InnerProductSpace ℝ F
K : Submodule 𝕜 E✝
inst✝⁵ : HasOrthogonalProjection K
E : Type u_4
E' : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup E'
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace 𝕜 E'
f : E ≃ₗᵢ[𝕜] E'
p : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection p
x : E'
⊢ ↑(↑(orthogonalProjection (Submodule.map (↑f.toLinearEquiv) p)) x) =
    ↑f ↑(↑(orthogonalProjection p) (↑(LinearIsometryEquiv.symm f) x))
[PROOFSTEP]
simpa only [f.coe_toLinearIsometry, f.apply_symm_apply] using
  (f.toLinearIsometry.map_orthogonalProjection' p (f.symm x)).symm
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
⊢ orthogonalProjection ⊥ = 0
[PROOFSTEP]
ext
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
⊢ 0 ≤ 1
[PROOFSTEP]
norm_num
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
⊢ ↑(‖v‖ ^ 2) • ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = inner v w • v
[PROOFSTEP]
suffices ((orthogonalProjection (𝕜 ∙ v) (((‖v‖ : 𝕜) ^ 2) • w)) : E) = ⟪v, w⟫ • v by simpa using this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
this : ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) (↑‖v‖ ^ 2 • w)) = inner v w • v
⊢ ↑(‖v‖ ^ 2) • ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = inner v w • v
[PROOFSTEP]
simpa using this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
⊢ ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) (↑‖v‖ ^ 2 • w)) = inner v w • v
[PROOFSTEP]
apply eq_orthogonalProjection_of_mem_of_inner_eq_zero
[GOAL]
case hvm
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
⊢ inner v w • v ∈ Submodule.span 𝕜 {v}
[PROOFSTEP]
rw [Submodule.mem_span_singleton]
[GOAL]
case hvm
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
⊢ ∃ a, a • v = inner v w • v
[PROOFSTEP]
use⟪v, w⟫
[GOAL]
case hvo
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
⊢ ∀ (w_1 : E), w_1 ∈ Submodule.span 𝕜 {v} → inner (↑‖v‖ ^ 2 • w - inner v w • v) w_1 = 0
[PROOFSTEP]
rw [← Submodule.mem_orthogonal', Submodule.mem_orthogonal_singleton_iff_inner_left]
[GOAL]
case hvo
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
⊢ inner (↑‖v‖ ^ 2 • w - inner v w • v) v = 0
[PROOFSTEP]
simp [inner_sub_left, inner_smul_left, inner_self_eq_norm_sq_to_K, mul_comm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
⊢ ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = (inner v w / ↑(‖v‖ ^ 2)) • v
[PROOFSTEP]
by_cases hv : v = 0
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hv : v = 0
⊢ ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = (inner v w / ↑(‖v‖ ^ 2)) • v
[PROOFSTEP]
rw [hv, eq_orthogonalProjection_of_eq_submodule (Submodule.span_zero_singleton 𝕜)]
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hv : v = 0
⊢ ↑(↑(orthogonalProjection ⊥) w) = (inner 0 w / ↑(‖0‖ ^ 2)) • 0
[PROOFSTEP]
simp
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hv : ¬v = 0
⊢ ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = (inner v w / ↑(‖v‖ ^ 2)) • v
[PROOFSTEP]
have hv' : ‖v‖ ≠ 0 := ne_of_gt (norm_pos_iff.mpr hv)
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hv : ¬v = 0
hv' : ‖v‖ ≠ 0
⊢ ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = (inner v w / ↑(‖v‖ ^ 2)) • v
[PROOFSTEP]
have key :
  (((‖v‖ ^ 2 : ℝ) : 𝕜)⁻¹ * ((‖v‖ ^ 2 : ℝ) : 𝕜)) • ((orthogonalProjection (𝕜 ∙ v) w) : E) =
    (((‖v‖ ^ 2 : ℝ) : 𝕜)⁻¹ * ⟪v, w⟫) • v :=
  by simp [mul_smul, smul_orthogonalProjection_singleton 𝕜 w, -ofReal_pow]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hv : ¬v = 0
hv' : ‖v‖ ≠ 0
⊢ ((↑(‖v‖ ^ 2))⁻¹ * ↑(‖v‖ ^ 2)) • ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = ((↑(‖v‖ ^ 2))⁻¹ * inner v w) • v
[PROOFSTEP]
simp [mul_smul, smul_orthogonalProjection_singleton 𝕜 w, -ofReal_pow]
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hv : ¬v = 0
hv' : ‖v‖ ≠ 0
key :
  ((↑(‖v‖ ^ 2))⁻¹ * ↑(‖v‖ ^ 2)) • ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = ((↑(‖v‖ ^ 2))⁻¹ * inner v w) • v
⊢ ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = (inner v w / ↑(‖v‖ ^ 2)) • v
[PROOFSTEP]
convert key using 1
[GOAL]
case h.e'_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hv : ¬v = 0
hv' : ‖v‖ ≠ 0
key :
  ((↑(‖v‖ ^ 2))⁻¹ * ↑(‖v‖ ^ 2)) • ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = ((↑(‖v‖ ^ 2))⁻¹ * inner v w) • v
⊢ ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) =
    ((↑(‖v‖ ^ 2))⁻¹ * ↑(‖v‖ ^ 2)) • ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w)
[PROOFSTEP]
field_simp [hv']
[GOAL]
case h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v w : E
hv : ¬v = 0
hv' : ‖v‖ ≠ 0
key :
  ((↑(‖v‖ ^ 2))⁻¹ * ↑(‖v‖ ^ 2)) • ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = ((↑(‖v‖ ^ 2))⁻¹ * inner v w) • v
⊢ (inner v w / ↑(‖v‖ ^ 2)) • v = ((↑(‖v‖ ^ 2))⁻¹ * inner v w) • v
[PROOFSTEP]
field_simp [hv']
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : ‖v‖ = 1
w : E
⊢ ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = inner v w • v
[PROOFSTEP]
rw [← smul_orthogonalProjection_singleton 𝕜 w]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : ‖v‖ = 1
w : E
⊢ ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w) = ↑(‖v‖ ^ 2) • ↑(↑(orthogonalProjection (Submodule.span 𝕜 {v})) w)
[PROOFSTEP]
simp [hv]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
⊢ ↑(2 • LinearMap.comp (Submodule.subtype K) ↑(orthogonalProjection K) - LinearMap.id)
      (↑(2 • LinearMap.comp (Submodule.subtype K) ↑(orthogonalProjection K) - LinearMap.id) x) =
    x
[PROOFSTEP]
simp [two_smul]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
src✝ : E ≃ₗ[𝕜] E := reflectionLinearEquiv K
⊢ ∀ (x : E),
    ‖↑{ toLinearMap := ↑src✝, invFun := src✝.invFun, left_inv := (_ : Function.LeftInverse src✝.invFun src✝.toFun),
              right_inv := (_ : Function.RightInverse src✝.invFun src✝.toFun) }
          x‖ =
      ‖x‖
[PROOFSTEP]
intro x
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
src✝ : E ≃ₗ[𝕜] E := reflectionLinearEquiv K
x : E
⊢ ‖↑{ toLinearMap := ↑src✝, invFun := src✝.invFun, left_inv := (_ : Function.LeftInverse src✝.invFun src✝.toFun),
            right_inv := (_ : Function.RightInverse src✝.invFun src✝.toFun) }
        x‖ =
    ‖x‖
[PROOFSTEP]
dsimp only
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
src✝ : E ≃ₗ[𝕜] E := reflectionLinearEquiv K
x : E
⊢ ‖↑{ toLinearMap := ↑(reflectionLinearEquiv K), invFun := (reflectionLinearEquiv K).invFun,
            left_inv :=
              (_ : Function.LeftInverse (reflectionLinearEquiv K).invFun (↑(reflectionLinearEquiv K)).toAddHom.toFun),
            right_inv :=
              (_ : Function.RightInverse (reflectionLinearEquiv K).invFun (↑(reflectionLinearEquiv K)).toAddHom.toFun) }
        x‖ =
    ‖x‖
[PROOFSTEP]
let w : K := orthogonalProjection K x
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
src✝ : E ≃ₗ[𝕜] E := reflectionLinearEquiv K
x : E
w : { x // x ∈ K } := ↑(orthogonalProjection K) x
⊢ ‖↑{ toLinearMap := ↑(reflectionLinearEquiv K), invFun := (reflectionLinearEquiv K).invFun,
            left_inv :=
              (_ : Function.LeftInverse (reflectionLinearEquiv K).invFun (↑(reflectionLinearEquiv K)).toAddHom.toFun),
            right_inv :=
              (_ : Function.RightInverse (reflectionLinearEquiv K).invFun (↑(reflectionLinearEquiv K)).toAddHom.toFun) }
        x‖ =
    ‖x‖
[PROOFSTEP]
let v := x - w
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
src✝ : E ≃ₗ[𝕜] E := reflectionLinearEquiv K
x : E
w : { x // x ∈ K } := ↑(orthogonalProjection K) x
v : E := x - ↑w
⊢ ‖↑{ toLinearMap := ↑(reflectionLinearEquiv K), invFun := (reflectionLinearEquiv K).invFun,
            left_inv :=
              (_ : Function.LeftInverse (reflectionLinearEquiv K).invFun (↑(reflectionLinearEquiv K)).toAddHom.toFun),
            right_inv :=
              (_ : Function.RightInverse (reflectionLinearEquiv K).invFun (↑(reflectionLinearEquiv K)).toAddHom.toFun) }
        x‖ =
    ‖x‖
[PROOFSTEP]
have : ⟪v, w⟫ = 0 := orthogonalProjection_inner_eq_zero x w w.2
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
src✝ : E ≃ₗ[𝕜] E := reflectionLinearEquiv K
x : E
w : { x // x ∈ K } := ↑(orthogonalProjection K) x
v : E := x - ↑w
this : inner v ↑w = 0
⊢ ‖↑{ toLinearMap := ↑(reflectionLinearEquiv K), invFun := (reflectionLinearEquiv K).invFun,
            left_inv :=
              (_ : Function.LeftInverse (reflectionLinearEquiv K).invFun (↑(reflectionLinearEquiv K)).toAddHom.toFun),
            right_inv :=
              (_ : Function.RightInverse (reflectionLinearEquiv K).invFun (↑(reflectionLinearEquiv K)).toAddHom.toFun) }
        x‖ =
    ‖x‖
[PROOFSTEP]
convert norm_sub_eq_norm_add this using 2
[GOAL]
case h.e'_2.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
src✝ : E ≃ₗ[𝕜] E := reflectionLinearEquiv K
x : E
w : { x // x ∈ K } := ↑(orthogonalProjection K) x
v : E := x - ↑w
this : inner v ↑w = 0
⊢ ↑{ toLinearMap := ↑(reflectionLinearEquiv K), invFun := (reflectionLinearEquiv K).invFun,
          left_inv :=
            (_ : Function.LeftInverse (reflectionLinearEquiv K).invFun (↑(reflectionLinearEquiv K)).toAddHom.toFun),
          right_inv :=
            (_ : Function.RightInverse (reflectionLinearEquiv K).invFun (↑(reflectionLinearEquiv K)).toAddHom.toFun) }
      x =
    ↑w - v
[PROOFSTEP]
rw [LinearEquiv.coe_mk, reflectionLinearEquiv, LinearEquiv.toFun_eq_coe, LinearEquiv.coe_ofInvolutive,
  LinearMap.sub_apply, LinearMap.id_apply, two_smul, LinearMap.add_apply, LinearMap.comp_apply, Submodule.subtype_apply,
  ContinuousLinearMap.coe_coe]
[GOAL]
case h.e'_2.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
src✝ : E ≃ₗ[𝕜] E := reflectionLinearEquiv K
x : E
w : { x // x ∈ K } := ↑(orthogonalProjection K) x
v : E := x - ↑w
this : inner v ↑w = 0
⊢ ↑(↑(orthogonalProjection K) x) + ↑(↑(orthogonalProjection K) x) - x = ↑w - v
[PROOFSTEP]
dsimp
[GOAL]
case h.e'_2.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
src✝ : E ≃ₗ[𝕜] E := reflectionLinearEquiv K
x : E
w : { x // x ∈ K } := ↑(orthogonalProjection K) x
v : E := x - ↑w
this : inner v ↑w = 0
⊢ ↑(↑(orthogonalProjection K) x) + ↑(↑(orthogonalProjection K) x) - x =
    ↑(↑(orthogonalProjection K) x) - (x - ↑(↑(orthogonalProjection K) x))
[PROOFSTEP]
abel
[GOAL]
case h.e'_2.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
src✝ : E ≃ₗ[𝕜] E := reflectionLinearEquiv K
x : E
w : { x // x ∈ K } := ↑(orthogonalProjection K) x
v : E := x - ↑w
this : inner v ↑w = 0
⊢ ↑(↑(orthogonalProjection K) x) + ↑(↑(orthogonalProjection K) x) - x =
    ↑(↑(orthogonalProjection K) x) - (x - ↑(↑(orthogonalProjection K) x))
[PROOFSTEP]
abel
[GOAL]
case h.e'_3.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
src✝ : E ≃ₗ[𝕜] E := reflectionLinearEquiv K
x : E
w : { x // x ∈ K } := ↑(orthogonalProjection K) x
v : E := x - ↑w
this : inner v ↑w = 0
⊢ x = ↑w + v
[PROOFSTEP]
simp only [add_sub_cancel'_right, eq_self_iff_true]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ ↑(reflection Kᗮ) v = -↑(reflection K) v
[PROOFSTEP]
simp [reflection_apply]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ 2 • v - 2 • ↑(↑(orthogonalProjection K) v) - v = v - 2 • ↑(↑(orthogonalProjection K) v)
[PROOFSTEP]
abel
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ 2 • v - 2 • ↑(↑(orthogonalProjection K) v) - v = v - 2 • ↑(↑(orthogonalProjection K) v)
[PROOFSTEP]
abel
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
⊢ reflection Kᗮ = LinearIsometryEquiv.trans (reflection K) (LinearIsometryEquiv.neg 𝕜)
[PROOFSTEP]
ext
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x✝ : E
⊢ ↑(reflection Kᗮ) x✝ = ↑(LinearIsometryEquiv.trans (reflection K) (LinearIsometryEquiv.neg 𝕜)) x✝
[PROOFSTEP]
apply reflection_orthogonal_apply
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
⊢ ↑(reflection (Submodule.span 𝕜 {u})) v = 2 • (inner u v / ↑‖u‖ ^ 2) • u - v
[PROOFSTEP]
rw [reflection_apply, orthogonalProjection_singleton, ofReal_pow]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
⊢ ↑(reflection K) x = x ↔ x ∈ K
[PROOFSTEP]
rw [← orthogonalProjection_eq_self_iff, reflection_apply, sub_eq_iff_eq_add', ← two_smul 𝕜, two_smul ℕ, ← two_smul 𝕜]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
⊢ 2 • ↑(↑(orthogonalProjection K) x) = 2 • x ↔ ↑(↑(orthogonalProjection K) x) = x
[PROOFSTEP]
refine' (smul_right_injective E _).eq_iff
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
⊢ 2 ≠ 0
[PROOFSTEP]
exact two_ne_zero
[GOAL]
𝕜 : Type u_1
E✝ : Type u_2
F : Type u_3
inst✝¹⁰ : IsROrC 𝕜
inst✝⁹ : NormedAddCommGroup E✝
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : InnerProductSpace 𝕜 E✝
inst✝⁶ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E✝
inst✝⁵ : HasOrthogonalProjection K✝
E : Type u_4
E' : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup E'
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace 𝕜 E'
f : E ≃ₗᵢ[𝕜] E'
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E'
⊢ ↑(reflection (Submodule.map (↑f.toLinearEquiv) K)) x = ↑f (↑(reflection K) (↑(LinearIsometryEquiv.symm f) x))
[PROOFSTEP]
simp [two_smul, reflection_apply, orthogonalProjection_map_apply f K x]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
⊢ reflection ⊥ = LinearIsometryEquiv.neg 𝕜
[PROOFSTEP]
ext
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x✝ : E
⊢ ↑(reflection ⊥) x✝ = ↑(LinearIsometryEquiv.neg 𝕜) x✝
[PROOFSTEP]
simp [reflection_apply]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
h : K₁ ≤ K₂
inst✝ : HasOrthogonalProjection K₁
⊢ K₁ ⊔ K₁ᗮ ⊓ K₂ = K₂
[PROOFSTEP]
ext x
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
h : K₁ ≤ K₂
inst✝ : HasOrthogonalProjection K₁
x : E
⊢ x ∈ K₁ ⊔ K₁ᗮ ⊓ K₂ ↔ x ∈ K₂
[PROOFSTEP]
rw [Submodule.mem_sup]
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
h : K₁ ≤ K₂
inst✝ : HasOrthogonalProjection K₁
x : E
⊢ (∃ y, y ∈ K₁ ∧ ∃ z, z ∈ K₁ᗮ ⊓ K₂ ∧ y + z = x) ↔ x ∈ K₂
[PROOFSTEP]
let v : K₁ := orthogonalProjection K₁ x
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
h : K₁ ≤ K₂
inst✝ : HasOrthogonalProjection K₁
x : E
v : { x // x ∈ K₁ } := ↑(orthogonalProjection K₁) x
⊢ (∃ y, y ∈ K₁ ∧ ∃ z, z ∈ K₁ᗮ ⊓ K₂ ∧ y + z = x) ↔ x ∈ K₂
[PROOFSTEP]
have hvm : x - v ∈ K₁ᗮ := sub_orthogonalProjection_mem_orthogonal x
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
h : K₁ ≤ K₂
inst✝ : HasOrthogonalProjection K₁
x : E
v : { x // x ∈ K₁ } := ↑(orthogonalProjection K₁) x
hvm : x - ↑v ∈ K₁ᗮ
⊢ (∃ y, y ∈ K₁ ∧ ∃ z, z ∈ K₁ᗮ ⊓ K₂ ∧ y + z = x) ↔ x ∈ K₂
[PROOFSTEP]
constructor
[GOAL]
case h.mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
h : K₁ ≤ K₂
inst✝ : HasOrthogonalProjection K₁
x : E
v : { x // x ∈ K₁ } := ↑(orthogonalProjection K₁) x
hvm : x - ↑v ∈ K₁ᗮ
⊢ (∃ y, y ∈ K₁ ∧ ∃ z, z ∈ K₁ᗮ ⊓ K₂ ∧ y + z = x) → x ∈ K₂
[PROOFSTEP]
rintro ⟨y, hy, z, hz, rfl⟩
[GOAL]
case h.mp.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
h : K₁ ≤ K₂
inst✝ : HasOrthogonalProjection K₁
y : E
hy : y ∈ K₁
z : E
hz : z ∈ K₁ᗮ ⊓ K₂
v : { x // x ∈ K₁ } := ↑(orthogonalProjection K₁) (y + z)
hvm : y + z - ↑v ∈ K₁ᗮ
⊢ y + z ∈ K₂
[PROOFSTEP]
exact K₂.add_mem (h hy) hz.2
[GOAL]
case h.mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
h : K₁ ≤ K₂
inst✝ : HasOrthogonalProjection K₁
x : E
v : { x // x ∈ K₁ } := ↑(orthogonalProjection K₁) x
hvm : x - ↑v ∈ K₁ᗮ
⊢ x ∈ K₂ → ∃ y, y ∈ K₁ ∧ ∃ z, z ∈ K₁ᗮ ⊓ K₂ ∧ y + z = x
[PROOFSTEP]
exact fun hx => ⟨v, v.prop, x - v, ⟨hvm, K₂.sub_mem hx (h v.prop)⟩, add_sub_cancel'_right _ _⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
⊢ K ⊔ Kᗮ = ⊤
[PROOFSTEP]
convert Submodule.sup_orthogonal_inf_of_completeSpace (le_top : K ≤ ⊤) using 2
[GOAL]
case h.e'_2.h.e'_4
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
⊢ Kᗮ = Kᗮ ⊓ ⊤
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ v = ↑(↑(orthogonalProjection K) v) + (v - ↑(↑(orthogonalProjection K) v))
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
⊢ Kᗮᗮ = K
[PROOFSTEP]
ext v
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ v ∈ Kᗮᗮ ↔ v ∈ K
[PROOFSTEP]
constructor
[GOAL]
case h.mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ v ∈ Kᗮᗮ → v ∈ K
[PROOFSTEP]
obtain ⟨y, hy, z, hz, rfl⟩ := K.exists_add_mem_mem_orthogonal v
[GOAL]
case h.mp.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
y : E
hy : y ∈ K
z : E
hz : z ∈ Kᗮ
⊢ y + z ∈ Kᗮᗮ → y + z ∈ K
[PROOFSTEP]
intro hv
[GOAL]
case h.mp.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
y : E
hy : y ∈ K
z : E
hz : z ∈ Kᗮ
hv : y + z ∈ Kᗮᗮ
⊢ y + z ∈ K
[PROOFSTEP]
have hz' : z = 0 := by
  have hyz : ⟪z, y⟫ = 0 := by simp [hz y hy, inner_eq_zero_symm]
  simpa [inner_add_right, hyz] using hv z hz
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
y : E
hy : y ∈ K
z : E
hz : z ∈ Kᗮ
hv : y + z ∈ Kᗮᗮ
⊢ z = 0
[PROOFSTEP]
have hyz : ⟪z, y⟫ = 0 := by simp [hz y hy, inner_eq_zero_symm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
y : E
hy : y ∈ K
z : E
hz : z ∈ Kᗮ
hv : y + z ∈ Kᗮᗮ
⊢ inner z y = 0
[PROOFSTEP]
simp [hz y hy, inner_eq_zero_symm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
y : E
hy : y ∈ K
z : E
hz : z ∈ Kᗮ
hv : y + z ∈ Kᗮᗮ
hyz : inner z y = 0
⊢ z = 0
[PROOFSTEP]
simpa [inner_add_right, hyz] using hv z hz
[GOAL]
case h.mp.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
y : E
hy : y ∈ K
z : E
hz : z ∈ Kᗮ
hv : y + z ∈ Kᗮᗮ
hz' : z = 0
⊢ y + z ∈ K
[PROOFSTEP]
simp [hy, hz']
[GOAL]
case h.mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ v ∈ K → v ∈ Kᗮᗮ
[PROOFSTEP]
intro hv w hw
[GOAL]
case h.mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : v ∈ K
w : E
hw : w ∈ Kᗮ
⊢ inner w v = 0
[PROOFSTEP]
rw [inner_eq_zero_symm]
[GOAL]
case h.mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : v ∈ K
w : E
hw : w ∈ Kᗮ
⊢ inner v w = 0
[PROOFSTEP]
exact hw v hv
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ Kᗮᗮ = topologicalClosure K
[PROOFSTEP]
refine' le_antisymm _ _
[GOAL]
case refine'_1
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ Kᗮᗮ ≤ topologicalClosure K
[PROOFSTEP]
convert Submodule.orthogonal_orthogonal_monotone K.le_topologicalClosure using 1
[GOAL]
case h.e'_4
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ topologicalClosure K = (topologicalClosure K)ᗮᗮ
[PROOFSTEP]
rw [K.topologicalClosure.orthogonal_orthogonal]
[GOAL]
case refine'_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ topologicalClosure K ≤ Kᗮᗮ
[PROOFSTEP]
exact K.topologicalClosure_minimal K.le_orthogonal_orthogonal Kᗮ.isClosed_orthogonal
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
⊢ Kᗮ = ⊥ ↔ K = ⊤
[PROOFSTEP]
refine' ⟨_, fun h => by rw [h, Submodule.top_orthogonal_eq_bot]⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
h : K = ⊤
⊢ Kᗮ = ⊥
[PROOFSTEP]
rw [h, Submodule.top_orthogonal_eq_bot]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
⊢ Kᗮ = ⊥ → K = ⊤
[PROOFSTEP]
intro h
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
h : Kᗮ = ⊥
⊢ K = ⊤
[PROOFSTEP]
have : K ⊔ Kᗮ = ⊤ := Submodule.sup_orthogonal_of_completeSpace
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
h : Kᗮ = ⊥
this : K ⊔ Kᗮ = ⊤
⊢ K = ⊤
[PROOFSTEP]
rwa [h, sup_comm, bot_sup_eq] at this 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : v ∈ Kᗮ
⊢ ↑(orthogonalProjection K) v = 0
[PROOFSTEP]
ext
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : v ∈ Kᗮ
⊢ ↑(↑(orthogonalProjection K) v) = ↑0
[PROOFSTEP]
convert eq_orthogonalProjection_of_mem_orthogonal (K := K) _ _
[GOAL]
case a.convert_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : v ∈ Kᗮ
⊢ ↑0 ∈ K
[PROOFSTEP]
simp [hv]
[GOAL]
case a.convert_4
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : v ∈ Kᗮ
⊢ v - ↑0 ∈ Kᗮ
[PROOFSTEP]
simp [hv]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K U V : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection U
h : ContinuousLinearMap.comp (orthogonalProjection U) (Submodule.subtypeL V) = 0
u : E
hu : u ∈ U
v : E
hv : v ∈ V
⊢ inner v u = 0
[PROOFSTEP]
convert orthogonalProjection_inner_eq_zero v u hu using 2
[GOAL]
case h.e'_2.h.e'_4
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K U V : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection U
h : ContinuousLinearMap.comp (orthogonalProjection U) (Submodule.subtypeL V) = 0
u : E
hu : u ∈ U
v : E
hv : v ∈ V
⊢ v = v - ↑(↑(orthogonalProjection U) v)
[PROOFSTEP]
have : orthogonalProjection U v = 0 := FunLike.congr_fun h (⟨_, hv⟩ : V)
[GOAL]
case h.e'_2.h.e'_4
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K U V : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection U
h : ContinuousLinearMap.comp (orthogonalProjection U) (Submodule.subtypeL V) = 0
u : E
hu : u ∈ U
v : E
hv : v ∈ V
this : ↑(orthogonalProjection U) v = 0
⊢ v = v - ↑(↑(orthogonalProjection U) v)
[PROOFSTEP]
rw [this, Submodule.coe_zero, sub_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
⊢ ↑(orthogonalProjection K) x = ↑(Submodule.linearProjOfIsCompl K Kᗮ (_ : IsCompl K Kᗮ)) x
[PROOFSTEP]
have : IsCompl K Kᗮ := Submodule.isCompl_orthogonal_of_completeSpace
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
this : IsCompl K Kᗮ
⊢ ↑(orthogonalProjection K) x = ↑(Submodule.linearProjOfIsCompl K Kᗮ (_ : IsCompl K Kᗮ)) x
[PROOFSTEP]
conv_lhs => rw [← Submodule.linear_proj_add_linearProjOfIsCompl_eq_self this x]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
this : IsCompl K Kᗮ
| ↑(orthogonalProjection K) x
[PROOFSTEP]
rw [← Submodule.linear_proj_add_linearProjOfIsCompl_eq_self this x]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
this : IsCompl K Kᗮ
| ↑(orthogonalProjection K) x
[PROOFSTEP]
rw [← Submodule.linear_proj_add_linearProjOfIsCompl_eq_self this x]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
this : IsCompl K Kᗮ
| ↑(orthogonalProjection K) x
[PROOFSTEP]
rw [← Submodule.linear_proj_add_linearProjOfIsCompl_eq_self this x]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x : E
this : IsCompl K Kᗮ
⊢ ↑(orthogonalProjection K)
      (↑(↑(Submodule.linearProjOfIsCompl K Kᗮ this) x) +
        ↑(↑(Submodule.linearProjOfIsCompl Kᗮ K (_ : IsCompl Kᗮ K)) x)) =
    ↑(Submodule.linearProjOfIsCompl K Kᗮ (_ : IsCompl K Kᗮ)) x
[PROOFSTEP]
rw [map_add, orthogonalProjection_mem_subspace_eq_self,
  orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero (Submodule.coe_mem _), add_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : v ∈ Kᗮ
⊢ ↑(reflection K) v = -v
[PROOFSTEP]
simp [reflection_apply, orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero hv]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K U V : Submodule 𝕜 E
inst✝¹ : HasOrthogonalProjection U
inst✝ : HasOrthogonalProjection V
h : U ≤ V
x : E
⊢ ↑(orthogonalProjection U) x = ↑(orthogonalProjection U) ↑(↑(orthogonalProjection V) x)
[PROOFSTEP]
simpa only [sub_eq_zero, map_sub] using
  orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero
    (Submodule.orthogonal_le h (sub_orthogonalProjection_mem_orthogonal x))
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))
[PROOFSTEP]
cases isEmpty_or_nonempty ι
[GOAL]
case inl
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : IsEmpty ι
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))
[PROOFSTEP]
exact tendsto_of_isEmpty
[GOAL]
case inr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))
[PROOFSTEP]
let y := (orthogonalProjection (⨆ i, U i).topologicalClosure x : E)
[GOAL]
case inr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))
[PROOFSTEP]
have proj_x : ∀ i, orthogonalProjection (U i) x = orthogonalProjection (U i) y := fun i =>
  (orthogonalProjection_orthogonalProjection_of_le ((le_iSup U i).trans (iSup U).le_topologicalClosure) _).symm
[GOAL]
case inr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))
[PROOFSTEP]
suffices ∀ ε > 0, ∃ I, ∀ i ≥ I, ‖(orthogonalProjection (U i) y : E) - y‖ < ε by
  simpa only [proj_x, NormedAddCommGroup.tendsto_atTop] using this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
this : ∀ (ε : ℝ), ε > 0 → ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))
[PROOFSTEP]
simpa only [proj_x, NormedAddCommGroup.tendsto_atTop] using this
[GOAL]
case inr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
⊢ ∀ (ε : ℝ), ε > 0 → ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε
[PROOFSTEP]
intro ε hε
[GOAL]
case inr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
⊢ ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε
[PROOFSTEP]
obtain ⟨a, ha, hay⟩ : ∃ a ∈ ⨆ i, U i, dist y a < ε :=
  by
  have y_mem : y ∈ (⨆ i, U i).topologicalClosure := Submodule.coe_mem _
  rw [← SetLike.mem_coe, Submodule.topologicalClosure_coe, Metric.mem_closure_iff] at y_mem 
  exact y_mem ε hε
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
⊢ ∃ a, a ∈ ⨆ (i : ι), U i ∧ dist y a < ε
[PROOFSTEP]
have y_mem : y ∈ (⨆ i, U i).topologicalClosure := Submodule.coe_mem _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
y_mem : y ∈ Submodule.topologicalClosure (⨆ (i : ι), U i)
⊢ ∃ a, a ∈ ⨆ (i : ι), U i ∧ dist y a < ε
[PROOFSTEP]
rw [← SetLike.mem_coe, Submodule.topologicalClosure_coe, Metric.mem_closure_iff] at y_mem 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
y_mem : ∀ (ε : ℝ), ε > 0 → ∃ b, b ∈ ↑(⨆ (i : ι), U i) ∧ dist y b < ε
⊢ ∃ a, a ∈ ⨆ (i : ι), U i ∧ dist y a < ε
[PROOFSTEP]
exact y_mem ε hε
[GOAL]
case inr.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : dist y a < ε
⊢ ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε
[PROOFSTEP]
rw [dist_eq_norm] at hay 
[GOAL]
case inr.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
⊢ ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε
[PROOFSTEP]
obtain ⟨I, hI⟩ : ∃ I, a ∈ U I := by rwa [Submodule.mem_iSup_of_directed _ hU.directed_le] at ha 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
⊢ ∃ I, a ∈ U I
[PROOFSTEP]
rwa [Submodule.mem_iSup_of_directed _ hU.directed_le] at ha 
[GOAL]
case inr.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
I : ι
hI : a ∈ U I
⊢ ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε
[PROOFSTEP]
refine' ⟨I, fun i (hi : I ≤ i) => _⟩
[GOAL]
case inr.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
I : ι
hI : a ∈ U I
i : ι
hi : I ≤ i
⊢ ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε
[PROOFSTEP]
rw [norm_sub_rev, orthogonalProjection_minimal]
[GOAL]
case inr.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
I : ι
hI : a ∈ U I
i : ι
hi : I ≤ i
⊢ ⨅ (x : { x // x ∈ U i }), ‖y - ↑x‖ < ε
[PROOFSTEP]
refine' lt_of_le_of_lt _ hay
[GOAL]
case inr.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
I : ι
hI : a ∈ U I
i : ι
hi : I ≤ i
⊢ ⨅ (x : { x // x ∈ U i }), ‖y - ↑x‖ ≤ ‖y - a‖
[PROOFSTEP]
change _ ≤ ‖y - (⟨a, hU hi hI⟩ : U i)‖
[GOAL]
case inr.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
I : ι
hI : a ∈ U I
i : ι
hi : I ≤ i
⊢ ⨅ (x : { x // x ∈ U i }), ‖y - ↑x‖ ≤ ‖y - ↑{ val := a, property := (_ : a ∈ U i) }‖
[PROOFSTEP]
exact ciInf_le ⟨0, Set.forall_range_iff.mpr fun _ => norm_nonneg _⟩ _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (t : ι), CompleteSpace { x // x ∈ U t }
hU : Monotone U
x : E
hU' : ⊤ ≤ Submodule.topologicalClosure (⨆ (t : ι), U t)
⊢ Tendsto (fun t => ↑(↑(orthogonalProjection (U t)) x)) atTop (𝓝 x)
[PROOFSTEP]
rw [← eq_top_iff] at hU' 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (t : ι), CompleteSpace { x // x ∈ U t }
hU : Monotone U
x : E
hU' : Submodule.topologicalClosure (⨆ (t : ι), U t) = ⊤
⊢ Tendsto (fun t => ↑(↑(orthogonalProjection (U t)) x)) atTop (𝓝 x)
[PROOFSTEP]
convert orthogonalProjection_tendsto_closure_iSup U hU x
[GOAL]
case h.e'_5.h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (t : ι), CompleteSpace { x // x ∈ U t }
hU : Monotone U
x : E
hU' : Submodule.topologicalClosure (⨆ (t : ι), U t) = ⊤
⊢ x = ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
[PROOFSTEP]
rw [orthogonalProjection_eq_self_iff.mpr _]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (t : ι), CompleteSpace { x // x ∈ U t }
hU : Monotone U
x : E
hU' : Submodule.topologicalClosure (⨆ (t : ι), U t) = ⊤
⊢ x ∈ Submodule.topologicalClosure (⨆ (i : ι), U i)
[PROOFSTEP]
rw [hU']
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_4
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (t : ι), CompleteSpace { x // x ∈ U t }
hU : Monotone U
x : E
hU' : Submodule.topologicalClosure (⨆ (t : ι), U t) = ⊤
⊢ x ∈ ⊤
[PROOFSTEP]
trivial
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ Kᗮᗮᗮ = Kᗮ
[PROOFSTEP]
rw [Kᗮ.orthogonal_orthogonal_eq_closure]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ topologicalClosure Kᗮ = Kᗮ
[PROOFSTEP]
exact K.isClosed_orthogonal.submodule_topologicalClosure_eq
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ topologicalClosure K = ⊤ ↔ Kᗮ = ⊥
[PROOFSTEP]
rw [← Submodule.orthogonal_orthogonal_eq_closure]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ Kᗮᗮ = ⊤ ↔ Kᗮ = ⊥
[PROOFSTEP]
constructor
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ Kᗮᗮ = ⊤ → Kᗮ = ⊥
[PROOFSTEP]
intro h
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ Kᗮ = ⊥ → Kᗮᗮ = ⊤
[PROOFSTEP]
intro h
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
h : Kᗮᗮ = ⊤
⊢ Kᗮ = ⊥
[PROOFSTEP]
rw [← Submodule.triorthogonal_eq_orthogonal, h, Submodule.top_orthogonal_eq_bot]
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
h : Kᗮ = ⊥
⊢ Kᗮᗮ = ⊤
[PROOFSTEP]
rw [h, Submodule.bot_orthogonal_eq_top]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
x y : E
hK : Dense ↑K
h : ∀ (v : { x // x ∈ K }), inner x ↑v = 0
⊢ x = 0
[PROOFSTEP]
have : (⟪x, ·⟫) = 0 := (continuous_const.inner continuous_id).ext_on hK continuous_const (Subtype.forall.1 h)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
x y : E
hK : Dense ↑K
h : ∀ (v : { x // x ∈ K }), inner x ↑v = 0
this : (fun x_1 => inner x x_1) = 0
⊢ x = 0
[PROOFSTEP]
simpa using congr_fun this x
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
x y : E
hK : Dense ↑K
h : ∀ (v : { x // x ∈ K }), inner (↑v) x = 0
v : { x // x ∈ K }
⊢ inner (↑v) x = inner (↑v) 0
[PROOFSTEP]
rw [inner_zero_right, h v]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
⊢ ↑(reflection (Submodule.span ℝ {v - w})ᗮ) v = w
[PROOFSTEP]
set R : F ≃ₗᵢ[ℝ] F := reflection (ℝ ∙ v - w)ᗮ
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
⊢ ↑R v = w
[PROOFSTEP]
suffices R v + R v = w + w by
  apply smul_right_injective F (by norm_num : (2 : ℝ) ≠ 0)
  simpa [two_smul] using this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
this : ↑R v + ↑R v = w + w
⊢ ↑R v = w
[PROOFSTEP]
apply smul_right_injective F (by norm_num : (2 : ℝ) ≠ 0)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
this : ↑R v + ↑R v = w + w
⊢ 2 ≠ 0
[PROOFSTEP]
norm_num
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
this : ↑R v + ↑R v = w + w
⊢ (fun x x_1 => x • x_1) 2 (↑R v) = (fun x x_1 => x • x_1) 2 w
[PROOFSTEP]
simpa [two_smul] using this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
⊢ ↑R v + ↑R v = w + w
[PROOFSTEP]
have h₁ : R (v - w) = -(v - w) := reflection_orthogonalComplement_singleton_eq_neg (v - w)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
h₁ : ↑R (v - w) = -(v - w)
⊢ ↑R v + ↑R v = w + w
[PROOFSTEP]
have h₂ : R (v + w) = v + w := by
  apply reflection_mem_subspace_eq_self
  rw [Submodule.mem_orthogonal_singleton_iff_inner_left]
  rw [real_inner_add_sub_eq_zero_iff]
  exact h
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
h₁ : ↑R (v - w) = -(v - w)
⊢ ↑R (v + w) = v + w
[PROOFSTEP]
apply reflection_mem_subspace_eq_self
[GOAL]
case hx
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
h₁ : ↑R (v - w) = -(v - w)
⊢ v + w ∈ (Submodule.span ℝ {v - w})ᗮ
[PROOFSTEP]
rw [Submodule.mem_orthogonal_singleton_iff_inner_left]
[GOAL]
case hx
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
h₁ : ↑R (v - w) = -(v - w)
⊢ inner (v + w) (v - w) = 0
[PROOFSTEP]
rw [real_inner_add_sub_eq_zero_iff]
[GOAL]
case hx
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
h₁ : ↑R (v - w) = -(v - w)
⊢ ‖v‖ = ‖w‖
[PROOFSTEP]
exact h
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
h₁ : ↑R (v - w) = -(v - w)
h₂ : ↑R (v + w) = v + w
⊢ ↑R v + ↑R v = w + w
[PROOFSTEP]
convert congr_arg₂ (· + ·) h₂ h₁ using 1
[GOAL]
case h.e'_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
h₁ : ↑R (v - w) = -(v - w)
h₂ : ↑R (v + w) = v + w
⊢ ↑R v + ↑R v = ↑R (v + w) + ↑R (v - w)
[PROOFSTEP]
simp
[GOAL]
case h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
h₁ : ↑R (v - w) = -(v - w)
h₂ : ↑R (v + w) = v + w
⊢ w + w = v + w + -(v - w)
[PROOFSTEP]
abel
[GOAL]
case h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v w : F
h : ‖v‖ = ‖w‖
R : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {v - w})ᗮ
h₁ : ↑R (v - w) = -(v - w)
h₂ : ↑R (v + w) = v + w
⊢ w + w = v + w + -(v - w)
[PROOFSTEP]
abel
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
w : E
⊢ ↑(↑(orthogonalProjection K) w) + ↑(↑(orthogonalProjection Kᗮ) w) = w
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
x : E
S : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection S
⊢ ‖x‖ ^ 2 = ‖↑(↑(orthogonalProjection S) x) + ↑(↑(orthogonalProjection Sᗮ) x)‖ ^ 2
[PROOFSTEP]
rw [orthogonalProjection_add_orthogonalProjection_orthogonal]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
x : E
S : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection S
⊢ ‖↑(↑(orthogonalProjection S) x) + ↑(↑(orthogonalProjection Sᗮ) x)‖ ^ 2 =
    ‖↑(orthogonalProjection S) x‖ ^ 2 + ‖↑(orthogonalProjection Sᗮ) x‖ ^ 2
[PROOFSTEP]
simp only [sq]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
x : E
S : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection S
⊢ ‖↑(↑(orthogonalProjection S) x) + ↑(↑(orthogonalProjection Sᗮ) x)‖ *
      ‖↑(↑(orthogonalProjection S) x) + ↑(↑(orthogonalProjection Sᗮ) x)‖ =
    ‖↑(orthogonalProjection S) x‖ * ‖↑(orthogonalProjection S) x‖ +
      ‖↑(orthogonalProjection Sᗮ) x‖ * ‖↑(orthogonalProjection Sᗮ) x‖
[PROOFSTEP]
exact
  norm_add_sq_eq_norm_sq_add_norm_sq_of_inner_eq_zero _ _ <|
    (S.mem_orthogonal _).1 (orthogonalProjection Sᗮ x).2 _ (orthogonalProjection S x).2
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
⊢ ContinuousLinearMap.id 𝕜 E =
    ContinuousLinearMap.comp (Submodule.subtypeL K) (orthogonalProjection K) +
      ContinuousLinearMap.comp (Submodule.subtypeL Kᗮ) (orthogonalProjection Kᗮ)
[PROOFSTEP]
ext w
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
w : E
⊢ ↑(ContinuousLinearMap.id 𝕜 E) w =
    ↑(ContinuousLinearMap.comp (Submodule.subtypeL K) (orthogonalProjection K) +
          ContinuousLinearMap.comp (Submodule.subtypeL Kᗮ) (orthogonalProjection Kᗮ))
      w
[PROOFSTEP]
exact (orthogonalProjection_add_orthogonalProjection_orthogonal K w).symm
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u : { x // x ∈ K }
v : E
⊢ inner ↑(↑(orthogonalProjection K) v) ↑u =
    inner ↑(↑(orthogonalProjection K) v) ↑u + inner (v - ↑(↑(orthogonalProjection K) v)) ↑u
[PROOFSTEP]
rw [orthogonalProjection_inner_eq_zero _ _ (Submodule.coe_mem _), add_zero]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u : { x // x ∈ K }
v : E
⊢ inner ↑(↑(orthogonalProjection K) v) ↑u + inner (v - ↑(↑(orthogonalProjection K) v)) ↑u = inner v ↑u
[PROOFSTEP]
rw [← inner_add_left, add_sub_cancel'_right]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u : { x // x ∈ K }
v : E
⊢ inner u (↑(orthogonalProjection K) v) = inner (↑u) v
[PROOFSTEP]
rw [← inner_conj_symm, ← inner_conj_symm (u : E), inner_orthogonalProjection_eq_of_mem_right]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
u v : E
⊢ inner (↑(↑(orthogonalProjection K) u)) v = inner u ↑(↑(orthogonalProjection K) v)
[PROOFSTEP]
rw [← inner_orthogonalProjection_eq_of_mem_left, inner_orthogonalProjection_eq_of_mem_right]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 { x // x ∈ K₂ }
h : K₁ ≤ K₂
⊢ finrank 𝕜 { x // x ∈ K₁ } + finrank 𝕜 { x // x ∈ K₁ᗮ ⊓ K₂ } = finrank 𝕜 { x // x ∈ K₂ }
[PROOFSTEP]
haveI : FiniteDimensional 𝕜 K₁ := Submodule.finiteDimensional_of_le h
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 { x // x ∈ K₂ }
h : K₁ ≤ K₂
this : FiniteDimensional 𝕜 { x // x ∈ K₁ }
⊢ finrank 𝕜 { x // x ∈ K₁ } + finrank 𝕜 { x // x ∈ K₁ᗮ ⊓ K₂ } = finrank 𝕜 { x // x ∈ K₂ }
[PROOFSTEP]
haveI := proper_isROrC 𝕜 K₁
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 { x // x ∈ K₂ }
h : K₁ ≤ K₂
this✝ : FiniteDimensional 𝕜 { x // x ∈ K₁ }
this : ProperSpace { x // x ∈ K₁ }
⊢ finrank 𝕜 { x // x ∈ K₁ } + finrank 𝕜 { x // x ∈ K₁ᗮ ⊓ K₂ } = finrank 𝕜 { x // x ∈ K₂ }
[PROOFSTEP]
have hd := Submodule.finrank_sup_add_finrank_inf_eq K₁ (K₁ᗮ ⊓ K₂)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 { x // x ∈ K₂ }
h : K₁ ≤ K₂
this✝ : FiniteDimensional 𝕜 { x // x ∈ K₁ }
this : ProperSpace { x // x ∈ K₁ }
hd :
  finrank 𝕜 { x // x ∈ K₁ ⊔ K₁ᗮ ⊓ K₂ } + finrank 𝕜 { x // x ∈ K₁ ⊓ (K₁ᗮ ⊓ K₂) } =
    finrank 𝕜 { x // x ∈ K₁ } + finrank 𝕜 { x // x ∈ K₁ᗮ ⊓ K₂ }
⊢ finrank 𝕜 { x // x ∈ K₁ } + finrank 𝕜 { x // x ∈ K₁ᗮ ⊓ K₂ } = finrank 𝕜 { x // x ∈ K₂ }
[PROOFSTEP]
rw [← inf_assoc, (Submodule.orthogonal_disjoint K₁).eq_bot, bot_inf_eq, finrank_bot,
  Submodule.sup_orthogonal_inf_of_completeSpace h] at hd 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 { x // x ∈ K₂ }
h : K₁ ≤ K₂
this✝ : FiniteDimensional 𝕜 { x // x ∈ K₁ }
this : ProperSpace { x // x ∈ K₁ }
hd : finrank 𝕜 { x // x ∈ K₂ } + 0 = finrank 𝕜 { x // x ∈ K₁ } + finrank 𝕜 { x // x ∈ K₁ᗮ ⊓ K₂ }
⊢ finrank 𝕜 { x // x ∈ K₁ } + finrank 𝕜 { x // x ∈ K₁ᗮ ⊓ K₂ } = finrank 𝕜 { x // x ∈ K₂ }
[PROOFSTEP]
rw [add_zero] at hd 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 { x // x ∈ K₂ }
h : K₁ ≤ K₂
this✝ : FiniteDimensional 𝕜 { x // x ∈ K₁ }
this : ProperSpace { x // x ∈ K₁ }
hd : finrank 𝕜 { x // x ∈ K₂ } = finrank 𝕜 { x // x ∈ K₁ } + finrank 𝕜 { x // x ∈ K₁ᗮ ⊓ K₂ }
⊢ finrank 𝕜 { x // x ∈ K₁ } + finrank 𝕜 { x // x ∈ K₁ᗮ ⊓ K₂ } = finrank 𝕜 { x // x ∈ K₂ }
[PROOFSTEP]
exact hd.symm
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 { x // x ∈ K₂ }
h : K₁ ≤ K₂
n : ℕ
h_dim : finrank 𝕜 { x // x ∈ K₁ } + n = finrank 𝕜 { x // x ∈ K₂ }
⊢ finrank 𝕜 { x // x ∈ K₁ᗮ ⊓ K₂ } = n
[PROOFSTEP]
rw [← add_right_inj (finrank 𝕜 K₁)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K K₁ K₂ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 { x // x ∈ K₂ }
h : K₁ ≤ K₂
n : ℕ
h_dim : finrank 𝕜 { x // x ∈ K₁ } + n = finrank 𝕜 { x // x ∈ K₂ }
⊢ finrank 𝕜 { x // x ∈ K₁ } + finrank 𝕜 { x // x ∈ K₁ᗮ ⊓ K₂ } = finrank 𝕜 { x // x ∈ K₁ } + n
[PROOFSTEP]
simp [Submodule.finrank_add_inf_finrank_orthogonal h, h_dim]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
K : Submodule 𝕜 E
⊢ finrank 𝕜 { x // x ∈ K } + finrank 𝕜 { x // x ∈ Kᗮ } = finrank 𝕜 E
[PROOFSTEP]
convert Submodule.finrank_add_inf_finrank_orthogonal (le_top : K ≤ ⊤) using 1
[GOAL]
case h.e'_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
K : Submodule 𝕜 E
⊢ finrank 𝕜 { x // x ∈ K } + finrank 𝕜 { x // x ∈ Kᗮ } = finrank 𝕜 { x // x ∈ K } + finrank 𝕜 { x // x ∈ Kᗮ ⊓ ⊤ }
[PROOFSTEP]
rw [inf_top_eq]
[GOAL]
case h.e'_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
K : Submodule 𝕜 E
⊢ finrank 𝕜 E = finrank 𝕜 { x // x ∈ ⊤ }
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
K : Submodule 𝕜 E
n : ℕ
h_dim : finrank 𝕜 { x // x ∈ K } + n = finrank 𝕜 E
⊢ finrank 𝕜 { x // x ∈ Kᗮ } = n
[PROOFSTEP]
rw [← add_right_inj (finrank 𝕜 K)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K✝ : Submodule 𝕜 E
inst✝ : FiniteDimensional 𝕜 E
K : Submodule 𝕜 E
n : ℕ
h_dim : finrank 𝕜 { x // x ∈ K } + n = finrank 𝕜 E
⊢ finrank 𝕜 { x // x ∈ K } + finrank 𝕜 { x // x ∈ Kᗮ } = finrank 𝕜 { x // x ∈ K } + n
[PROOFSTEP]
simp [Submodule.finrank_add_finrank_orthogonal, h_dim]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
n : ℕ
_i : Fact (finrank 𝕜 E = n + 1)
v : E
hv : v ≠ 0
⊢ finrank 𝕜 { x // x ∈ (Submodule.span 𝕜 {v})ᗮ } = n
[PROOFSTEP]
haveI : FiniteDimensional 𝕜 E := fact_finiteDimensional_of_finrank_eq_succ n
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
n : ℕ
_i : Fact (finrank 𝕜 E = n + 1)
v : E
hv : v ≠ 0
this : FiniteDimensional 𝕜 E
⊢ finrank 𝕜 { x // x ∈ (Submodule.span 𝕜 {v})ᗮ } = n
[PROOFSTEP]
exact Submodule.finrank_add_finrank_orthogonal' <| by simp [finrank_span_singleton hv, _i.elim, add_comm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
n : ℕ
_i : Fact (finrank 𝕜 E = n + 1)
v : E
hv : v ≠ 0
this : FiniteDimensional 𝕜 E
⊢ finrank 𝕜 { x // x ∈ Submodule.span 𝕜 {v} } + n = finrank 𝕜 E
[PROOFSTEP]
simp [finrank_span_singleton hv, _i.elim, add_comm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n : ℕ
φ : F ≃ₗᵢ[ℝ] F
hn : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n
⊢ ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
induction' n with n IH generalizing φ
[GOAL]
case zero
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n
φ : F ≃ₗᵢ[ℝ] F
hn : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.zero
⊢ ∃ l, List.length l ≤ Nat.zero ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
refine' ⟨[], rfl.le, show φ = 1 from _⟩
[GOAL]
case zero
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n
φ : F ≃ₗᵢ[ℝ] F
hn : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.zero
⊢ φ = 1
[PROOFSTEP]
have : ker (ContinuousLinearMap.id ℝ F - φ) = ⊤ := by
  rwa [Nat.zero_eq, le_zero_iff, finrank_eq_zero, Submodule.orthogonal_eq_bot_iff] at hn 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n
φ : F ≃ₗᵢ[ℝ] F
hn : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.zero
⊢ ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)) = ⊤
[PROOFSTEP]
rwa [Nat.zero_eq, le_zero_iff, finrank_eq_zero, Submodule.orthogonal_eq_bot_iff] at hn 
[GOAL]
case zero
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n
φ : F ≃ₗᵢ[ℝ] F
hn : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.zero
this : ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)) = ⊤
⊢ φ = 1
[PROOFSTEP]
symm
[GOAL]
case zero
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n
φ : F ≃ₗᵢ[ℝ] F
hn : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.zero
this : ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)) = ⊤
⊢ 1 = φ
[PROOFSTEP]
ext x
[GOAL]
case zero.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n
φ : F ≃ₗᵢ[ℝ] F
hn : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.zero
this : ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)) = ⊤
x : F
⊢ ↑1 x = ↑φ x
[PROOFSTEP]
have := LinearMap.congr_fun (LinearMap.ker_eq_top.mp this) x
[GOAL]
case zero.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n
φ : F ≃ₗᵢ[ℝ] F
hn : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.zero
this✝ : ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)) = ⊤
x : F
this : ↑↑(ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)) x = ↑0 x
⊢ ↑1 x = ↑φ x
[PROOFSTEP]
simpa only [sub_eq_zero, ContinuousLinearMap.coe_sub, LinearMap.sub_apply, LinearMap.zero_apply] using this
[GOAL]
case succ
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
let W := ker (ContinuousLinearMap.id ℝ F - φ)
[GOAL]
case succ
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
have hW : ∀ w ∈ W, φ w = w := fun w hw => (sub_eq_zero.mp hw).symm
[GOAL]
case succ
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
by_cases hn' : finrank ℝ Wᗮ ≤ n
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : finrank ℝ { x // x ∈ Wᗮ } ≤ n
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
obtain ⟨V, hV₁, hV₂⟩ := IH φ hn'
[GOAL]
case pos.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : finrank ℝ { x // x ∈ Wᗮ } ≤ n
V : List F
hV₁ : List.length V ≤ n
hV₂ : φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) V)
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
exact
  ⟨V, hV₁.trans n.le_succ, hV₂⟩
    -- Take a nonzero element `v` of the orthogonal complement of `W`.
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
haveI : Nontrivial Wᗮ := nontrivial_of_finrank_pos (by linarith [zero_le n] : 0 < finrank ℝ Wᗮ)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
⊢ 0 < finrank ℝ { x // x ∈ Wᗮ }
[PROOFSTEP]
linarith [zero_le n]
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
obtain ⟨v, hv⟩ := exists_ne (0 : Wᗮ)
[GOAL]
case neg.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
have hφv : φ v ∈ Wᗮ := by
  intro w hw
  rw [← hW w hw, LinearIsometryEquiv.inner_map_map]
  exact v.prop w hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
⊢ ↑φ ↑v ∈ Wᗮ
[PROOFSTEP]
intro w hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
w : F
hw : w ∈ W
⊢ inner w (↑φ ↑v) = 0
[PROOFSTEP]
rw [← hW w hw, LinearIsometryEquiv.inner_map_map]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
w : F
hw : w ∈ W
⊢ inner w ↑v = 0
[PROOFSTEP]
exact v.prop w hw
[GOAL]
case neg.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
have hv' : (v : F) ∉ W := by
  intro h
  exact
    hv
      ((Submodule.mem_left_iff_eq_zero_of_disjoint W.orthogonal_disjoint).mp h)
        -- Let `ρ` be the reflection in `v - φ v`; this is designed to swap `v` and `φ v`
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
⊢ ¬↑v ∈ W
[PROOFSTEP]
intro h
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
h : ↑v ∈ W
⊢ False
[PROOFSTEP]
exact
  hv
    ((Submodule.mem_left_iff_eq_zero_of_disjoint W.orthogonal_disjoint).mp h)
      -- Let `ρ` be the reflection in `v - φ v`; this is designed to swap `v` and `φ v`
[GOAL]
case neg.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
let x : F := v - φ v
[GOAL]
case neg.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
let ρ :=
  reflection
    (ℝ ∙ x)ᗮ
      -- Notation: Let `V` be the fixed subspace of `φ.trans ρ`
[GOAL]
case neg.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
let V := ker (ContinuousLinearMap.id ℝ F - φ.trans ρ)
[GOAL]
case neg.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
have hV : ∀ w, ρ (φ w) = w → w ∈ V := by
  intro w hw
  change w - ρ (φ w) = 0
  rw [sub_eq_zero, hw]
    -- Everything fixed by `φ` is fixed by `φ.trans ρ`
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
⊢ ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
[PROOFSTEP]
intro w hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
w : F
hw : ↑ρ (↑φ w) = w
⊢ w ∈ V
[PROOFSTEP]
change w - ρ (φ w) = 0
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
w : F
hw : ↑ρ (↑φ w) = w
⊢ w - ↑ρ (↑φ w) = 0
[PROOFSTEP]
rw [sub_eq_zero, hw]
  -- Everything fixed by `φ` is fixed by `φ.trans ρ`
[GOAL]
case neg.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
have H₂V : W ≤ V := by
  intro w hw
  apply hV
  rw [hW w hw]
  refine' reflection_mem_subspace_eq_self _
  rw [Submodule.mem_orthogonal_singleton_iff_inner_left]
  exact Submodule.sub_mem _ v.prop hφv _ hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
⊢ W ≤ V
[PROOFSTEP]
intro w hw
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
w : F
hw : w ∈ W
⊢ w ∈ V
[PROOFSTEP]
apply hV
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
w : F
hw : w ∈ W
⊢ ↑ρ (↑φ w) = w
[PROOFSTEP]
rw [hW w hw]
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
w : F
hw : w ∈ W
⊢ ↑ρ w = w
[PROOFSTEP]
refine' reflection_mem_subspace_eq_self _
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
w : F
hw : w ∈ W
⊢ w ∈ (Submodule.span ℝ {x})ᗮ
[PROOFSTEP]
rw [Submodule.mem_orthogonal_singleton_iff_inner_left]
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
w : F
hw : w ∈ W
⊢ inner w x = 0
[PROOFSTEP]
exact Submodule.sub_mem _ v.prop hφv _ hw
[GOAL]
case neg.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
have H₁V : (v : F) ∈ V := by
  apply hV
  have : ρ v = φ v := reflection_sub (φ.norm_map v).symm
  rw [← this]
  exact
    reflection_reflection _
      _
        -- By dimension-counting, the complement of the fixed subspace of `φ.trans ρ` has dimension at
            -- most `n`
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
⊢ ↑v ∈ V
[PROOFSTEP]
apply hV
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
⊢ ↑ρ (↑φ ↑v) = ↑v
[PROOFSTEP]
have : ρ v = φ v := reflection_sub (φ.norm_map v).symm
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this✝ : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
this : ↑ρ ↑v = ↑φ ↑v
⊢ ↑ρ (↑φ ↑v) = ↑v
[PROOFSTEP]
rw [← this]
[GOAL]
case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this✝ : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
this : ↑ρ ↑v = ↑φ ↑v
⊢ ↑ρ (↑ρ ↑v) = ↑v
[PROOFSTEP]
exact
  reflection_reflection _
    _
      -- By dimension-counting, the complement of the fixed subspace of `φ.trans ρ` has dimension at
          -- most `n`
[GOAL]
case neg.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
have : finrank ℝ Vᗮ ≤ n := by
  change finrank ℝ Wᗮ ≤ n + 1 at hn 
  have : finrank ℝ W + 1 ≤ finrank ℝ V :=
    Submodule.finrank_lt_finrank_of_lt (SetLike.lt_iff_le_and_exists.2 ⟨H₂V, v, H₁V, hv'⟩)
  have : finrank ℝ V + finrank ℝ Vᗮ = finrank ℝ F := V.finrank_add_finrank_orthogonal
  have : finrank ℝ W + finrank ℝ Wᗮ = finrank ℝ F := W.finrank_add_finrank_orthogonal
  linarith
    -- So apply the inductive hypothesis to `φ.trans ρ`
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
⊢ finrank ℝ { x // x ∈ Vᗮ } ≤ n
[PROOFSTEP]
change finrank ℝ Wᗮ ≤ n + 1 at hn 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
hn : finrank ℝ { x // x ∈ Wᗮ } ≤ n + 1
⊢ finrank ℝ { x // x ∈ Vᗮ } ≤ n
[PROOFSTEP]
have : finrank ℝ W + 1 ≤ finrank ℝ V :=
  Submodule.finrank_lt_finrank_of_lt (SetLike.lt_iff_le_and_exists.2 ⟨H₂V, v, H₁V, hv'⟩)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this✝ : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
hn : finrank ℝ { x // x ∈ Wᗮ } ≤ n + 1
this : finrank ℝ { x // x ∈ W } + 1 ≤ finrank ℝ { x // x ∈ V }
⊢ finrank ℝ { x // x ∈ Vᗮ } ≤ n
[PROOFSTEP]
have : finrank ℝ V + finrank ℝ Vᗮ = finrank ℝ F := V.finrank_add_finrank_orthogonal
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this✝¹ : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
hn : finrank ℝ { x // x ∈ Wᗮ } ≤ n + 1
this✝ : finrank ℝ { x // x ∈ W } + 1 ≤ finrank ℝ { x // x ∈ V }
this : finrank ℝ { x // x ∈ V } + finrank ℝ { x // x ∈ Vᗮ } = finrank ℝ F
⊢ finrank ℝ { x // x ∈ Vᗮ } ≤ n
[PROOFSTEP]
have : finrank ℝ W + finrank ℝ Wᗮ = finrank ℝ F := W.finrank_add_finrank_orthogonal
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this✝² : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
hn : finrank ℝ { x // x ∈ Wᗮ } ≤ n + 1
this✝¹ : finrank ℝ { x // x ∈ W } + 1 ≤ finrank ℝ { x // x ∈ V }
this✝ : finrank ℝ { x // x ∈ V } + finrank ℝ { x // x ∈ Vᗮ } = finrank ℝ F
this : finrank ℝ { x // x ∈ W } + finrank ℝ { x // x ∈ Wᗮ } = finrank ℝ F
⊢ finrank ℝ { x // x ∈ Vᗮ } ≤ n
[PROOFSTEP]
linarith
  -- So apply the inductive hypothesis to `φ.trans ρ`
[GOAL]
case neg.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this✝ : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
this : finrank ℝ { x // x ∈ Vᗮ } ≤ n
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
obtain ⟨l, hl, hφl⟩ := IH (ρ * φ) this
[GOAL]
case neg.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this✝ : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
this : finrank ℝ { x // x ∈ Vᗮ } ≤ n
l : List F
hl : List.length l ≤ n
hφl : ρ * φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
⊢ ∃ l, List.length l ≤ Nat.succ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
refine' ⟨x :: l, Nat.succ_le_succ hl, _⟩
[GOAL]
case neg.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this✝ : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
this : finrank ℝ { x // x ∈ Vᗮ } ≤ n
l : List F
hl : List.length l ≤ n
hφl : ρ * φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
⊢ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) (x :: l))
[PROOFSTEP]
rw [List.map_cons, List.prod_cons]
[GOAL]
case neg.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this✝ : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
this : finrank ℝ { x // x ∈ Vᗮ } ≤ n
l : List F
hl : List.length l ≤ n
hφl : ρ * φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
⊢ φ = reflection (Submodule.span ℝ {x})ᗮ * List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
have := congr_arg ((· * ·) ρ) hφl
[GOAL]
case neg.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this✝¹ : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
this✝ : finrank ℝ { x // x ∈ Vᗮ } ≤ n
l : List F
hl : List.length l ≤ n
hφl : ρ * φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
this :
  (fun x x_1 => x * x_1) ρ (ρ * φ) =
    (fun x x_1 => x * x_1) ρ (List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l))
⊢ φ = reflection (Submodule.span ℝ {x})ᗮ * List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
dsimp only at this 
[GOAL]
case neg.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
n✝ : ℕ
φ✝ : F ≃ₗᵢ[ℝ] F
hn✝ : finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ✝.toLinearEquiv)))ᗮ } ≤ n✝
n : ℕ
IH :
  ∀ (φ : F ≃ₗᵢ[ℝ] F),
    finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ n →
      ∃ l, List.length l ≤ n ∧ φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
φ : F ≃ₗᵢ[ℝ] F
hn :
  finrank ℝ { x // x ∈ (ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv)))ᗮ } ≤ Nat.succ n
W : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk φ.toLinearEquiv))
hW : ∀ (w : F), w ∈ W → ↑φ w = w
hn' : ¬finrank ℝ { x // x ∈ Wᗮ } ≤ n
this✝¹ : Nontrivial { x // x ∈ Wᗮ }
v : { x // x ∈ Wᗮ }
hv : v ≠ 0
hφv : ↑φ ↑v ∈ Wᗮ
hv' : ¬↑v ∈ W
x : F := ↑v - ↑φ ↑v
ρ : F ≃ₗᵢ[ℝ] F := reflection (Submodule.span ℝ {x})ᗮ
V : Submodule ℝ F := ker (ContinuousLinearMap.id ℝ F - ↑(ContinuousLinearEquiv.mk (trans φ ρ).toLinearEquiv))
hV : ∀ (w : F), ↑ρ (↑φ w) = w → w ∈ V
H₂V : W ≤ V
H₁V : ↑v ∈ V
this✝ : finrank ℝ { x // x ∈ Vᗮ } ≤ n
l : List F
hl : List.length l ≤ n
hφl : ρ * φ = List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
this :
  reflection (Submodule.span ℝ {↑v - ↑φ ↑v})ᗮ * (reflection (Submodule.span ℝ {↑v - ↑φ ↑v})ᗮ * φ) =
    reflection (Submodule.span ℝ {↑v - ↑φ ↑v})ᗮ * List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
⊢ φ = reflection (Submodule.span ℝ {x})ᗮ * List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l)
[PROOFSTEP]
rwa [← mul_assoc, reflection_mul_reflection, one_mul] at this 
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
⊢ Subgroup.closure (Set.range fun v => reflection (Submodule.span ℝ {v})ᗮ) = ⊤
[PROOFSTEP]
rw [Subgroup.eq_top_iff']
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
⊢ ∀ (x : F ≃ₗᵢ[ℝ] F), x ∈ Subgroup.closure (Set.range fun v => reflection (Submodule.span ℝ {v})ᗮ)
[PROOFSTEP]
intro φ
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
φ : F ≃ₗᵢ[ℝ] F
⊢ φ ∈ Subgroup.closure (Set.range fun v => reflection (Submodule.span ℝ {v})ᗮ)
[PROOFSTEP]
rcases φ.reflections_generate_dim with ⟨l, _, rfl⟩
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
l : List F
left✝ : List.length l ≤ finrank ℝ F
⊢ List.prod (List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l) ∈
    Subgroup.closure (Set.range fun v => reflection (Submodule.span ℝ {v})ᗮ)
[PROOFSTEP]
apply (Subgroup.closure _).list_prod_mem
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
l : List F
left✝ : List.length l ≤ finrank ℝ F
⊢ ∀ (x : F ≃ₗᵢ[ℝ] F),
    x ∈ List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l →
      x ∈ Subgroup.closure (Set.range fun v => reflection (Submodule.span ℝ {v})ᗮ)
[PROOFSTEP]
intro x hx
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
l : List F
left✝ : List.length l ≤ finrank ℝ F
x : F ≃ₗᵢ[ℝ] F
hx : x ∈ List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l
⊢ x ∈ Subgroup.closure (Set.range fun v => reflection (Submodule.span ℝ {v})ᗮ)
[PROOFSTEP]
rcases List.mem_map.mp hx with ⟨a, _, hax⟩
[GOAL]
case intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : FiniteDimensional ℝ F
l : List F
left✝¹ : List.length l ≤ finrank ℝ F
x : F ≃ₗᵢ[ℝ] F
hx : x ∈ List.map (fun v => reflection (Submodule.span ℝ {v})ᗮ) l
a : F
left✝ : a ∈ l
hax : reflection (Submodule.span ℝ {a})ᗮ = x
⊢ x ∈ Subgroup.closure (Set.range fun v => reflection (Submodule.span ℝ {v})ᗮ)
[PROOFSTEP]
exact Subgroup.subset_closure ⟨a, hax⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
hc : IsComplete ↑(iSup V)
⊢ DirectSum.IsInternal V ↔ (iSup V)ᗮ = ⊥
[PROOFSTEP]
haveI : CompleteSpace (↥(iSup V)) := hc.completeSpace_coe
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
hc : IsComplete ↑(iSup V)
this : CompleteSpace { x // x ∈ iSup V }
⊢ DirectSum.IsInternal V ↔ (iSup V)ᗮ = ⊥
[PROOFSTEP]
simp only [DirectSum.isInternal_submodule_iff_independent_and_iSup_eq_top, hV.independent, true_and_iff,
  Submodule.orthogonal_eq_bot_iff]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x : E
hx : x ∈ iSup V
⊢ ∑ i : ι, ↑(↑(orthogonalProjection (V i)) x) = x
[PROOFSTEP]
induction hx using Submodule.iSup_induction' with
|
  hp i x hx =>
  refine'
    (Finset.sum_eq_single_of_mem i (Finset.mem_univ _) fun j _ hij => _).trans (orthogonalProjection_eq_self_iff.mpr hx)
  rw [orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero, Submodule.coe_zero]
  exact hV.isOrtho hij.symm hx
| h0 => simp_rw [map_zero, Submodule.coe_zero, Finset.sum_const_zero]
| hadd x y _ _ hx hy =>
  simp_rw [map_add, Submodule.coe_add, Finset.sum_add_distrib]
  exact congr_arg₂ (· + ·) hx hy
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x : E
hx : x ∈ iSup V
⊢ ∑ i : ι, ↑(↑(orthogonalProjection (V i)) x) = x
[PROOFSTEP]
induction hx using Submodule.iSup_induction' with
|
  hp i x hx =>
  refine'
    (Finset.sum_eq_single_of_mem i (Finset.mem_univ _) fun j _ hij => _).trans (orthogonalProjection_eq_self_iff.mpr hx)
  rw [orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero, Submodule.coe_zero]
  exact hV.isOrtho hij.symm hx
| h0 => simp_rw [map_zero, Submodule.coe_zero, Finset.sum_const_zero]
| hadd x y _ _ hx hy =>
  simp_rw [map_add, Submodule.coe_add, Finset.sum_add_distrib]
  exact congr_arg₂ (· + ·) hx hy
[GOAL]
case hp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x✝ : E
i : ι
x : E
hx : x ∈ V i
⊢ ∑ i : ι, ↑(↑(orthogonalProjection (V i)) x) = x
[PROOFSTEP]

|
  hp i x hx =>
  refine'
    (Finset.sum_eq_single_of_mem i (Finset.mem_univ _) fun j _ hij => _).trans (orthogonalProjection_eq_self_iff.mpr hx)
  rw [orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero, Submodule.coe_zero]
  exact hV.isOrtho hij.symm hx
[GOAL]
case hp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x✝ : E
i : ι
x : E
hx : x ∈ V i
⊢ ∑ i : ι, ↑(↑(orthogonalProjection (V i)) x) = x
[PROOFSTEP]
refine'
  (Finset.sum_eq_single_of_mem i (Finset.mem_univ _) fun j _ hij => _).trans (orthogonalProjection_eq_self_iff.mpr hx)
[GOAL]
case hp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x✝¹ : E
i : ι
x : E
hx : x ∈ V i
j : ι
x✝ : j ∈ Finset.univ
hij : j ≠ i
⊢ ↑(↑(orthogonalProjection (V j)) x) = 0
[PROOFSTEP]
rw [orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero, Submodule.coe_zero]
[GOAL]
case hp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x✝¹ : E
i : ι
x : E
hx : x ∈ V i
j : ι
x✝ : j ∈ Finset.univ
hij : j ≠ i
⊢ x ∈ (V j)ᗮ
[PROOFSTEP]
exact hV.isOrtho hij.symm hx
[GOAL]
case h0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x : E
⊢ ∑ i : ι, ↑(↑(orthogonalProjection (V i)) 0) = 0
[PROOFSTEP]

| h0 => simp_rw [map_zero, Submodule.coe_zero, Finset.sum_const_zero]
[GOAL]
case h0
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x : E
⊢ ∑ i : ι, ↑(↑(orthogonalProjection (V i)) 0) = 0
[PROOFSTEP]
simp_rw [map_zero, Submodule.coe_zero, Finset.sum_const_zero]
[GOAL]
case hadd
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x✝ x y : E
hx✝ : x ∈ ⨆ (i : ι), V i
hy✝ : y ∈ ⨆ (i : ι), V i
hx : ∑ i : ι, ↑(↑(orthogonalProjection (V i)) x) = x
hy : ∑ i : ι, ↑(↑(orthogonalProjection (V i)) y) = y
⊢ ∑ i : ι, ↑(↑(orthogonalProjection (V i)) (x + y)) = x + y
[PROOFSTEP]

| hadd x y _ _ hx hy =>
  simp_rw [map_add, Submodule.coe_add, Finset.sum_add_distrib]
  exact congr_arg₂ (· + ·) hx hy
[GOAL]
case hadd
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x✝ x y : E
hx✝ : x ∈ ⨆ (i : ι), V i
hy✝ : y ∈ ⨆ (i : ι), V i
hx : ∑ i : ι, ↑(↑(orthogonalProjection (V i)) x) = x
hy : ∑ i : ι, ↑(↑(orthogonalProjection (V i)) y) = y
⊢ ∑ i : ι, ↑(↑(orthogonalProjection (V i)) (x + y)) = x + y
[PROOFSTEP]
simp_rw [map_add, Submodule.coe_add, Finset.sum_add_distrib]
[GOAL]
case hadd
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x✝ x y : E
hx✝ : x ∈ ⨆ (i : ι), V i
hy✝ : y ∈ ⨆ (i : ι), V i
hx : ∑ i : ι, ↑(↑(orthogonalProjection (V i)) x) = x
hy : ∑ i : ι, ↑(↑(orthogonalProjection (V i)) y) = y
⊢ ∑ x_1 : ι, ↑(↑(orthogonalProjection (V x_1)) x) + ∑ x : ι, ↑(↑(orthogonalProjection (V x)) y) = x + y
[PROOFSTEP]
exact congr_arg₂ (· + ·) hx hy
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
x : ⨁ (i : ι), { x // x ∈ V i }
i : ι
inst✝ : CompleteSpace { x // x ∈ V i }
⊢ ↑(orthogonalProjection (V i)) (↑(DirectSum.coeAddMonoidHom V) x) = ↑x i
[PROOFSTEP]
induction' x using DirectSum.induction_on with j x x y hx hy
[GOAL]
case H_zero
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
i : ι
inst✝ : CompleteSpace { x // x ∈ V i }
⊢ ↑(orthogonalProjection (V i)) (↑(DirectSum.coeAddMonoidHom V) 0) = ↑0 i
[PROOFSTEP]
simp
[GOAL]
case H_basic
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
i : ι
inst✝ : CompleteSpace { x // x ∈ V i }
j : ι
x : { x // x ∈ V j }
⊢ ↑(orthogonalProjection (V i)) (↑(DirectSum.coeAddMonoidHom V) (↑(of (fun i => { x // x ∈ V i }) j) x)) =
    ↑(↑(of (fun i => { x // x ∈ V i }) j) x) i
[PROOFSTEP]
simp_rw [DirectSum.coeAddMonoidHom_of, DirectSum.of]
  -- porting note: was in the previous `simp_rw`, no longer works
[GOAL]
case H_basic
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
i : ι
inst✝ : CompleteSpace { x // x ∈ V i }
j : ι
x : { x // x ∈ V j }
⊢ ↑(orthogonalProjection (V i)) ↑x = ↑(↑(DFinsupp.singleAddHom (fun i => { x // x ∈ V i }) j) x) i
[PROOFSTEP]
rw [DFinsupp.singleAddHom_apply]
[GOAL]
case H_basic
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
i : ι
inst✝ : CompleteSpace { x // x ∈ V i }
j : ι
x : { x // x ∈ V j }
⊢ ↑(orthogonalProjection (V i)) ↑x = ↑(DFinsupp.single j x) i
[PROOFSTEP]
obtain rfl | hij := Decidable.eq_or_ne i j
[GOAL]
case H_basic.inl
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
i : ι
inst✝ : CompleteSpace { x // x ∈ V i }
x : { x // x ∈ V i }
⊢ ↑(orthogonalProjection (V i)) ↑x = ↑(DFinsupp.single i x) i
[PROOFSTEP]
rw [orthogonalProjection_mem_subspace_eq_self, DFinsupp.single_eq_same]
[GOAL]
case H_basic.inr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
i : ι
inst✝ : CompleteSpace { x // x ∈ V i }
j : ι
x : { x // x ∈ V j }
hij : i ≠ j
⊢ ↑(orthogonalProjection (V i)) ↑x = ↑(DFinsupp.single j x) i
[PROOFSTEP]
rw [orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero, DFinsupp.single_eq_of_ne hij.symm]
[GOAL]
case H_basic.inr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
i : ι
inst✝ : CompleteSpace { x // x ∈ V i }
j : ι
x : { x // x ∈ V j }
hij : i ≠ j
⊢ ↑x ∈ (V i)ᗮ
[PROOFSTEP]
exact hV.isOrtho hij.symm x.prop
[GOAL]
case H_plus
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
i : ι
inst✝ : CompleteSpace { x // x ∈ V i }
x y : ⨁ (i : ι), { x // x ∈ V i }
hx : ↑(orthogonalProjection (V i)) (↑(DirectSum.coeAddMonoidHom V) x) = ↑x i
hy : ↑(orthogonalProjection (V i)) (↑(DirectSum.coeAddMonoidHom V) y) = ↑y i
⊢ ↑(orthogonalProjection (V i)) (↑(DirectSum.coeAddMonoidHom V) (x + y)) = ↑(x + y) i
[PROOFSTEP]
simp_rw [map_add]
[GOAL]
case H_plus
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁶ : IsROrC 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝¹ : DecidableEq ι
V : ι → Submodule 𝕜 E
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
i : ι
inst✝ : CompleteSpace { x // x ∈ V i }
x y : ⨁ (i : ι), { x // x ∈ V i }
hx : ↑(orthogonalProjection (V i)) (↑(DirectSum.coeAddMonoidHom V) x) = ↑x i
hy : ↑(orthogonalProjection (V i)) (↑(DirectSum.coeAddMonoidHom V) y) = ↑y i
⊢ ↑(orthogonalProjection (V i)) (↑(DirectSum.coeAddMonoidHom V) x) +
      ↑(orthogonalProjection (V i)) (↑(DirectSum.coeAddMonoidHom V) y) =
    ↑(x + y) i
[PROOFSTEP]
exact congr_arg₂ (· + ·) hx hy
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
h : iSup V = ⊤
x : E
⊢ ↑(DirectSum.coeAddMonoidHom V)
      ((fun x => ↑DFinsupp.equivFunOnFintype.symm fun i => ↑(orthogonalProjection (V i)) x) x) =
    x
[PROOFSTEP]
dsimp only
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
h : iSup V = ⊤
x : E
⊢ ↑(DirectSum.coeAddMonoidHom V) (↑DFinsupp.equivFunOnFintype.symm fun i => ↑(orthogonalProjection (V i)) x) = x
[PROOFSTEP]
letI := fun i => Classical.decEq (V i)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
h : iSup V = ⊤
x : E
this : (i : ι) → DecidableEq { x // x ∈ V i } := fun i => Classical.decEq { x // x ∈ V i }
⊢ ↑(DirectSum.coeAddMonoidHom V) (↑DFinsupp.equivFunOnFintype.symm fun i => ↑(orthogonalProjection (V i)) x) = x
[PROOFSTEP]
rw [DirectSum.coeAddMonoidHom, DirectSum.toAddMonoid, DFinsupp.liftAddHom_apply, DFinsupp.sumAddHom_apply,
  DFinsupp.sum_eq_sum_fintype]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
h : iSup V = ⊤
x : E
this : (i : ι) → DecidableEq { x // x ∈ V i } := fun i => Classical.decEq { x // x ∈ V i }
⊢ ∑ i : ι,
      ↑(AddSubmonoidClass.subtype (V i))
        (↑DFinsupp.equivFunOnFintype (↑DFinsupp.equivFunOnFintype.symm fun i => ↑(orthogonalProjection (V i)) x) i) =
    x
[PROOFSTEP]
simp_rw [Equiv.apply_symm_apply, AddSubmonoidClass.coe_subtype]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
h : iSup V = ⊤
x : E
this : (i : ι) → DecidableEq { x // x ∈ V i } := fun i => Classical.decEq { x // x ∈ V i }
⊢ ∑ x_1 : ι, ↑(↑(orthogonalProjection (V x_1)) x) = x
[PROOFSTEP]
exact hV.sum_projection_of_mem_iSup _ ((h.ge : _) Submodule.mem_top)
[GOAL]
case hf
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
h : iSup V = ⊤
x : E
this : (i : ι) → DecidableEq { x // x ∈ V i } := fun i => Classical.decEq { x // x ∈ V i }
⊢ ∀ (i : ι), ↑(AddSubmonoidClass.subtype (V i)) 0 = 0
[PROOFSTEP]
intro i
[GOAL]
case hf
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
h : iSup V = ⊤
x : E
this : (i : ι) → DecidableEq { x // x ∈ V i } := fun i => Classical.decEq { x // x ∈ V i }
i : ι
⊢ ↑(AddSubmonoidClass.subtype (V i)) 0 = 0
[PROOFSTEP]
exact map_zero _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
h : iSup V = ⊤
x : ⨁ (i : ι), { x // x ∈ V i }
⊢ (fun x => ↑DFinsupp.equivFunOnFintype.symm fun i => ↑(orthogonalProjection (V i)) x)
      (↑(DirectSum.coeAddMonoidHom V) x) =
    x
[PROOFSTEP]
dsimp only
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
ι : Type u_4
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
V : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ V i }
hV : OrthogonalFamily 𝕜 (fun i => { x // x ∈ V i }) fun i => Submodule.subtypeₗᵢ (V i)
h : iSup V = ⊤
x : ⨁ (i : ι), { x // x ∈ V i }
⊢ (↑DFinsupp.equivFunOnFintype.symm fun i => ↑(orthogonalProjection (V i)) (↑(DirectSum.coeAddMonoidHom V) x)) = x
[PROOFSTEP]
simp_rw [hV.projection_directSum_coeAddHom, DFinsupp.equivFunOnFintype_symm_coe]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
⊢ (∀ (u : Set E), u ⊇ v → Orthonormal 𝕜 Subtype.val → u = v) ↔ (span 𝕜 v)ᗮ = ⊥
[PROOFSTEP]
rw [Submodule.eq_bot_iff]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
⊢ (∀ (u : Set E), u ⊇ v → Orthonormal 𝕜 Subtype.val → u = v) ↔ ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
[PROOFSTEP]
constructor
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
⊢ (∀ (u : Set E), u ⊇ v → Orthonormal 𝕜 Subtype.val → u = v) → ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
[PROOFSTEP]
contrapose!
  -- ** direction 1: nonempty orthogonal complement implies nonmaximal
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
⊢ (∃ x, x ∈ (span 𝕜 v)ᗮ ∧ x ≠ 0) → ∃ u, u ⊇ v ∧ Orthonormal 𝕜 Subtype.val ∧ u ≠ v
[PROOFSTEP]
rintro
  ⟨x, hx', hx⟩
      -- take a nonzero vector and normalize it
[GOAL]
case mp.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
⊢ ∃ u, u ⊇ v ∧ Orthonormal 𝕜 Subtype.val ∧ u ≠ v
[PROOFSTEP]
let e := (‖x‖⁻¹ : 𝕜) • x
[GOAL]
case mp.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
⊢ ∃ u, u ⊇ v ∧ Orthonormal 𝕜 Subtype.val ∧ u ≠ v
[PROOFSTEP]
have he : ‖e‖ = 1 := by simp [norm_smul_inv_norm hx]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
⊢ ‖e‖ = 1
[PROOFSTEP]
simp [norm_smul_inv_norm hx]
[GOAL]
case mp.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
⊢ ∃ u, u ⊇ v ∧ Orthonormal 𝕜 Subtype.val ∧ u ≠ v
[PROOFSTEP]
have he' : e ∈ (span 𝕜 v)ᗮ := smul_mem' _ _ hx'
[GOAL]
case mp.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
⊢ ∃ u, u ⊇ v ∧ Orthonormal 𝕜 Subtype.val ∧ u ≠ v
[PROOFSTEP]
have he'' : e ∉ v := by
  intro hev
  have : e = 0 := by
    have : e ∈ span 𝕜 v ⊓ (span 𝕜 v)ᗮ := ⟨subset_span hev, he'⟩
    simpa [(span 𝕜 v).inf_orthogonal_eq_bot] using this
  have : e ≠ 0 := hv.ne_zero ⟨e, hev⟩
  contradiction
    -- put this together with `v` to provide a candidate orthonormal basis for the whole space
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
⊢ ¬e ∈ v
[PROOFSTEP]
intro hev
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
hev : e ∈ v
⊢ False
[PROOFSTEP]
have : e = 0 := by
  have : e ∈ span 𝕜 v ⊓ (span 𝕜 v)ᗮ := ⟨subset_span hev, he'⟩
  simpa [(span 𝕜 v).inf_orthogonal_eq_bot] using this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
hev : e ∈ v
⊢ e = 0
[PROOFSTEP]
have : e ∈ span 𝕜 v ⊓ (span 𝕜 v)ᗮ := ⟨subset_span hev, he'⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
hev : e ∈ v
this : e ∈ span 𝕜 v ⊓ (span 𝕜 v)ᗮ
⊢ e = 0
[PROOFSTEP]
simpa [(span 𝕜 v).inf_orthogonal_eq_bot] using this
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
hev : e ∈ v
this : e = 0
⊢ False
[PROOFSTEP]
have : e ≠ 0 := hv.ne_zero ⟨e, hev⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
hev : e ∈ v
this✝ : e = 0
this : e ≠ 0
⊢ False
[PROOFSTEP]
contradiction
  -- put this together with `v` to provide a candidate orthonormal basis for the whole space
[GOAL]
case mp.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
⊢ ∃ u, u ⊇ v ∧ Orthonormal 𝕜 Subtype.val ∧ u ≠ v
[PROOFSTEP]
refine' ⟨insert e v, v.subset_insert e, ⟨_, _⟩, (ne_insert_of_not_mem v he'').symm⟩
[GOAL]
case mp.intro.intro.refine'_1
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
⊢ ∀ (i : { x // x ∈ insert e v }), ‖↑i‖ = 1
[PROOFSTEP]
rintro ⟨a, ha'⟩
[GOAL]
case mp.intro.intro.refine'_1.mk
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
a : E
ha' : a ∈ insert e v
⊢ ‖↑{ val := a, property := ha' }‖ = 1
[PROOFSTEP]
cases' eq_or_mem_of_mem_insert ha' with ha ha
[GOAL]
case mp.intro.intro.refine'_1.mk.inl
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
a : E
ha' : a ∈ insert e v
ha : a = e
⊢ ‖↑{ val := a, property := ha' }‖ = 1
[PROOFSTEP]
simp [ha, he]
[GOAL]
case mp.intro.intro.refine'_1.mk.inr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
a : E
ha' : a ∈ insert e v
ha : a ∈ v
⊢ ‖↑{ val := a, property := ha' }‖ = 1
[PROOFSTEP]
exact hv.1 ⟨a, ha⟩
[GOAL]
case mp.intro.intro.refine'_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
⊢ ∀ {i j : { x // x ∈ insert e v }}, i ≠ j → inner ↑i ↑j = 0
[PROOFSTEP]
have h_end : ∀ a ∈ v, ⟪a, e⟫ = 0 := by
  intro a ha
  exact he' a (Submodule.subset_span ha)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
⊢ ∀ (a : E), a ∈ v → inner a e = 0
[PROOFSTEP]
intro a ha
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
a : E
ha : a ∈ v
⊢ inner a e = 0
[PROOFSTEP]
exact he' a (Submodule.subset_span ha)
[GOAL]
case mp.intro.intro.refine'_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
⊢ ∀ {i j : { x // x ∈ insert e v }}, i ≠ j → inner ↑i ↑j = 0
[PROOFSTEP]
rintro ⟨a, ha'⟩
[GOAL]
case mp.intro.intro.refine'_2.mk
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
⊢ ∀ {j : { x // x ∈ insert e v }}, { val := a, property := ha' } ≠ j → inner ↑{ val := a, property := ha' } ↑j = 0
[PROOFSTEP]
cases' eq_or_mem_of_mem_insert ha' with ha ha
[GOAL]
case mp.intro.intro.refine'_2.mk.inl
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a = e
⊢ ∀ {j : { x // x ∈ insert e v }}, { val := a, property := ha' } ≠ j → inner ↑{ val := a, property := ha' } ↑j = 0
[PROOFSTEP]
rintro ⟨b, hb'⟩ hab'
[GOAL]
case mp.intro.intro.refine'_2.mk.inl.mk
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a = e
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
⊢ inner ↑{ val := a, property := ha' } ↑{ val := b, property := hb' } = 0
[PROOFSTEP]
have hb : b ∈ v := by
  refine' mem_of_mem_insert_of_ne hb' _
  intro hbe'
  apply hab'
  simp [ha, hbe']
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a = e
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
⊢ b ∈ v
[PROOFSTEP]
refine' mem_of_mem_insert_of_ne hb' _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a = e
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
⊢ b ≠ e
[PROOFSTEP]
intro hbe'
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a = e
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
hbe' : b = e
⊢ False
[PROOFSTEP]
apply hab'
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a = e
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
hbe' : b = e
⊢ { val := a, property := ha' } = { val := b, property := hb' }
[PROOFSTEP]
simp [ha, hbe']
[GOAL]
case mp.intro.intro.refine'_2.mk.inl.mk
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a = e
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
hb : b ∈ v
⊢ inner ↑{ val := a, property := ha' } ↑{ val := b, property := hb' } = 0
[PROOFSTEP]
rw [inner_eq_zero_symm]
[GOAL]
case mp.intro.intro.refine'_2.mk.inl.mk
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a = e
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
hb : b ∈ v
⊢ inner ↑{ val := b, property := hb' } ↑{ val := a, property := ha' } = 0
[PROOFSTEP]
simpa [ha] using h_end b hb
[GOAL]
case mp.intro.intro.refine'_2.mk.inr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a ∈ v
⊢ ∀ {j : { x // x ∈ insert e v }}, { val := a, property := ha' } ≠ j → inner ↑{ val := a, property := ha' } ↑j = 0
[PROOFSTEP]
rintro ⟨b, hb'⟩ hab'
[GOAL]
case mp.intro.intro.refine'_2.mk.inr.mk
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a ∈ v
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
⊢ inner ↑{ val := a, property := ha' } ↑{ val := b, property := hb' } = 0
[PROOFSTEP]
cases' eq_or_mem_of_mem_insert hb' with hb hb
[GOAL]
case mp.intro.intro.refine'_2.mk.inr.mk.inl
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a ∈ v
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
hb : b = e
⊢ inner ↑{ val := a, property := ha' } ↑{ val := b, property := hb' } = 0
[PROOFSTEP]
simpa [hb] using h_end a ha
[GOAL]
case mp.intro.intro.refine'_2.mk.inr.mk.inr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a ∈ v
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
hb : b ∈ v
⊢ inner ↑{ val := a, property := ha' } ↑{ val := b, property := hb' } = 0
[PROOFSTEP]
have : (⟨a, ha⟩ : v) ≠ ⟨b, hb⟩ := by
  intro hab''
  apply hab'
  simpa using hab''
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a ∈ v
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
hb : b ∈ v
⊢ { val := a, property := ha } ≠ { val := b, property := hb }
[PROOFSTEP]
intro hab''
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a ∈ v
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
hb : b ∈ v
hab'' : { val := a, property := ha } = { val := b, property := hb }
⊢ False
[PROOFSTEP]
apply hab'
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a ∈ v
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
hb : b ∈ v
hab'' : { val := a, property := ha } = { val := b, property := hb }
⊢ { val := a, property := ha' } = { val := b, property := hb' }
[PROOFSTEP]
simpa using hab''
[GOAL]
case mp.intro.intro.refine'_2.mk.inr.mk.inr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
x : E
hx' : x ∈ (span 𝕜 v)ᗮ
hx : x ≠ 0
e : E := (↑‖x‖)⁻¹ • x
he : ‖e‖ = 1
he' : e ∈ (span 𝕜 v)ᗮ
he'' : ¬e ∈ v
h_end : ∀ (a : E), a ∈ v → inner a e = 0
a : E
ha' : a ∈ insert e v
ha : a ∈ v
b : E
hb' : b ∈ insert e v
hab' : { val := a, property := ha' } ≠ { val := b, property := hb' }
hb : b ∈ v
this : { val := a, property := ha } ≠ { val := b, property := hb }
⊢ inner ↑{ val := a, property := ha' } ↑{ val := b, property := hb' } = 0
[PROOFSTEP]
exact hv.2 this
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
⊢ (∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0) → ∀ (u : Set E), u ⊇ v → Orthonormal 𝕜 Subtype.val → u = v
[PROOFSTEP]
simp only [Subset.antisymm_iff]
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
⊢ (∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0) → ∀ (u : Set E), u ⊇ v → Orthonormal 𝕜 Subtype.val → u ⊆ v ∧ v ⊆ u
[PROOFSTEP]
rintro h u (huv : v ⊆ u) hu
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
h : ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
u : Set E
huv : v ⊆ u
hu : Orthonormal 𝕜 Subtype.val
⊢ u ⊆ v ∧ v ⊆ u
[PROOFSTEP]
refine' ⟨_, huv⟩
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
h : ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
u : Set E
huv : v ⊆ u
hu : Orthonormal 𝕜 Subtype.val
⊢ u ⊆ v
[PROOFSTEP]
intro x hxu
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
h : ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
u : Set E
huv : v ⊆ u
hu : Orthonormal 𝕜 Subtype.val
x : E
hxu : x ∈ u
⊢ x ∈ v
[PROOFSTEP]
refine' ((mt (h x)) (hu.ne_zero ⟨x, hxu⟩)).imp_symm _
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
h : ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
u : Set E
huv : v ⊆ u
hu : Orthonormal 𝕜 Subtype.val
x : E
hxu : x ∈ u
⊢ ¬x ∈ v → x ∈ (span 𝕜 v)ᗮ
[PROOFSTEP]
intro hxv y hy
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
h : ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
u : Set E
huv : v ⊆ u
hu : Orthonormal 𝕜 Subtype.val
x : E
hxu : x ∈ u
hxv : ¬x ∈ v
y : E
hy : y ∈ span 𝕜 v
⊢ inner y x = 0
[PROOFSTEP]
have hxv' : (⟨x, hxu⟩ : u) ∉ ((↑) ⁻¹' v : Set u) := by simp [huv, hxv]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
h : ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
u : Set E
huv : v ⊆ u
hu : Orthonormal 𝕜 Subtype.val
x : E
hxu : x ∈ u
hxv : ¬x ∈ v
y : E
hy : y ∈ span 𝕜 v
⊢ ¬{ val := x, property := hxu } ∈ Subtype.val ⁻¹' v
[PROOFSTEP]
simp [huv, hxv]
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
h : ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
u : Set E
huv : v ⊆ u
hu : Orthonormal 𝕜 Subtype.val
x : E
hxu : x ∈ u
hxv : ¬x ∈ v
y : E
hy : y ∈ span 𝕜 v
hxv' : ¬{ val := x, property := hxu } ∈ Subtype.val ⁻¹' v
⊢ inner y x = 0
[PROOFSTEP]
obtain ⟨l, hl, rfl⟩ : ∃ l ∈ Finsupp.supported 𝕜 𝕜 ((↑) ⁻¹' v : Set u), (Finsupp.total (↥u) E 𝕜 (↑)) l = y :=
  by
  rw [← Finsupp.mem_span_image_iff_total]
  simp [huv, inter_eq_self_of_subset_left, hy]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
h : ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
u : Set E
huv : v ⊆ u
hu : Orthonormal 𝕜 Subtype.val
x : E
hxu : x ∈ u
hxv : ¬x ∈ v
y : E
hy : y ∈ span 𝕜 v
hxv' : ¬{ val := x, property := hxu } ∈ Subtype.val ⁻¹' v
⊢ ∃ l, l ∈ Finsupp.supported 𝕜 𝕜 (Subtype.val ⁻¹' v) ∧ ↑(Finsupp.total (↑u) E 𝕜 Subtype.val) l = y
[PROOFSTEP]
rw [← Finsupp.mem_span_image_iff_total]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
h : ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
u : Set E
huv : v ⊆ u
hu : Orthonormal 𝕜 Subtype.val
x : E
hxu : x ∈ u
hxv : ¬x ∈ v
y : E
hy : y ∈ span 𝕜 v
hxv' : ¬{ val := x, property := hxu } ∈ Subtype.val ⁻¹' v
⊢ y ∈ span 𝕜 (Subtype.val '' (Subtype.val ⁻¹' v))
[PROOFSTEP]
simp [huv, inter_eq_self_of_subset_left, hy]
[GOAL]
case mpr.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
hv : Orthonormal 𝕜 Subtype.val
h : ∀ (x : E), x ∈ (span 𝕜 v)ᗮ → x = 0
u : Set E
huv : v ⊆ u
hu : Orthonormal 𝕜 Subtype.val
x : E
hxu : x ∈ u
hxv : ¬x ∈ v
hxv' : ¬{ val := x, property := hxu } ∈ Subtype.val ⁻¹' v
l : ↑u →₀ 𝕜
hl : l ∈ Finsupp.supported 𝕜 𝕜 (Subtype.val ⁻¹' v)
hy : ↑(Finsupp.total (↑u) E 𝕜 Subtype.val) l ∈ span 𝕜 v
⊢ inner (↑(Finsupp.total (↑u) E 𝕜 Subtype.val) l) x = 0
[PROOFSTEP]
exact hu.inner_finsupp_eq_zero hxv' hl
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
⊢ (∀ (u : Set E), u ⊇ v → Orthonormal 𝕜 Subtype.val → u = v) ↔ ∃ b, ↑b = Subtype.val
[PROOFSTEP]
haveI := proper_isROrC 𝕜 (span 𝕜 v)
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
⊢ (∀ (u : Set E), u ⊇ v → Orthonormal 𝕜 Subtype.val → u = v) ↔ ∃ b, ↑b = Subtype.val
[PROOFSTEP]
rw [maximal_orthonormal_iff_orthogonalComplement_eq_bot hv]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
⊢ (span 𝕜 v)ᗮ = ⊥ ↔ ∃ b, ↑b = Subtype.val
[PROOFSTEP]
rw [Submodule.orthogonal_eq_bot_iff]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
⊢ span 𝕜 v = ⊤ ↔ ∃ b, ↑b = Subtype.val
[PROOFSTEP]
have hv_coe : range ((↑) : v → E) = v := by simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
⊢ Set.range Subtype.val = v
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
hv_coe : Set.range Subtype.val = v
⊢ span 𝕜 v = ⊤ ↔ ∃ b, ↑b = Subtype.val
[PROOFSTEP]
constructor
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
hv_coe : Set.range Subtype.val = v
⊢ span 𝕜 v = ⊤ → ∃ b, ↑b = Subtype.val
[PROOFSTEP]
refine' fun h => ⟨Basis.mk hv.linearIndependent _, Basis.coe_mk _ _⟩
[GOAL]
case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
hv_coe : Set.range Subtype.val = v
h : span 𝕜 v = ⊤
⊢ ⊤ ≤ span 𝕜 (Set.range Subtype.val)
[PROOFSTEP]
convert h.ge
[GOAL]
case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
hv_coe : Set.range Subtype.val = v
⊢ (∃ b, ↑b = Subtype.val) → span 𝕜 v = ⊤
[PROOFSTEP]
rintro ⟨h, coe_h⟩
[GOAL]
case mpr.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
hv_coe : Set.range Subtype.val = v
h : Basis (↑v) 𝕜 E
coe_h : ↑h = Subtype.val
⊢ span 𝕜 v = ⊤
[PROOFSTEP]
rw [← h.span_eq, coe_h, hv_coe]
