Theorem: LinearIsometryEquiv.reflections_generate_dim_aux
File: Mathlib/Analysis/InnerProductSpace/Projection.lean

tactic: induction' n with n IH generalizing φ
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: refine' ⟨[], rfl.le, show φ = 1 from _⟩
state_before: case zero
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: have : ker (ContinuousLinearMap.id ℝ F - φ) = ⊤ := by
  rwa [Nat.zero_eq, le_zero_iff, finrank_eq_zero, Submodule.orthogonal_eq_bot_iff] at hn
state_before: case zero
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: symm
state_before: case zero
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: ext x
state_before: case zero
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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 = φ

tactic: have := LinearMap.congr_fun (LinearMap.ker_eq_top.mp this) x
state_before: case zero.h
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: simpa only [sub_eq_zero, ContinuousLinearMap.coe_sub, LinearMap.sub_apply,
  LinearMap.zero_apply] using this
state_before: case zero.h
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: rwa [Nat.zero_eq, le_zero_iff, finrank_eq_zero, Submodule.orthogonal_eq_bot_iff] at hn
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)) = ⊤

tactic: let W := ker (ContinuousLinearMap.id ℝ F - φ)
state_before: case succ
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: have hW : ∀ w ∈ W, φ w = w := fun w hw => (sub_eq_zero.mp hw).symm
state_before: case succ
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: by_cases hn' : finrank ℝ Wᗮ ≤ n
state_before: case succ
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: haveI : Nontrivial Wᗮ := nontrivial_of_finrank_pos (by linarith [zero_le n] : 0 < finrank ℝ Wᗮ)
state_before: case neg
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: obtain ⟨v, hv⟩ := exists_ne (0 : Wᗮ)
state_before: case neg
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: have hφv : φ v ∈ Wᗮ := by
  intro w hw
  rw [← hW w hw, LinearIsometryEquiv.inner_map_map]
  exact v.prop w hw
state_before: case neg.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: have hv' : (v : F) ∉ W := by
  intro h
  exact hv ((Submodule.mem_left_iff_eq_zero_of_disjoint W.orthogonal_disjoint).mp h)
state_before: case neg.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: let x : F := v - φ v
state_before: case neg.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: let ρ := reflection (ℝ ∙ x)ᗮ
state_before: case neg.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: let V := ker (ContinuousLinearMap.id ℝ F - φ.trans ρ)
state_before: case neg.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: have hV : ∀ w, ρ (φ w) = w → w ∈ V := by
  intro w hw
  change w - ρ (φ w) = 0
  rw [sub_eq_zero, hw]
state_before: case neg.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: 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
state_before: case neg.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: have H₁V : (v : F) ∈ V := by
  apply hV
  have : ρ v = φ v := reflection_sub (φ.norm_map v).symm
  rw [← this]
  exact reflection_reflection _ _
state_before: case neg.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: 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
state_before: case neg.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: obtain ⟨l, hl, hφl⟩ := IH (ρ * φ) this
state_before: case neg.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: refine' ⟨x::l, Nat.succ_le_succ hl, _⟩
state_before: case neg.intro.intro.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: rw [List.map_cons, List.prod_cons]
state_before: case neg.intro.intro.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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))

tactic: dsimp only at this
state_before: case neg.intro.intro.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: rwa [← mul_assoc, reflection_mul_reflection, one_mul] at this
state_before: case neg.intro.intro.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: obtain ⟨V, hV₁, hV₂⟩ := IH φ hn'
state_before: case pos
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: exact ⟨V, hV₁.trans n.le_succ, hV₂⟩
state_before: case pos.intro.intro
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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)

tactic: linarith [zero_le n]
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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ᗮ }

tactic: intro w hw
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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ᗮ

tactic: rw [← hW w hw, LinearIsometryEquiv.inner_map_map]
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: exact v.prop w hw
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: intro h
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: exact hv ((Submodule.mem_left_iff_eq_zero_of_disjoint W.orthogonal_disjoint).mp h)
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: intro w hw
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: change w - ρ (φ w) = 0
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: rw [sub_eq_zero, hw]
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: intro w hw
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: apply hV
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: rw [hW w hw]
state_before: case a
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: refine' reflection_mem_subspace_eq_self _
state_before: case a
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: rw [Submodule.mem_orthogonal_singleton_iff_inner_left]
state_before: case a
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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})ᗮ

tactic: exact Submodule.sub_mem _ v.prop hφv _ hw
state_before: case a
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: apply hV
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: have : ρ v = φ v := reflection_sub (φ.norm_map v).symm
state_before: case a
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: rw [← this]
state_before: case a
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: exact reflection_reflection _ _
state_before: case a
𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: change finrank ℝ Wᗮ ≤ n + 1 at hn
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: 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'⟩)
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: have : finrank ℝ V + finrank ℝ Vᗮ = finrank ℝ F := V.finrank_add_finrank_orthogonal
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: have : finrank ℝ W + finrank ℝ Wᗮ = finrank ℝ F := W.finrank_add_finrank_orthogonal
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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

tactic: linarith
state_before: 𝕜 : Type ?u.1021326
E : Type ?u.1021329
F : Type u_1
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