File: Mathlib/Analysis/InnerProductSpace/Orthogonal.lean

full_name: «_aux_Mathlib_Analysis_InnerProductSpace_Orthogonal___macroRules_term⟪_,_⟫_1»
code: local notation "⟪" x ", " y "⟫" => @inner 𝕜 _ _ x y
goal: Lean.Macro

full_name: Submodule.orthogonal
code: /-- The subspace of vectors orthogonal to a given subspace. -/
def orthogonal : Submodule 𝕜 E 
goal: Submodule 𝕜 E

full_name: Submodule._aux_Mathlib_Analysis_InnerProductSpace_Orthogonal___unexpand_Submodule_orthogonal_1
code: @[inherit_doc]
notation:1200 K "ᗮ" => orthogonal K
goal: Lean.PrettyPrinter.Unexpander

full_name: Submodule.«_aux_Mathlib_Analysis_InnerProductSpace_Orthogonal___macroRules_Submodule_term_ᗮ_1»
code: @[inherit_doc]
notation:1200 K "ᗮ" => orthogonal K
goal: Lean.Macro

full_name: Submodule.mem_orthogonal
code: /-- When a vector is in `Kᗮ`. -/
theorem mem_orthogonal (v : E) : v ∈ Kᗮ ↔ ∀ u ∈ K, ⟪u, v⟫ = 0 
goal: v ∈ Kᗮ ↔ ∀ u ∈ K, ⟪u, v⟫_𝕜 = 0

full_name: Submodule.mem_orthogonal'
code: /-- When a vector is in `Kᗮ`, with the inner product the
other way round. -/
theorem mem_orthogonal' (v : E) : v ∈ Kᗮ ↔ ∀ u ∈ K, ⟪v, u⟫ = 0 
goal: v ∈ Kᗮ ↔ ∀ u ∈ K, ⟪v, u⟫_𝕜 = 0

full_name: Submodule.inner_right_of_mem_orthogonal
code: /-- A vector in `K` is orthogonal to one in `Kᗮ`. -/
theorem inner_right_of_mem_orthogonal {u v : E} (hu : u ∈ K) (hv : v ∈ Kᗮ) : ⟪u, v⟫ = 0 
goal: ⟪u, v⟫_𝕜 = 0

full_name: Submodule.inner_left_of_mem_orthogonal
code: /-- A vector in `Kᗮ` is orthogonal to one in `K`. -/
theorem inner_left_of_mem_orthogonal {u v : E} (hu : u ∈ K) (hv : v ∈ Kᗮ) : ⟪v, u⟫ = 0 
goal: ⟪v, u⟫_𝕜 = 0

full_name: Submodule.mem_orthogonal_singleton_iff_inner_right
code: /-- A vector is in `(𝕜 ∙ u)ᗮ` iff it is orthogonal to `u`. -/
theorem mem_orthogonal_singleton_iff_inner_right {u v : E} : v ∈ (𝕜 ∙ u)ᗮ ↔ ⟪u, v⟫ = 0 
goal: v ∈ (Submodule.span 𝕜 {u})ᗮ ↔ ⟪u, v⟫_𝕜 = 0

full_name: Submodule.mem_orthogonal_singleton_iff_inner_left
code: /-- A vector in `(𝕜 ∙ u)ᗮ` is orthogonal to `u`. -/
theorem mem_orthogonal_singleton_iff_inner_left {u v : E} : v ∈ (𝕜 ∙ u)ᗮ ↔ ⟪v, u⟫ = 0 
goal: v ∈ (Submodule.span 𝕜 {u})ᗮ ↔ ⟪v, u⟫_𝕜 = 0

full_name: Submodule.sub_mem_orthogonal_of_inner_left
code: theorem sub_mem_orthogonal_of_inner_left {x y : E} (h : ∀ v : K, ⟪x, v⟫ = ⟪y, v⟫) : x - y ∈ Kᗮ 
goal: x - y ∈ Kᗮ

full_name: Submodule.sub_mem_orthogonal_of_inner_right
code: theorem sub_mem_orthogonal_of_inner_right {x y : E} (h : ∀ v : K, ⟪(v : E), x⟫ = ⟪(v : E), y⟫) :
    x - y ∈ Kᗮ 
goal: x - y ∈ Kᗮ

full_name: Submodule.inf_orthogonal_eq_bot
code: /-- `K` and `Kᗮ` have trivial intersection. -/
theorem inf_orthogonal_eq_bot : K ⊓ Kᗮ = ⊥ 
goal: K ⊓ Kᗮ = ⊥

full_name: Submodule.orthogonal_disjoint
code: /-- `K` and `Kᗮ` have trivial intersection. -/
theorem orthogonal_disjoint : Disjoint K Kᗮ 
goal: Disjoint K Kᗮ

full_name: Submodule.orthogonal_eq_inter
code: /-- `Kᗮ` can be characterized as the intersection of the kernels of the operations of
inner product with each of the elements of `K`. -/
theorem orthogonal_eq_inter : Kᗮ = ⨅ v : K, LinearMap.ker (innerSL 𝕜 (v : E)) 
goal: Kᗮ = ⨅ v, LinearMap.ker ((innerSL 𝕜) ↑v)

full_name: Submodule.isClosed_orthogonal
code: /-- The orthogonal complement of any submodule `K` is closed. -/
theorem isClosed_orthogonal : IsClosed (Kᗮ : Set E) 
goal: IsClosed ↑Kᗮ

full_name: Submodule.instOrthogonalCompleteSpace
code: /-- In a complete space, the orthogonal complement of any submodule `K` is complete. -/
instance instOrthogonalCompleteSpace [CompleteSpace E] : CompleteSpace Kᗮ 
goal: CompleteSpace ↥Kᗮ

full_name: Submodule.orthogonal_gc
code: /-- `orthogonal` gives a `GaloisConnection` between
`Submodule 𝕜 E` and its `OrderDual`. -/
theorem orthogonal_gc :
    @GaloisConnection (Submodule 𝕜 E) (Submodule 𝕜 E)ᵒᵈ _ _ orthogonal orthogonal 
goal: GaloisConnection Submodule.orthogonal Submodule.orthogonal

full_name: Submodule.orthogonal_le
code: /-- `orthogonal` reverses the `≤` ordering of two
subspaces. -/
theorem orthogonal_le {K₁ K₂ : Submodule 𝕜 E} (h : K₁ ≤ K₂) : K₂ᗮ ≤ K₁ᗮ 
goal: K₂ᗮ ≤ K₁ᗮ

full_name: Submodule.orthogonal_orthogonal_monotone
code: /-- `orthogonal.orthogonal` preserves the `≤` ordering of two
subspaces. -/
theorem orthogonal_orthogonal_monotone {K₁ K₂ : Submodule 𝕜 E} (h : K₁ ≤ K₂) : K₁ᗮᗮ ≤ K₂ᗮᗮ 
goal: K₁ᗮᗮ ≤ K₂ᗮᗮ

full_name: Submodule.le_orthogonal_orthogonal
code: /-- `K` is contained in `Kᗮᗮ`. -/
theorem le_orthogonal_orthogonal : K ≤ Kᗮᗮ 
goal: K ≤ Kᗮᗮ

full_name: Submodule.inf_orthogonal
code: /-- The inf of two orthogonal subspaces equals the subspace orthogonal
to the sup. -/
theorem inf_orthogonal (K₁ K₂ : Submodule 𝕜 E) : K₁ᗮ ⊓ K₂ᗮ = (K₁ ⊔ K₂)ᗮ 
goal: K₁ᗮ ⊓ K₂ᗮ = (K₁ ⊔ K₂)ᗮ

full_name: Submodule.iInf_orthogonal
code: /-- The inf of an indexed family of orthogonal subspaces equals the
subspace orthogonal to the sup. -/
theorem iInf_orthogonal {ι : Type*} (K : ι → Submodule 𝕜 E) : ⨅ i, (K i)ᗮ = (iSup K)ᗮ 
goal: ⨅ i, (K i)ᗮ = (iSup K)ᗮ

full_name: Submodule.sInf_orthogonal
code: /-- The inf of a set of orthogonal subspaces equals the subspace orthogonal to the sup. -/
theorem sInf_orthogonal (s : Set <| Submodule 𝕜 E) : ⨅ K ∈ s, Kᗮ = (sSup s)ᗮ 
goal: ⨅ K ∈ s, Kᗮ = (sSup s)ᗮ

full_name: Submodule.top_orthogonal_eq_bot
code: @[simp]
theorem top_orthogonal_eq_bot : (⊤ : Submodule 𝕜 E)ᗮ = ⊥ 
goal: ⊤ᗮ = ⊥

full_name: Submodule.bot_orthogonal_eq_top
code: @[simp]
theorem bot_orthogonal_eq_top : (⊥ : Submodule 𝕜 E)ᗮ = ⊤ 
goal: ⊥ᗮ = ⊤

full_name: Submodule.orthogonal_eq_top_iff
code: @[simp]
theorem orthogonal_eq_top_iff : Kᗮ = ⊤ ↔ K = ⊥ 
goal: Kᗮ = ⊤ ↔ K = ⊥

full_name: Submodule.orthogonalFamily_self
code: theorem orthogonalFamily_self :
    OrthogonalFamily 𝕜 (fun b => ↥(cond b K Kᗮ)) fun b => (cond b K Kᗮ).subtypeₗᵢ
  
goal: OrthogonalFamily 𝕜 (fun b => ↥(bif b then K else Kᗮ)) fun b => (bif b then K else Kᗮ).subtypeₗᵢ

full_name: bilinFormOfRealInner_orthogonal
code: @[simp]
theorem bilinFormOfRealInner_orthogonal {E} [NormedAddCommGroup E] [InnerProductSpace ℝ E]
    (K : Submodule ℝ E) : K.orthogonalBilin bilinFormOfRealInner = Kᗮ 
goal: K.orthogonalBilin bilinFormOfRealInner = Kᗮ

full_name: Submodule.IsOrtho
code: /-- The proposition that two submodules are orthogonal. Has notation `U ⟂ V`. -/
def IsOrtho (U V : Submodule 𝕜 E) : Prop 
goal: Prop

full_name: Submodule._aux_Mathlib_Analysis_InnerProductSpace_Orthogonal___unexpand_Submodule_IsOrtho_1
code: @[inherit_doc]
infixl:50 " ⟂ " => Submodule.IsOrtho
goal: Lean.PrettyPrinter.Unexpander

full_name: Submodule.«_aux_Mathlib_Analysis_InnerProductSpace_Orthogonal___macroRules_Submodule_term_⟂__1»
code: @[inherit_doc]
infixl:50 " ⟂ " => Submodule.IsOrtho
goal: Lean.Macro

full_name: Submodule.isOrtho_iff_le
code: theorem isOrtho_iff_le {U V : Submodule 𝕜 E} : U ⟂ V ↔ U ≤ Vᗮ 
goal: U ⟂ V ↔ U ≤ Vᗮ

full_name: Submodule.IsOrtho.symm
code: @[symm]
theorem IsOrtho.symm {U V : Submodule 𝕜 E} (h : U ⟂ V) : V ⟂ U 
goal: V ⟂ U

full_name: Submodule.isOrtho_comm
code: theorem isOrtho_comm {U V : Submodule 𝕜 E} : U ⟂ V ↔ V ⟂ U 
goal: U ⟂ V ↔ V ⟂ U

full_name: Submodule.symmetric_isOrtho
code: theorem symmetric_isOrtho : Symmetric (IsOrtho : Submodule 𝕜 E → Submodule 𝕜 E → Prop) 
goal: Symmetric Submodule.IsOrtho

full_name: Submodule.IsOrtho.inner_eq
code: theorem IsOrtho.inner_eq {U V : Submodule 𝕜 E} (h : U ⟂ V) {u v : E} (hu : u ∈ U) (hv : v ∈ V) :
    ⟪u, v⟫ = 0 
goal: ⟪u, v⟫_𝕜 = 0

full_name: Submodule.isOrtho_iff_inner_eq
code: theorem isOrtho_iff_inner_eq {U V : Submodule 𝕜 E} : U ⟂ V ↔ ∀ u ∈ U, ∀ v ∈ V, ⟪u, v⟫ = 0 
goal: U ⟂ V ↔ ∀ u ∈ U, ∀ v ∈ V, ⟪u, v⟫_𝕜 = 0

full_name: Submodule.isOrtho_bot_left
code: @[simp]
theorem isOrtho_bot_left {V : Submodule 𝕜 E} : ⊥ ⟂ V 
goal: ⊥ ⟂ V

full_name: Submodule.isOrtho_bot_right
code: @[simp]
theorem isOrtho_bot_right {U : Submodule 𝕜 E} : U ⟂ ⊥ 
goal: U ⟂ ⊥

full_name: Submodule.IsOrtho.mono_left
code: theorem IsOrtho.mono_left {U₁ U₂ V : Submodule 𝕜 E} (hU : U₂ ≤ U₁) (h : U₁ ⟂ V) : U₂ ⟂ V 
goal: U₂ ⟂ V

full_name: Submodule.IsOrtho.mono_right
code: theorem IsOrtho.mono_right {U V₁ V₂ : Submodule 𝕜 E} (hV : V₂ ≤ V₁) (h : U ⟂ V₁) : U ⟂ V₂ 
goal: U ⟂ V₂

full_name: Submodule.IsOrtho.mono
code: theorem IsOrtho.mono {U₁ V₁ U₂ V₂ : Submodule 𝕜 E} (hU : U₂ ≤ U₁) (hV : V₂ ≤ V₁) (h : U₁ ⟂ V₁) :
    U₂ ⟂ V₂ 
goal: U₂ ⟂ V₂

full_name: Submodule.isOrtho_self
code: @[simp]
theorem isOrtho_self {U : Submodule 𝕜 E} : U ⟂ U ↔ U = ⊥ 
goal: U ⟂ U ↔ U = ⊥

full_name: Submodule.isOrtho_orthogonal_right
code: @[simp]
theorem isOrtho_orthogonal_right (U : Submodule 𝕜 E) : U ⟂ Uᗮ 
goal: U ⟂ Uᗮ

full_name: Submodule.isOrtho_orthogonal_left
code: @[simp]
theorem isOrtho_orthogonal_left (U : Submodule 𝕜 E) : Uᗮ ⟂ U 
goal: Uᗮ ⟂ U

full_name: Submodule.IsOrtho.le
code: theorem IsOrtho.le {U V : Submodule 𝕜 E} (h : U ⟂ V) : U ≤ Vᗮ 
goal: U ≤ Vᗮ

full_name: Submodule.IsOrtho.ge
code: theorem IsOrtho.ge {U V : Submodule 𝕜 E} (h : U ⟂ V) : V ≤ Uᗮ 
goal: V ≤ Uᗮ

full_name: Submodule.isOrtho_top_right
code: @[simp]
theorem isOrtho_top_right {U : Submodule 𝕜 E} : U ⟂ ⊤ ↔ U = ⊥ 
goal: U ⟂ ⊤ ↔ U = ⊥

full_name: Submodule.isOrtho_top_left
code: @[simp]
theorem isOrtho_top_left {V : Submodule 𝕜 E} : ⊤ ⟂ V ↔ V = ⊥ 
goal: ⊤ ⟂ V ↔ V = ⊥

full_name: Submodule.IsOrtho.disjoint
code: /-- Orthogonal submodules are disjoint. -/
theorem IsOrtho.disjoint {U V : Submodule 𝕜 E} (h : U ⟂ V) : Disjoint U V 
goal: Disjoint U V

full_name: Submodule.isOrtho_sup_left
code: @[simp]
theorem isOrtho_sup_left {U₁ U₂ V : Submodule 𝕜 E} : U₁ ⊔ U₂ ⟂ V ↔ U₁ ⟂ V ∧ U₂ ⟂ V 
goal: U₁ ⊔ U₂ ⟂ V ↔ U₁ ⟂ V ∧ U₂ ⟂ V

full_name: Submodule.isOrtho_sup_right
code: @[simp]
theorem isOrtho_sup_right {U V₁ V₂ : Submodule 𝕜 E} : U ⟂ V₁ ⊔ V₂ ↔ U ⟂ V₁ ∧ U ⟂ V₂ 
goal: U ⟂ V₁ ⊔ V₂ ↔ U ⟂ V₁ ∧ U ⟂ V₂

full_name: Submodule.isOrtho_sSup_left
code: @[simp]
theorem isOrtho_sSup_left {U : Set (Submodule 𝕜 E)} {V : Submodule 𝕜 E} :
    sSup U ⟂ V ↔ ∀ Uᵢ ∈ U, Uᵢ ⟂ V 
goal: sSup U ⟂ V ↔ ∀ Uᵢ ∈ U, Uᵢ ⟂ V

full_name: Submodule.isOrtho_sSup_right
code: @[simp]
theorem isOrtho_sSup_right {U : Submodule 𝕜 E} {V : Set (Submodule 𝕜 E)} :
    U ⟂ sSup V ↔ ∀ Vᵢ ∈ V, U ⟂ Vᵢ 
goal: U ⟂ sSup V ↔ ∀ Vᵢ ∈ V, U ⟂ Vᵢ

full_name: Submodule.isOrtho_iSup_left
code: @[simp]
theorem isOrtho_iSup_left {ι : Sort*} {U : ι → Submodule 𝕜 E} {V : Submodule 𝕜 E} :
    iSup U ⟂ V ↔ ∀ i, U i ⟂ V 
goal: iSup U ⟂ V ↔ ∀ (i : ι), U i ⟂ V

full_name: Submodule.isOrtho_iSup_right
code: @[simp]
theorem isOrtho_iSup_right {ι : Sort*} {U : Submodule 𝕜 E} {V : ι → Submodule 𝕜 E} :
    U ⟂ iSup V ↔ ∀ i, U ⟂ V i 
goal: U ⟂ iSup V ↔ ∀ (i : ι), U ⟂ V i

full_name: Submodule.isOrtho_span
code: @[simp]
theorem isOrtho_span {s t : Set E} :
    span 𝕜 s ⟂ span 𝕜 t ↔ ∀ ⦃u⦄, u ∈ s → ∀ ⦃v⦄, v ∈ t → ⟪u, v⟫ = 0 
goal: Submodule.span 𝕜 s ⟂ Submodule.span 𝕜 t ↔ ∀ ⦃u : E⦄, u ∈ s → ∀ ⦃v : E⦄, v ∈ t → ⟪u, v⟫_𝕜 = 0

full_name: Submodule.IsOrtho.map
code: theorem IsOrtho.map (f : E →ₗᵢ[𝕜] F) {U V : Submodule 𝕜 E} (h : U ⟂ V) : U.map f ⟂ V.map f 
goal: Submodule.map f U ⟂ Submodule.map f V

full_name: Submodule.IsOrtho.comap
code: theorem IsOrtho.comap (f : E →ₗᵢ[𝕜] F) {U V : Submodule 𝕜 F} (h : U ⟂ V) :
    U.comap f ⟂ V.comap f 
goal: Submodule.comap f U ⟂ Submodule.comap f V

full_name: Submodule.IsOrtho.map_iff
code: @[simp]
theorem IsOrtho.map_iff (f : E ≃ₗᵢ[𝕜] F) {U V : Submodule 𝕜 E} : U.map f ⟂ V.map f ↔ U ⟂ V 
goal: Submodule.map f U ⟂ Submodule.map f V ↔ U ⟂ V

full_name: Submodule.IsOrtho.comap_iff
code: @[simp]
theorem IsOrtho.comap_iff (f : E ≃ₗᵢ[𝕜] F) {U V : Submodule 𝕜 F} : U.comap f ⟂ V.comap f ↔ U ⟂ V 
goal: Submodule.comap f U ⟂ Submodule.comap f V ↔ U ⟂ V

full_name: orthogonalFamily_iff_pairwise
code: theorem orthogonalFamily_iff_pairwise {ι} {V : ι → Submodule 𝕜 E} :
    (OrthogonalFamily 𝕜 (fun i => V i) fun i => (V i).subtypeₗᵢ) ↔ Pairwise ((· ⟂ ·) on V) 
goal: (OrthogonalFamily 𝕜 (fun i => ↥(V i)) fun i => (V i).subtypeₗᵢ) ↔ Pairwise ((fun x x_1 => x ⟂ x_1) on V)

full_name: OrthogonalFamily.isOrtho
code: /-- Two submodules in an orthogonal family with different indices are orthogonal. -/
theorem OrthogonalFamily.isOrtho {ι} {V : ι → Submodule 𝕜 E}
    (hV : OrthogonalFamily 𝕜 (fun i => V i) fun i => (V i).subtypeₗᵢ) {i j : ι} (hij : i ≠ j) :
    V i ⟂ V j 
goal: V i ⟂ V j