Theorem: Submodule.isHilbertSumOrthogonal
File: Mathlib/Analysis/InnerProductSpace/l2Space.lean

tactic: have : ∀ b, CompleteSpace (↥(cond b K Kᗮ)) := by
  intro b
  cases b <;> first | exact instOrthogonalCompleteSpace K | assumption
state_before: ι : Type ?u.670433
𝕜 : Type u_1
inst✝⁴ : IsROrC 𝕜
E : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type ?u.670584
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
K : Submodule 𝕜 E
hK : CompleteSpace { x // x ∈ K }
⊢ IsHilbertSum 𝕜 (fun b => { x // x ∈ bif b then K else Kᗮ }) fun b => subtypeₗᵢ (bif b then K else Kᗮ)

tactic: refine' IsHilbertSum.mkInternal _ K.orthogonalFamily_self _
state_before: ι : Type ?u.670433
𝕜 : Type u_1
inst✝⁴ : IsROrC 𝕜
E : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type ?u.670584
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
K : Submodule 𝕜 E
hK : CompleteSpace { x // x ∈ K }
this : ∀ (b : Bool), CompleteSpace { x // x ∈ bif b then K else Kᗮ }
⊢ IsHilbertSum 𝕜 (fun b => { x // x ∈ bif b then K else Kᗮ }) fun b => subtypeₗᵢ (bif b then K else Kᗮ)

tactic: refine' le_trans _ (Submodule.le_topologicalClosure _)
state_before: ι : Type ?u.670433
𝕜 : Type u_1
inst✝⁴ : IsROrC 𝕜
E : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type ?u.670584
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
K : Submodule 𝕜 E
hK : CompleteSpace { x // x ∈ K }
this : ∀ (b : Bool), CompleteSpace { x // x ∈ bif b then K else Kᗮ }
⊢ ⊤ ≤ topologicalClosure (⨆ (i : Bool), bif i then K else Kᗮ)

tactic: rw [iSup_bool_eq, cond, cond]
state_before: ι : Type ?u.670433
𝕜 : Type u_1
inst✝⁴ : IsROrC 𝕜
E : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type ?u.670584
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
K : Submodule 𝕜 E
hK : CompleteSpace { x // x ∈ K }
this : ∀ (b : Bool), CompleteSpace { x // x ∈ bif b then K else Kᗮ }
⊢ ⊤ ≤ ⨆ (i : Bool), bif i then K else Kᗮ

tactic: refine' Codisjoint.top_le _
state_before: ι : Type ?u.670433
𝕜 : Type u_1
inst✝⁴ : IsROrC 𝕜
E : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type ?u.670584
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
K : Submodule 𝕜 E
hK : CompleteSpace { x // x ∈ K }
this : ∀ (b : Bool), CompleteSpace { x // x ∈ bif b then K else Kᗮ }
⊢ ⊤ ≤
    (match true with
      | true => K
      | false => Kᗮ) ⊔
      match false with
      | true => K
      | false => Kᗮ

tactic: exact Submodule.isCompl_orthogonal_of_completeSpace.codisjoint
state_before: ι : Type ?u.670433
𝕜 : Type u_1
inst✝⁴ : IsROrC 𝕜
E : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type ?u.670584
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
K : Submodule 𝕜 E
hK : CompleteSpace { x // x ∈ K }
this : ∀ (b : Bool), CompleteSpace { x // x ∈ bif b then K else Kᗮ }
⊢ Codisjoint
    (match true with
    | true => K
    | false => Kᗮ)
    (match false with
    | true => K
    | false => Kᗮ)

tactic: intro b
state_before: ι : Type ?u.670433
𝕜 : Type u_1
inst✝⁴ : IsROrC 𝕜
E : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type ?u.670584
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
K : Submodule 𝕜 E
hK : CompleteSpace { x // x ∈ K }
⊢ ∀ (b : Bool), CompleteSpace { x // x ∈ bif b then K else Kᗮ }

tactic: cases b <;> first | exact instOrthogonalCompleteSpace K | assumption
state_before: ι : Type ?u.670433
𝕜 : Type u_1
inst✝⁴ : IsROrC 𝕜
E : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type ?u.670584
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
K : Submodule 𝕜 E
hK : CompleteSpace { x // x ∈ K }
b : Bool
⊢ CompleteSpace { x // x ∈ bif b then K else Kᗮ }

tactic: exact instOrthogonalCompleteSpace K
state_before: case true
ι : Type ?u.670433
𝕜 : Type u_1
inst✝⁴ : IsROrC 𝕜
E : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type ?u.670584
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
K : Submodule 𝕜 E
hK : CompleteSpace { x // x ∈ K }
⊢ CompleteSpace { x // x ∈ bif true then K else Kᗮ }

tactic: assumption
state_before: case true
ι : Type ?u.670433
𝕜 : Type u_1
inst✝⁴ : IsROrC 𝕜
E : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type ?u.670584
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
K : Submodule 𝕜 E
hK : CompleteSpace { x // x ∈ K }
⊢ CompleteSpace { x // x ∈ bif true then K else Kᗮ }