analysis.inner_product_space.adjoint
β·
Mathlib.Analysis.InnerProductSpace.Adjoint
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -46,11 +46,11 @@ adjoint
noncomputable section
-open IsROrC
+open RCLike
open scoped ComplexConjugate
-variable {π E F G : Type _} [IsROrC π]
+variable {π E F G : Type _} [RCLike π]
variable [NormedAddCommGroup E] [NormedAddCommGroup F] [NormedAddCommGroup G]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -368,7 +368,7 @@ theorem ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric {A : E βL[π] E} :
#print LinearMap.IsSymmetric.isSelfAdjoint /-
theorem LinearMap.IsSymmetric.isSelfAdjoint {A : E βL[π] E} (hA : (A : E ββ[π] E).IsSymmetric) :
- IsSelfAdjoint A := by rwa [β ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric] at hA
+ IsSelfAdjoint A := by rwa [β ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric] at hA
#align linear_map.is_symmetric.is_self_adjoint LinearMap.IsSymmetric.isSelfAdjoint
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -114,11 +114,11 @@ theorem adjointAux_adjointAux (A : E βL[π] F) : adjointAux (adjointAux A) =
theorem adjointAux_norm (A : E βL[π] F) : βadjointAux Aβ = βAβ :=
by
refine' le_antisymm _ _
- Β· refine' ContinuousLinearMap.op_norm_le_bound _ (norm_nonneg _) fun x => _
+ Β· refine' ContinuousLinearMap.opNorm_le_bound _ (norm_nonneg _) fun x => _
rw [adjoint_aux_apply, LinearIsometryEquiv.norm_map]
exact to_sesq_form_apply_norm_le
Β· nth_rw_lhs 1 [β adjoint_aux_adjoint_aux A]
- refine' ContinuousLinearMap.op_norm_le_bound _ (norm_nonneg _) fun x => _
+ refine' ContinuousLinearMap.opNorm_le_bound _ (norm_nonneg _) fun x => _
rw [adjoint_aux_apply, LinearIsometryEquiv.norm_map]
exact to_sesq_form_apply_norm_le
#align continuous_linear_map.adjoint_aux_norm ContinuousLinearMap.adjointAux_norm
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -445,10 +445,10 @@ theorem adjoint_toContinuousLinearMap (A : E ββ[π] F) :
#align linear_map.adjoint_to_continuous_linear_map LinearMap.adjoint_toContinuousLinearMap
-/
-#print LinearMap.adjoint_eq_toClm_adjoint /-
-theorem adjoint_eq_toClm_adjoint (A : E ββ[π] F) : A.adjoint = A.toContinuousLinearMap.adjoint :=
+#print LinearMap.adjoint_eq_toCLM_adjoint /-
+theorem adjoint_eq_toCLM_adjoint (A : E ββ[π] F) : A.adjoint = A.toContinuousLinearMap.adjoint :=
rfl
-#align linear_map.adjoint_eq_to_clm_adjoint LinearMap.adjoint_eq_toClm_adjoint
+#align linear_map.adjoint_eq_to_clm_adjoint LinearMap.adjoint_eq_toCLM_adjoint
-/
#print LinearMap.adjoint_inner_left /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2021 FrΓ©dΓ©ric Dupuis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: FrΓ©dΓ©ric Dupuis, Heather Macbeth
-/
-import Mathbin.Analysis.InnerProductSpace.Dual
-import Mathbin.Analysis.InnerProductSpace.PiL2
+import Analysis.InnerProductSpace.Dual
+import Analysis.InnerProductSpace.PiL2
#align_import analysis.inner_product_space.adjoint from "leanprover-community/mathlib"@"2ebc1d6c2fed9f54c95bbc3998eaa5570527129a"
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -247,7 +247,7 @@ instance : Star (E βL[π] E) :=
instance : InvolutiveStar (E βL[π] E) :=
β¨adjoint_adjointβ©
-instance : StarSemigroup (E βL[π] E) :=
+instance : StarMul (E βL[π] E) :=
β¨adjoint_compβ©
instance : StarRing (E βL[π] E) :=
@@ -543,7 +543,7 @@ instance : Star (E ββ[π] E) :=
instance : InvolutiveStar (E ββ[π] E) :=
β¨adjoint_adjointβ©
-instance : StarSemigroup (E ββ[π] E) :=
+instance : StarMul (E ββ[π] E) :=
β¨adjoint_compβ©
instance : StarRing (E ββ[π] E) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2021 FrΓ©dΓ©ric Dupuis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: FrΓ©dΓ©ric Dupuis, Heather Macbeth
-
-! This file was ported from Lean 3 source module analysis.inner_product_space.adjoint
-! leanprover-community/mathlib commit 2ebc1d6c2fed9f54c95bbc3998eaa5570527129a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.InnerProductSpace.Dual
import Mathbin.Analysis.InnerProductSpace.PiL2
+#align_import analysis.inner_product_space.adjoint from "leanprover-community/mathlib"@"2ebc1d6c2fed9f54c95bbc3998eaa5570527129a"
+
/-!
# Adjoint of operators on Hilbert spaces
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -59,7 +59,6 @@ variable [NormedAddCommGroup E] [NormedAddCommGroup F] [NormedAddCommGroup G]
variable [InnerProductSpace π E] [InnerProductSpace π F] [InnerProductSpace π G]
--- mathport name: Β«exprβͺ , β«Β»
local notation "βͺ" x ", " y "β«" => @inner π _ _ x y
/-! ### Adjoint operator -/
@@ -81,30 +80,39 @@ def adjointAux : (E βL[π] F) βLβ[π] F βL[π] E :=
#align continuous_linear_map.adjoint_aux ContinuousLinearMap.adjointAux
-/
+#print ContinuousLinearMap.adjointAux_apply /-
@[simp]
theorem adjointAux_apply (A : E βL[π] F) (x : F) :
adjointAux A x = ((toDual π E).symm : NormedSpace.Dual π E β E) ((toSesqForm A) x) :=
rfl
#align continuous_linear_map.adjoint_aux_apply ContinuousLinearMap.adjointAux_apply
+-/
+#print ContinuousLinearMap.adjointAux_inner_left /-
theorem adjointAux_inner_left (A : E βL[π] F) (x : E) (y : F) : βͺadjointAux A y, xβ« = βͺy, A xβ« := by
simp only [adjoint_aux_apply, to_dual_symm_apply, to_sesq_form_apply_coe, coe_comp',
innerSL_apply_coe]
#align continuous_linear_map.adjoint_aux_inner_left ContinuousLinearMap.adjointAux_inner_left
+-/
+#print ContinuousLinearMap.adjointAux_inner_right /-
theorem adjointAux_inner_right (A : E βL[π] F) (x : E) (y : F) : βͺx, adjointAux A yβ« = βͺA x, yβ« :=
by rw [β inner_conj_symm, adjoint_aux_inner_left, inner_conj_symm]
#align continuous_linear_map.adjoint_aux_inner_right ContinuousLinearMap.adjointAux_inner_right
+-/
variable [CompleteSpace F]
+#print ContinuousLinearMap.adjointAux_adjointAux /-
theorem adjointAux_adjointAux (A : E βL[π] F) : adjointAux (adjointAux A) = A :=
by
ext v
refine' ext_inner_left π fun w => _
rw [adjoint_aux_inner_right, adjoint_aux_inner_left]
#align continuous_linear_map.adjoint_aux_adjoint_aux ContinuousLinearMap.adjointAux_adjointAux
+-/
+#print ContinuousLinearMap.adjointAux_norm /-
@[simp]
theorem adjointAux_norm (A : E βL[π] F) : βadjointAux Aβ = βAβ :=
by
@@ -117,6 +125,7 @@ theorem adjointAux_norm (A : E βL[π] F) : βadjointAux Aβ = βAβ :=
rw [adjoint_aux_apply, LinearIsometryEquiv.norm_map]
exact to_sesq_form_apply_norm_le
#align continuous_linear_map.adjoint_aux_norm ContinuousLinearMap.adjointAux_norm
+-/
#print ContinuousLinearMap.adjoint /-
/-- The adjoint of a bounded operator from Hilbert space E to Hilbert space F. -/
@@ -126,25 +135,31 @@ def adjoint : (E βL[π] F) ββα΅’β[π] F βL[π] E :=
#align continuous_linear_map.adjoint ContinuousLinearMap.adjoint
-/
--- mathport name: adjoint
scoped[InnerProduct] postfix:1000 "β " => ContinuousLinearMap.adjoint
+#print ContinuousLinearMap.adjoint_inner_left /-
/-- The fundamental property of the adjoint. -/
theorem adjoint_inner_left (A : E βL[π] F) (x : E) (y : F) : βͺ(Aβ ) y, xβ« = βͺy, A xβ« :=
adjointAux_inner_left A x y
#align continuous_linear_map.adjoint_inner_left ContinuousLinearMap.adjoint_inner_left
+-/
+#print ContinuousLinearMap.adjoint_inner_right /-
/-- The fundamental property of the adjoint. -/
theorem adjoint_inner_right (A : E βL[π] F) (x : E) (y : F) : βͺx, (Aβ ) yβ« = βͺA x, yβ« :=
adjointAux_inner_right A x y
#align continuous_linear_map.adjoint_inner_right ContinuousLinearMap.adjoint_inner_right
+-/
+#print ContinuousLinearMap.adjoint_adjoint /-
/-- The adjoint is involutive -/
@[simp]
theorem adjoint_adjoint (A : E βL[π] F) : Aβ β = A :=
adjointAux_adjointAux A
#align continuous_linear_map.adjoint_adjoint ContinuousLinearMap.adjoint_adjoint
+-/
+#print ContinuousLinearMap.adjoint_comp /-
/-- The adjoint of the composition of two operators is the composition of the two adjoints
in reverse order. -/
@[simp]
@@ -154,31 +169,41 @@ theorem adjoint_comp (A : F βL[π] G) (B : E βL[π] F) : (A βL B)β =
refine' ext_inner_left π fun w => _
simp only [adjoint_inner_right, ContinuousLinearMap.coe_comp', Function.comp_apply]
#align continuous_linear_map.adjoint_comp ContinuousLinearMap.adjoint_comp
+-/
+#print ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_left /-
theorem apply_norm_sq_eq_inner_adjoint_left (A : E βL[π] E) (x : E) :
βA xβ ^ 2 = re βͺ(Aβ * A) x, xβ« :=
by
have h : βͺ(Aβ * A) x, xβ« = βͺA x, A xβ« := by rw [β adjoint_inner_left]; rfl
rw [h, β inner_self_eq_norm_sq _]
#align continuous_linear_map.apply_norm_sq_eq_inner_adjoint_left ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_left
+-/
+#print ContinuousLinearMap.apply_norm_eq_sqrt_inner_adjoint_left /-
theorem apply_norm_eq_sqrt_inner_adjoint_left (A : E βL[π] E) (x : E) :
βA xβ = Real.sqrt (re βͺ(Aβ * A) x, xβ«) := by
rw [β apply_norm_sq_eq_inner_adjoint_left, Real.sqrt_sq (norm_nonneg _)]
#align continuous_linear_map.apply_norm_eq_sqrt_inner_adjoint_left ContinuousLinearMap.apply_norm_eq_sqrt_inner_adjoint_left
+-/
+#print ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_right /-
theorem apply_norm_sq_eq_inner_adjoint_right (A : E βL[π] E) (x : E) :
βA xβ ^ 2 = re βͺx, (Aβ * A) xβ« :=
by
have h : βͺx, (Aβ * A) xβ« = βͺA x, A xβ« := by rw [β adjoint_inner_right]; rfl
rw [h, β inner_self_eq_norm_sq _]
#align continuous_linear_map.apply_norm_sq_eq_inner_adjoint_right ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_right
+-/
+#print ContinuousLinearMap.apply_norm_eq_sqrt_inner_adjoint_right /-
theorem apply_norm_eq_sqrt_inner_adjoint_right (A : E βL[π] E) (x : E) :
βA xβ = Real.sqrt (re βͺx, (Aβ * A) xβ«) := by
rw [β apply_norm_sq_eq_inner_adjoint_right, Real.sqrt_sq (norm_nonneg _)]
#align continuous_linear_map.apply_norm_eq_sqrt_inner_adjoint_right ContinuousLinearMap.apply_norm_eq_sqrt_inner_adjoint_right
+-/
+#print ContinuousLinearMap.eq_adjoint_iff /-
/-- The adjoint is unique: a map `A` is the adjoint of `B` iff it satisfies `βͺA x, yβ« = βͺx, B yβ«`
for all `x` and `y`. -/
theorem eq_adjoint_iff (A : E βL[π] F) (B : F βL[π] E) : A = Bβ β β x y, βͺA x, yβ« = βͺx, B yβ« :=
@@ -187,7 +212,9 @@ theorem eq_adjoint_iff (A : E βL[π] F) (B : F βL[π] E) : A = Bβ β
ext x
exact ext_inner_right π fun y => by simp only [adjoint_inner_left, h x y]
#align continuous_linear_map.eq_adjoint_iff ContinuousLinearMap.eq_adjoint_iff
+-/
+#print ContinuousLinearMap.adjoint_id /-
@[simp]
theorem adjoint_id : (ContinuousLinearMap.id π E).adjoint = ContinuousLinearMap.id π E :=
by
@@ -195,7 +222,9 @@ theorem adjoint_id : (ContinuousLinearMap.id π E).adjoint = ContinuousLinearM
rw [eq_adjoint_iff]
simp
#align continuous_linear_map.adjoint_id ContinuousLinearMap.adjoint_id
+-/
+#print Submodule.adjoint_subtypeL /-
theorem Submodule.adjoint_subtypeL (U : Submodule π E) [CompleteSpace U] :
U.subtypeLβ = orthogonalProjection U := by
symm
@@ -205,11 +234,14 @@ theorem Submodule.adjoint_subtypeL (U : Submodule π E) [CompleteSpace U] :
orthogonalProjection_mem_subspace_eq_self]
rfl
#align submodule.adjoint_subtypeL Submodule.adjoint_subtypeL
+-/
+#print Submodule.adjoint_orthogonalProjection /-
theorem Submodule.adjoint_orthogonalProjection (U : Submodule π E) [CompleteSpace U] :
(orthogonalProjection U : E βL[π] U)β = U.subtypeL := by
rw [β U.adjoint_subtypeL, adjoint_adjoint]
#align submodule.adjoint_orthogonal_projection Submodule.adjoint_orthogonalProjection
+-/
/-- `E βL[π] E` is a star algebra with the adjoint as the star operation. -/
instance : Star (E βL[π] E) :=
@@ -227,14 +259,18 @@ instance : StarRing (E βL[π] E) :=
instance : StarModule π (E βL[π] E) :=
β¨LinearIsometryEquiv.map_smulββ adjointβ©
+#print ContinuousLinearMap.star_eq_adjoint /-
theorem star_eq_adjoint (A : E βL[π] E) : star A = Aβ :=
rfl
#align continuous_linear_map.star_eq_adjoint ContinuousLinearMap.star_eq_adjoint
+-/
+#print ContinuousLinearMap.isSelfAdjoint_iff' /-
/-- A continuous linear operator is self-adjoint iff it is equal to its adjoint. -/
theorem isSelfAdjoint_iff' {A : E βL[π] E} : IsSelfAdjoint A β A.adjoint = A :=
Iff.rfl
#align continuous_linear_map.is_self_adjoint_iff' ContinuousLinearMap.isSelfAdjoint_iff'
+-/
instance : CstarRing (E βL[π] E) :=
β¨by
@@ -267,6 +303,7 @@ variable [InnerProductSpace β E'] [InnerProductSpace β F']
variable [CompleteSpace E'] [CompleteSpace F']
+#print ContinuousLinearMap.isAdjointPair_inner /-
-- Todo: Generalize this to `is_R_or_C`.
theorem isAdjointPair_inner (A : E' βL[β] F') :
LinearMap.IsAdjointPair (sesqFormOfInner : E' ββ[β] E' ββ[β] β)
@@ -274,6 +311,7 @@ theorem isAdjointPair_inner (A : E' βL[β] F') :
fun x y => by
simp only [sesqFormOfInner_apply_apply, adjoint_inner_left, to_linear_map_eq_coe, coe_coe]
#align continuous_linear_map.is_adjoint_pair_inner ContinuousLinearMap.isAdjointPair_inner
+-/
end Real
@@ -288,15 +326,20 @@ open ContinuousLinearMap
variable [CompleteSpace E] [CompleteSpace F]
+#print IsSelfAdjoint.adjoint_eq /-
theorem adjoint_eq {A : E βL[π] E} (hA : IsSelfAdjoint A) : A.adjoint = A :=
hA
#align is_self_adjoint.adjoint_eq IsSelfAdjoint.adjoint_eq
+-/
+#print IsSelfAdjoint.isSymmetric /-
/-- Every self-adjoint operator on an inner product space is symmetric. -/
theorem isSymmetric {A : E βL[π] E} (hA : IsSelfAdjoint A) : (A : E ββ[π] E).IsSymmetric :=
fun x y => by rw_mod_cast [β A.adjoint_inner_right, hA.adjoint_eq]
#align is_self_adjoint.is_symmetric IsSelfAdjoint.isSymmetric
+-/
+#print IsSelfAdjoint.conj_adjoint /-
/-- Conjugating preserves self-adjointness -/
theorem conj_adjoint {T : E βL[π] E} (hT : IsSelfAdjoint T) (S : E βL[π] F) :
IsSelfAdjoint (S βL T βL S.adjoint) :=
@@ -305,7 +348,9 @@ theorem conj_adjoint {T : E βL[π] E} (hT : IsSelfAdjoint T) (S : E βL[
simp only [hT, adjoint_comp, adjoint_adjoint]
exact ContinuousLinearMap.comp_assoc _ _ _
#align is_self_adjoint.conj_adjoint IsSelfAdjoint.conj_adjoint
+-/
+#print IsSelfAdjoint.adjoint_conj /-
/-- Conjugating preserves self-adjointness -/
theorem adjoint_conj {T : E βL[π] E} (hT : IsSelfAdjoint T) (S : F βL[π] E) :
IsSelfAdjoint (S.adjoint βL T βL S) :=
@@ -314,23 +359,31 @@ theorem adjoint_conj {T : E βL[π] E} (hT : IsSelfAdjoint T) (S : F βL[
simp only [hT, adjoint_comp, adjoint_adjoint]
exact ContinuousLinearMap.comp_assoc _ _ _
#align is_self_adjoint.adjoint_conj IsSelfAdjoint.adjoint_conj
+-/
+#print ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric /-
theorem ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric {A : E βL[π] E} :
IsSelfAdjoint A β (A : E ββ[π] E).IsSymmetric :=
β¨fun hA => hA.IsSymmetric, fun hA =>
ext fun x => ext_inner_right π fun y => (A.adjoint_inner_left y x).symm βΈ (hA x y).symmβ©
#align continuous_linear_map.is_self_adjoint_iff_is_symmetric ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric
+-/
+#print LinearMap.IsSymmetric.isSelfAdjoint /-
theorem LinearMap.IsSymmetric.isSelfAdjoint {A : E βL[π] E} (hA : (A : E ββ[π] E).IsSymmetric) :
IsSelfAdjoint A := by rwa [β ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric] at hA
#align linear_map.is_symmetric.is_self_adjoint LinearMap.IsSymmetric.isSelfAdjoint
+-/
+#print orthogonalProjection_isSelfAdjoint /-
/-- The orthogonal projection is self-adjoint. -/
theorem orthogonalProjection_isSelfAdjoint (U : Submodule π E) [CompleteSpace U] :
IsSelfAdjoint (U.subtypeL βL orthogonalProjection U) :=
(orthogonalProjection_isSymmetric U).IsSelfAdjoint
#align orthogonal_projection_is_self_adjoint orthogonalProjection_isSelfAdjoint
+-/
+#print IsSelfAdjoint.conj_orthogonalProjection /-
theorem conj_orthogonalProjection {T : E βL[π] E} (hT : IsSelfAdjoint T) (U : Submodule π E)
[CompleteSpace U] :
IsSelfAdjoint
@@ -340,6 +393,7 @@ theorem conj_orthogonalProjection {T : E βL[π] E} (hT : IsSelfAdjoint T) (U
nth_rw 1 [β (orthogonalProjection_isSelfAdjoint U).adjoint_eq]
refine' hT.adjoint_conj _
#align is_self_adjoint.conj_orthogonal_projection IsSelfAdjoint.conj_orthogonalProjection
+-/
end IsSelfAdjoint
@@ -349,19 +403,25 @@ variable [CompleteSpace E]
variable {T : E ββ[π] E}
+#print LinearMap.IsSymmetric.toSelfAdjoint /-
/-- The **Hellinger--Toeplitz theorem**: Construct a self-adjoint operator from an everywhere
defined symmetric operator.-/
def IsSymmetric.toSelfAdjoint (hT : IsSymmetric T) : selfAdjoint (E βL[π] E) :=
β¨β¨T, hT.Continuousβ©, ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric.mpr hTβ©
#align linear_map.is_symmetric.to_self_adjoint LinearMap.IsSymmetric.toSelfAdjoint
+-/
+#print LinearMap.IsSymmetric.coe_toSelfAdjoint /-
theorem IsSymmetric.coe_toSelfAdjoint (hT : IsSymmetric T) : (hT.toSelfAdjoint : E ββ[π] E) = T :=
rfl
#align linear_map.is_symmetric.coe_to_self_adjoint LinearMap.IsSymmetric.coe_toSelfAdjoint
+-/
+#print LinearMap.IsSymmetric.toSelfAdjoint_apply /-
theorem IsSymmetric.toSelfAdjoint_apply (hT : IsSymmetric T) {x : E} : hT.toSelfAdjoint x = T x :=
rfl
#align linear_map.is_symmetric.to_self_adjoint_apply LinearMap.IsSymmetric.toSelfAdjoint_apply
+-/
end LinearMap
@@ -381,29 +441,38 @@ def adjoint : (E ββ[π] F) βββ[π] F ββ[π] E :=
#align linear_map.adjoint LinearMap.adjoint
-/
+#print LinearMap.adjoint_toContinuousLinearMap /-
theorem adjoint_toContinuousLinearMap (A : E ββ[π] F) :
A.adjoint.toContinuousLinearMap = A.toContinuousLinearMap.adjoint :=
rfl
#align linear_map.adjoint_to_continuous_linear_map LinearMap.adjoint_toContinuousLinearMap
+-/
+#print LinearMap.adjoint_eq_toClm_adjoint /-
theorem adjoint_eq_toClm_adjoint (A : E ββ[π] F) : A.adjoint = A.toContinuousLinearMap.adjoint :=
rfl
#align linear_map.adjoint_eq_to_clm_adjoint LinearMap.adjoint_eq_toClm_adjoint
+-/
+#print LinearMap.adjoint_inner_left /-
/-- The fundamental property of the adjoint. -/
theorem adjoint_inner_left (A : E ββ[π] F) (x : E) (y : F) : βͺadjoint A y, xβ« = βͺy, A xβ« :=
by
rw [β coe_to_continuous_linear_map A, adjoint_eq_to_clm_adjoint]
exact ContinuousLinearMap.adjoint_inner_left _ x y
#align linear_map.adjoint_inner_left LinearMap.adjoint_inner_left
+-/
+#print LinearMap.adjoint_inner_right /-
/-- The fundamental property of the adjoint. -/
theorem adjoint_inner_right (A : E ββ[π] F) (x : E) (y : F) : βͺx, adjoint A yβ« = βͺA x, yβ« :=
by
rw [β coe_to_continuous_linear_map A, adjoint_eq_to_clm_adjoint]
exact ContinuousLinearMap.adjoint_inner_right _ x y
#align linear_map.adjoint_inner_right LinearMap.adjoint_inner_right
+-/
+#print LinearMap.adjoint_adjoint /-
/-- The adjoint is involutive -/
@[simp]
theorem adjoint_adjoint (A : E ββ[π] F) : A.adjoint.adjoint = A :=
@@ -412,7 +481,9 @@ theorem adjoint_adjoint (A : E ββ[π] F) : A.adjoint.adjoint = A :=
refine' ext_inner_left π fun w => _
rw [adjoint_inner_right, adjoint_inner_left]
#align linear_map.adjoint_adjoint LinearMap.adjoint_adjoint
+-/
+#print LinearMap.adjoint_comp /-
/-- The adjoint of the composition of two operators is the composition of the two adjoints
in reverse order. -/
@[simp]
@@ -422,7 +493,9 @@ theorem adjoint_comp (A : F ββ[π] G) (B : E ββ[π] F) : (A ββ B
refine' ext_inner_left π fun w => _
simp only [adjoint_inner_right, LinearMap.coe_comp, Function.comp_apply]
#align linear_map.adjoint_comp LinearMap.adjoint_comp
+-/
+#print LinearMap.eq_adjoint_iff /-
/-- The adjoint is unique: a map `A` is the adjoint of `B` iff it satisfies `βͺA x, yβ« = βͺx, B yβ«`
for all `x` and `y`. -/
theorem eq_adjoint_iff (A : E ββ[π] F) (B : F ββ[π] E) :
@@ -432,7 +505,9 @@ theorem eq_adjoint_iff (A : E ββ[π] F) (B : F ββ[π] E) :
ext x
exact ext_inner_right π fun y => by simp only [adjoint_inner_left, h x y]
#align linear_map.eq_adjoint_iff LinearMap.eq_adjoint_iff
+-/
+#print LinearMap.eq_adjoint_iff_basis /-
/-- The adjoint is unique: a map `A` is the adjoint of `B` iff it satisfies `βͺA x, yβ« = βͺx, B yβ«`
for all basis vectors `x` and `y`. -/
theorem eq_adjoint_iff_basis {ΞΉβ : Type _} {ΞΉβ : Type _} (bβ : Basis ΞΉβ π E) (bβ : Basis ΞΉβ π F)
@@ -443,14 +518,18 @@ theorem eq_adjoint_iff_basis {ΞΉβ : Type _} {ΞΉβ : Type _} (bβ : Basis ΞΉ
refine' Basis.ext bβ fun iβ => _
exact ext_inner_right_basis bβ fun iβ => by simp only [adjoint_inner_left, h iβ iβ]
#align linear_map.eq_adjoint_iff_basis LinearMap.eq_adjoint_iff_basis
+-/
+#print LinearMap.eq_adjoint_iff_basis_left /-
theorem eq_adjoint_iff_basis_left {ΞΉ : Type _} (b : Basis ΞΉ π E) (A : E ββ[π] F) (B : F ββ[π] E) :
A = B.adjoint β β i y, βͺA (b i), yβ« = βͺb i, B yβ« :=
by
refine' β¨fun h x y => by rw [h, adjoint_inner_left], fun h => Basis.ext b fun i => _β©
exact ext_inner_right π fun y => by simp only [h i, adjoint_inner_left]
#align linear_map.eq_adjoint_iff_basis_left LinearMap.eq_adjoint_iff_basis_left
+-/
+#print LinearMap.eq_adjoint_iff_basis_right /-
theorem eq_adjoint_iff_basis_right {ΞΉ : Type _} (b : Basis ΞΉ π F) (A : E ββ[π] F) (B : F ββ[π] E) :
A = B.adjoint β β i x, βͺA x, b iβ« = βͺx, B (b i)β« :=
by
@@ -458,6 +537,7 @@ theorem eq_adjoint_iff_basis_right {ΞΉ : Type _} (b : Basis ΞΉ π F) (A : E
ext x
refine' ext_inner_right_basis b fun i => by simp only [h i, adjoint_inner_left]
#align linear_map.eq_adjoint_iff_basis_right LinearMap.eq_adjoint_iff_basis_right
+-/
/-- `E ββ[π] E` is a star algebra with the adjoint as the star operation. -/
instance : Star (E ββ[π] E) :=
@@ -475,18 +555,24 @@ instance : StarRing (E ββ[π] E) :=
instance : StarModule π (E ββ[π] E) :=
β¨LinearEquiv.map_smulββ adjointβ©
+#print LinearMap.star_eq_adjoint /-
theorem star_eq_adjoint (A : E ββ[π] E) : star A = A.adjoint :=
rfl
#align linear_map.star_eq_adjoint LinearMap.star_eq_adjoint
+-/
+#print LinearMap.isSelfAdjoint_iff' /-
/-- A continuous linear operator is self-adjoint iff it is equal to its adjoint. -/
theorem isSelfAdjoint_iff' {A : E ββ[π] E} : IsSelfAdjoint A β A.adjoint = A :=
Iff.rfl
#align linear_map.is_self_adjoint_iff' LinearMap.isSelfAdjoint_iff'
+-/
+#print LinearMap.isSymmetric_iff_isSelfAdjoint /-
theorem isSymmetric_iff_isSelfAdjoint (A : E ββ[π] E) : IsSymmetric A β IsSelfAdjoint A := by
rw [is_self_adjoint_iff', is_symmetric, β LinearMap.eq_adjoint_iff]; exact eq_comm
#align linear_map.is_symmetric_iff_is_self_adjoint LinearMap.isSymmetric_iff_isSelfAdjoint
+-/
section Real
@@ -498,27 +584,34 @@ variable [InnerProductSpace β E'] [InnerProductSpace β F']
variable [FiniteDimensional β E'] [FiniteDimensional β F']
+#print LinearMap.isAdjointPair_inner /-
-- Todo: Generalize this to `is_R_or_C`.
theorem isAdjointPair_inner (A : E' ββ[β] F') :
IsAdjointPair (sesqFormOfInner : E' ββ[β] E' ββ[β] β) (sesqFormOfInner : F' ββ[β] F' ββ[β] β) A
A.adjoint :=
fun x y => by simp only [sesqFormOfInner_apply_apply, adjoint_inner_left]
#align linear_map.is_adjoint_pair_inner LinearMap.isAdjointPair_inner
+-/
end Real
+#print LinearMap.isSymmetric_adjoint_mul_self /-
/-- The Gram operator Tβ T is symmetric. -/
theorem isSymmetric_adjoint_mul_self (T : E ββ[π] E) : IsSymmetric (T.adjoint * T) := fun x y => by
simp only [mul_apply, adjoint_inner_left, adjoint_inner_right]
#align linear_map.is_symmetric_adjoint_mul_self LinearMap.isSymmetric_adjoint_mul_self
+-/
+#print LinearMap.re_inner_adjoint_mul_self_nonneg /-
/-- The Gram operator Tβ T is a positive operator. -/
theorem re_inner_adjoint_mul_self_nonneg (T : E ββ[π] E) (x : E) : 0 β€ re βͺx, (T.adjoint * T) xβ« :=
by
simp only [mul_apply, adjoint_inner_right, inner_self_eq_norm_sq_to_K]
norm_cast; exact sq_nonneg _
#align linear_map.re_inner_adjoint_mul_self_nonneg LinearMap.re_inner_adjoint_mul_self_nonneg
+-/
+#print LinearMap.im_inner_adjoint_mul_self_eq_zero /-
@[simp]
theorem im_inner_adjoint_mul_self_eq_zero (T : E ββ[π] E) (x : E) :
im βͺx, LinearMap.adjoint T (T x)β« = 0 :=
@@ -526,6 +619,7 @@ theorem im_inner_adjoint_mul_self_eq_zero (T : E ββ[π] E) (x : E) :
simp only [mul_apply, adjoint_inner_right, inner_self_eq_norm_sq_to_K]
norm_cast
#align linear_map.im_inner_adjoint_mul_self_eq_zero LinearMap.im_inner_adjoint_mul_self_eq_zero
+-/
end LinearMap
@@ -535,6 +629,7 @@ variable {m n : Type _} [Fintype m] [DecidableEq m] [Fintype n] [DecidableEq n]
open scoped ComplexConjugate
+#print Matrix.toEuclideanLin_conjTranspose_eq_adjoint /-
/-- The adjoint of the linear map associated to a matrix is the linear map associated to the
conjugate transpose of that matrix. -/
theorem toEuclideanLin_conjTranspose_eq_adjoint (A : Matrix m n π) :
@@ -545,6 +640,7 @@ theorem toEuclideanLin_conjTranspose_eq_adjoint (A : Matrix m n π) :
simp_rw [EuclideanSpace.inner_eq_star_dotProduct, pi_Lp_equiv_to_euclidean_lin, to_lin'_apply,
star_mul_vec, conj_transpose_conj_transpose, dot_product_mul_vec]
#align matrix.to_euclidean_lin_conj_transpose_eq_adjoint Matrix.toEuclideanLin_conjTranspose_eq_adjoint
+-/
end Matrix
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -245,20 +245,17 @@ instance : CstarRing (E βL[π] E) :=
calc
βAβ * Aβ β€ βAβ β * βAβ := op_norm_comp_le _ _
_ = βAβ * βAβ := by rw [LinearIsometryEquiv.norm_map]
-
Β· rw [β sq, β Real.sqrt_le_sqrt_iff (norm_nonneg _), Real.sqrt_sq (norm_nonneg _)]
refine' op_norm_le_bound _ (Real.sqrt_nonneg _) fun x => _
have :=
calc
re βͺ(Aβ * A) x, xβ« β€ β(Aβ * A) xβ * βxβ := re_inner_le_norm _ _
_ β€ βAβ * Aβ * βxβ * βxβ := mul_le_mul_of_nonneg_right (le_op_norm _ _) (norm_nonneg _)
-
calc
βA xβ = Real.sqrt (re βͺ(Aβ * A) x, xβ«) := by rw [apply_norm_eq_sqrt_inner_adjoint_left]
_ β€ Real.sqrt (βAβ * Aβ * βxβ * βxβ) := (Real.sqrt_le_sqrt this)
_ = Real.sqrt βAβ * Aβ * βxβ := by
- rw [mul_assoc, Real.sqrt_mul (norm_nonneg _), Real.sqrt_mul_self (norm_nonneg _)]
- β©
+ rw [mul_assoc, Real.sqrt_mul (norm_nonneg _), Real.sqrt_mul_self (norm_nonneg _)]β©
section Real
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: FrΓ©dΓ©ric Dupuis, Heather Macbeth
! This file was ported from Lean 3 source module analysis.inner_product_space.adjoint
-! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
+! leanprover-community/mathlib commit 2ebc1d6c2fed9f54c95bbc3998eaa5570527129a
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.Analysis.InnerProductSpace.PiL2
/-!
# Adjoint of operators on Hilbert spaces
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Given an operator `A : E βL[π] F`, where `E` and `F` are Hilbert spaces, its adjoint
`adjoint A : F βL[π] E` is the unique operator such that `βͺx, A yβ« = βͺadjoint A x, yβ«` for all
`x` and `y`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -68,6 +68,7 @@ namespace ContinuousLinearMap
variable [CompleteSpace E] [CompleteSpace G]
+#print ContinuousLinearMap.adjointAux /-
/-- The adjoint, as a continuous conjugate-linear map. This is only meant as an auxiliary
definition for the main definition `adjoint`, where this is bundled as a conjugate-linear isometric
equivalence. -/
@@ -75,6 +76,7 @@ def adjointAux : (E βL[π] F) βLβ[π] F βL[π] E :=
(ContinuousLinearMap.compSL _ _ _ _ _ ((toDual π E).symm : NormedSpace.Dual π E βLβ[π] E)).comp
(toSesqForm : (E βL[π] F) βL[π] F βLβ[π] NormedSpace.Dual π E)
#align continuous_linear_map.adjoint_aux ContinuousLinearMap.adjointAux
+-/
@[simp]
theorem adjointAux_apply (A : E βL[π] F) (x : F) :
@@ -113,11 +115,13 @@ theorem adjointAux_norm (A : E βL[π] F) : βadjointAux Aβ = βAβ :=
exact to_sesq_form_apply_norm_le
#align continuous_linear_map.adjoint_aux_norm ContinuousLinearMap.adjointAux_norm
+#print ContinuousLinearMap.adjoint /-
/-- The adjoint of a bounded operator from Hilbert space E to Hilbert space F. -/
def adjoint : (E βL[π] F) ββα΅’β[π] F βL[π] E :=
LinearIsometryEquiv.ofSurjective { adjointAux with norm_map' := adjointAux_norm } fun A =>
β¨adjointAux A, adjointAux_adjointAux Aβ©
#align continuous_linear_map.adjoint ContinuousLinearMap.adjoint
+-/
-- mathport name: adjoint
scoped[InnerProduct] postfix:1000 "β " => ContinuousLinearMap.adjoint
@@ -297,7 +301,7 @@ theorem isSymmetric {A : E βL[π] E} (hA : IsSelfAdjoint A) : (A : E ββ[
theorem conj_adjoint {T : E βL[π] E} (hT : IsSelfAdjoint T) (S : E βL[π] F) :
IsSelfAdjoint (S βL T βL S.adjoint) :=
by
- rw [is_self_adjoint_iff'] at hTβ’
+ rw [is_self_adjoint_iff'] at hT β’
simp only [hT, adjoint_comp, adjoint_adjoint]
exact ContinuousLinearMap.comp_assoc _ _ _
#align is_self_adjoint.conj_adjoint IsSelfAdjoint.conj_adjoint
@@ -306,7 +310,7 @@ theorem conj_adjoint {T : E βL[π] E} (hT : IsSelfAdjoint T) (S : E βL[
theorem adjoint_conj {T : E βL[π] E} (hT : IsSelfAdjoint T) (S : F βL[π] E) :
IsSelfAdjoint (S.adjoint βL T βL S) :=
by
- rw [is_self_adjoint_iff'] at hTβ’
+ rw [is_self_adjoint_iff'] at hT β’
simp only [hT, adjoint_comp, adjoint_adjoint]
exact ContinuousLinearMap.comp_assoc _ _ _
#align is_self_adjoint.adjoint_conj IsSelfAdjoint.adjoint_conj
@@ -318,7 +322,7 @@ theorem ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric {A : E βL[π] E} :
#align continuous_linear_map.is_self_adjoint_iff_is_symmetric ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric
theorem LinearMap.IsSymmetric.isSelfAdjoint {A : E βL[π] E} (hA : (A : E ββ[π] E).IsSymmetric) :
- IsSelfAdjoint A := by rwa [β ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric] at hA
+ IsSelfAdjoint A := by rwa [β ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric] at hA
#align linear_map.is_symmetric.is_self_adjoint LinearMap.IsSymmetric.isSelfAdjoint
/-- The orthogonal projection is self-adjoint. -/
@@ -367,6 +371,7 @@ variable [FiniteDimensional π E] [FiniteDimensional π F] [FiniteDimensiona
attribute [local instance 20] FiniteDimensional.complete
+#print LinearMap.adjoint /-
/-- The adjoint of an operator from the finite-dimensional inner product space E to the finite-
dimensional inner product space F. -/
def adjoint : (E ββ[π] F) βββ[π] F ββ[π] E :=
@@ -374,15 +379,16 @@ def adjoint : (E ββ[π] F) βββ[π] F ββ[π] E :=
ContinuousLinearMap.adjoint.toLinearEquiv).trans
LinearMap.toContinuousLinearMap.symm
#align linear_map.adjoint LinearMap.adjoint
+-/
theorem adjoint_toContinuousLinearMap (A : E ββ[π] F) :
A.adjoint.toContinuousLinearMap = A.toContinuousLinearMap.adjoint :=
rfl
#align linear_map.adjoint_to_continuous_linear_map LinearMap.adjoint_toContinuousLinearMap
-theorem adjoint_eq_to_clm_adjoint (A : E ββ[π] F) : A.adjoint = A.toContinuousLinearMap.adjoint :=
+theorem adjoint_eq_toClm_adjoint (A : E ββ[π] F) : A.adjoint = A.toContinuousLinearMap.adjoint :=
rfl
-#align linear_map.adjoint_eq_to_clm_adjoint LinearMap.adjoint_eq_to_clm_adjoint
+#align linear_map.adjoint_eq_to_clm_adjoint LinearMap.adjoint_eq_toClm_adjoint
/-- The fundamental property of the adjoint. -/
theorem adjoint_inner_left (A : E ββ[π] F) (x : E) (y : F) : βͺadjoint A y, xβ« = βͺy, A xβ« :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -48,7 +48,7 @@ noncomputable section
open IsROrC
-open ComplexConjugate
+open scoped ComplexConjugate
variable {π E F G : Type _} [IsROrC π]
@@ -527,7 +527,7 @@ namespace Matrix
variable {m n : Type _} [Fintype m] [DecidableEq m] [Fintype n] [DecidableEq n]
-open ComplexConjugate
+open scoped ComplexConjugate
/-- The adjoint of the linear map associated to a matrix is the linear map associated to the
conjugate transpose of that matrix. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -151,10 +151,7 @@ theorem adjoint_comp (A : F βL[π] G) (B : E βL[π] F) : (A βL B)β =
theorem apply_norm_sq_eq_inner_adjoint_left (A : E βL[π] E) (x : E) :
βA xβ ^ 2 = re βͺ(Aβ * A) x, xβ« :=
by
- have h : βͺ(Aβ * A) x, xβ« = βͺA x, A xβ« :=
- by
- rw [β adjoint_inner_left]
- rfl
+ have h : βͺ(Aβ * A) x, xβ« = βͺA x, A xβ« := by rw [β adjoint_inner_left]; rfl
rw [h, β inner_self_eq_norm_sq _]
#align continuous_linear_map.apply_norm_sq_eq_inner_adjoint_left ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_left
@@ -166,10 +163,7 @@ theorem apply_norm_eq_sqrt_inner_adjoint_left (A : E βL[π] E) (x : E) :
theorem apply_norm_sq_eq_inner_adjoint_right (A : E βL[π] E) (x : E) :
βA xβ ^ 2 = re βͺx, (Aβ * A) xβ« :=
by
- have h : βͺx, (Aβ * A) xβ« = βͺA x, A xβ« :=
- by
- rw [β adjoint_inner_right]
- rfl
+ have h : βͺx, (Aβ * A) xβ« = βͺA x, A xβ« := by rw [β adjoint_inner_right]; rfl
rw [h, β inner_self_eq_norm_sq _]
#align continuous_linear_map.apply_norm_sq_eq_inner_adjoint_right ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_right
@@ -484,10 +478,8 @@ theorem isSelfAdjoint_iff' {A : E ββ[π] E} : IsSelfAdjoint A β A.adjoin
Iff.rfl
#align linear_map.is_self_adjoint_iff' LinearMap.isSelfAdjoint_iff'
-theorem isSymmetric_iff_isSelfAdjoint (A : E ββ[π] E) : IsSymmetric A β IsSelfAdjoint A :=
- by
- rw [is_self_adjoint_iff', is_symmetric, β LinearMap.eq_adjoint_iff]
- exact eq_comm
+theorem isSymmetric_iff_isSelfAdjoint (A : E ββ[π] E) : IsSymmetric A β IsSelfAdjoint A := by
+ rw [is_self_adjoint_iff', is_symmetric, β LinearMap.eq_adjoint_iff]; exact eq_comm
#align linear_map.is_symmetric_iff_is_self_adjoint LinearMap.isSymmetric_iff_isSelfAdjoint
section Real
@@ -518,8 +510,7 @@ theorem isSymmetric_adjoint_mul_self (T : E ββ[π] E) : IsSymmetric (T.adj
theorem re_inner_adjoint_mul_self_nonneg (T : E ββ[π] E) (x : E) : 0 β€ re βͺx, (T.adjoint * T) xβ« :=
by
simp only [mul_apply, adjoint_inner_right, inner_self_eq_norm_sq_to_K]
- norm_cast
- exact sq_nonneg _
+ norm_cast; exact sq_nonneg _
#align linear_map.re_inner_adjoint_mul_self_nonneg LinearMap.re_inner_adjoint_mul_self_nonneg
@[simp]
mathlib commit https://github.com/leanprover-community/mathlib/commit/ef95945cd48c932c9e034872bd25c3c220d9c946
@@ -330,7 +330,7 @@ theorem LinearMap.IsSymmetric.isSelfAdjoint {A : E βL[π] E} (hA : (A : E
/-- The orthogonal projection is self-adjoint. -/
theorem orthogonalProjection_isSelfAdjoint (U : Submodule π E) [CompleteSpace U] :
IsSelfAdjoint (U.subtypeL βL orthogonalProjection U) :=
- (orthogonalProjectionIsSymmetric U).IsSelfAdjoint
+ (orthogonalProjection_isSymmetric U).IsSelfAdjoint
#align orthogonal_projection_is_self_adjoint orthogonalProjection_isSelfAdjoint
theorem conj_orthogonalProjection {T : E βL[π] E} (hT : IsSelfAdjoint T) (U : Submodule π E)
@@ -510,9 +510,9 @@ theorem isAdjointPair_inner (A : E' ββ[β] F') :
end Real
/-- The Gram operator Tβ T is symmetric. -/
-theorem isSymmetricAdjointMulSelf (T : E ββ[π] E) : IsSymmetric (T.adjoint * T) := fun x y => by
+theorem isSymmetric_adjoint_mul_self (T : E ββ[π] E) : IsSymmetric (T.adjoint * T) := fun x y => by
simp only [mul_apply, adjoint_inner_left, adjoint_inner_right]
-#align linear_map.is_symmetric_adjoint_mul_self LinearMap.isSymmetricAdjointMulSelf
+#align linear_map.is_symmetric_adjoint_mul_self LinearMap.isSymmetric_adjoint_mul_self
/-- The Gram operator Tβ T is a positive operator. -/
theorem re_inner_adjoint_mul_self_nonneg (T : E ββ[π] E) (x : E) : 0 β€ re βͺx, (T.adjoint * T) xβ« :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/2f8347015b12b0864dfaf366ec4909eb70c78740
@@ -330,7 +330,7 @@ theorem LinearMap.IsSymmetric.isSelfAdjoint {A : E βL[π] E} (hA : (A : E
/-- The orthogonal projection is self-adjoint. -/
theorem orthogonalProjection_isSelfAdjoint (U : Submodule π E) [CompleteSpace U] :
IsSelfAdjoint (U.subtypeL βL orthogonalProjection U) :=
- (orthogonalProjection_isSymmetric U).IsSelfAdjoint
+ (orthogonalProjectionIsSymmetric U).IsSelfAdjoint
#align orthogonal_projection_is_self_adjoint orthogonalProjection_isSelfAdjoint
theorem conj_orthogonalProjection {T : E βL[π] E} (hT : IsSelfAdjoint T) (U : Submodule π E)
@@ -510,9 +510,9 @@ theorem isAdjointPair_inner (A : E' ββ[β] F') :
end Real
/-- The Gram operator Tβ T is symmetric. -/
-theorem isSymmetric_adjoint_mul_self (T : E ββ[π] E) : IsSymmetric (T.adjoint * T) := fun x y => by
+theorem isSymmetricAdjointMulSelf (T : E ββ[π] E) : IsSymmetric (T.adjoint * T) := fun x y => by
simp only [mul_apply, adjoint_inner_left, adjoint_inner_right]
-#align linear_map.is_symmetric_adjoint_mul_self LinearMap.isSymmetric_adjoint_mul_self
+#align linear_map.is_symmetric_adjoint_mul_self LinearMap.isSymmetricAdjointMulSelf
/-- The Gram operator Tβ T is a positive operator. -/
theorem re_inner_adjoint_mul_self_nonneg (T : E ββ[π] E) (x : E) : 0 β€ re βͺx, (T.adjoint * T) xβ« :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/09079525fd01b3dda35e96adaa08d2f943e1648c
@@ -371,7 +371,7 @@ namespace LinearMap
variable [FiniteDimensional π E] [FiniteDimensional π F] [FiniteDimensional π G]
-attribute [local instance] FiniteDimensional.complete
+attribute [local instance 20] FiniteDimensional.complete
/-- The adjoint of an operator from the finite-dimensional inner product space E to the finite-
dimensional inner product space F. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/55d771df074d0dd020139ee1cd4b95521422df9f
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: FrΓ©dΓ©ric Dupuis, Heather Macbeth
! This file was ported from Lean 3 source module analysis.inner_product_space.adjoint
-! leanprover-community/mathlib commit 9f0d61b4475e3c3cba6636ab51cdb1f3949d2e1d
+! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -52,6 +52,8 @@ open ComplexConjugate
variable {π E F G : Type _} [IsROrC π]
+variable [NormedAddCommGroup E] [NormedAddCommGroup F] [NormedAddCommGroup G]
+
variable [InnerProductSpace π E] [InnerProductSpace π F] [InnerProductSpace π G]
-- mathport name: Β«exprβͺ , β«Β»
@@ -259,7 +261,11 @@ instance : CstarRing (E βL[π] E) :=
section Real
-variable {E' : Type _} {F' : Type _} [InnerProductSpace β E'] [InnerProductSpace β F']
+variable {E' : Type _} {F' : Type _}
+
+variable [NormedAddCommGroup E'] [NormedAddCommGroup F']
+
+variable [InnerProductSpace β E'] [InnerProductSpace β F']
variable [CompleteSpace E'] [CompleteSpace F']
@@ -486,7 +492,11 @@ theorem isSymmetric_iff_isSelfAdjoint (A : E ββ[π] E) : IsSymmetric A β
section Real
-variable {E' : Type _} {F' : Type _} [InnerProductSpace β E'] [InnerProductSpace β F']
+variable {E' : Type _} {F' : Type _}
+
+variable [NormedAddCommGroup E'] [NormedAddCommGroup F']
+
+variable [InnerProductSpace β E'] [InnerProductSpace β F']
variable [FiniteDimensional β E'] [FiniteDimensional β F']
mathlib commit https://github.com/leanprover-community/mathlib/commit/dd6388c44e6f6b4547070b887c5905d5cfe6c9f8
@@ -264,12 +264,12 @@ variable {E' : Type _} {F' : Type _} [InnerProductSpace β E'] [InnerProductSpa
variable [CompleteSpace E'] [CompleteSpace F']
-- Todo: Generalize this to `is_R_or_C`.
-theorem isAdjointPairInner (A : E' βL[β] F') :
+theorem isAdjointPair_inner (A : E' βL[β] F') :
LinearMap.IsAdjointPair (sesqFormOfInner : E' ββ[β] E' ββ[β] β)
(sesqFormOfInner : F' ββ[β] F' ββ[β] β) A (Aβ ) :=
fun x y => by
simp only [sesqFormOfInner_apply_apply, adjoint_inner_left, to_linear_map_eq_coe, coe_coe]
-#align continuous_linear_map.is_adjoint_pair_inner ContinuousLinearMap.isAdjointPairInner
+#align continuous_linear_map.is_adjoint_pair_inner ContinuousLinearMap.isAdjointPair_inner
end Real
@@ -491,11 +491,11 @@ variable {E' : Type _} {F' : Type _} [InnerProductSpace β E'] [InnerProductSpa
variable [FiniteDimensional β E'] [FiniteDimensional β F']
-- Todo: Generalize this to `is_R_or_C`.
-theorem isAdjointPairInner (A : E' ββ[β] F') :
+theorem isAdjointPair_inner (A : E' ββ[β] F') :
IsAdjointPair (sesqFormOfInner : E' ββ[β] E' ββ[β] β) (sesqFormOfInner : F' ββ[β] F' ββ[β] β) A
A.adjoint :=
fun x y => by simp only [sesqFormOfInner_apply_apply, adjoint_inner_left]
-#align linear_map.is_adjoint_pair_inner LinearMap.isAdjointPairInner
+#align linear_map.is_adjoint_pair_inner LinearMap.isAdjointPair_inner
end Real
mathlib commit https://github.com/leanprover-community/mathlib/commit/02ba8949f486ebecf93fe7460f1ed0564b5e442c
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: FrΓ©dΓ©ric Dupuis, Heather Macbeth
! This file was ported from Lean 3 source module analysis.inner_product_space.adjoint
-! leanprover-community/mathlib commit 3fc0b254310908f70a1a75f01147d52e53e9f8a2
+! leanprover-community/mathlib commit 9f0d61b4475e3c3cba6636ab51cdb1f3949d2e1d
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -530,15 +530,14 @@ open ComplexConjugate
/-- The adjoint of the linear map associated to a matrix is the linear map associated to the
conjugate transpose of that matrix. -/
-theorem conjTranspose_eq_adjoint (A : Matrix m n π) :
- toLin' A.conjTranspose =
- @LinearMap.adjoint _ (EuclideanSpace π n) (EuclideanSpace π m) _ _ _ _ _ (toLin' A) :=
+theorem toEuclideanLin_conjTranspose_eq_adjoint (A : Matrix m n π) :
+ A.conjTranspose.toEuclideanLin = A.toEuclideanLin.adjoint :=
by
- rw [@LinearMap.eq_adjoint_iff _ (EuclideanSpace π m) (EuclideanSpace π n)]
+ rw [LinearMap.eq_adjoint_iff]
intro x y
- convert dot_product_assoc (conj β (id x : m β π)) y A using 1
- simp [dot_product, mul_vec, RingHom.map_sum, β starRingEnd_apply, mul_comm]
-#align matrix.conj_transpose_eq_adjoint Matrix.conjTranspose_eq_adjoint
+ simp_rw [EuclideanSpace.inner_eq_star_dotProduct, pi_Lp_equiv_to_euclidean_lin, to_lin'_apply,
+ star_mul_vec, conj_transpose_conj_transpose, dot_product_mul_vec]
+#align matrix.to_euclidean_lin_conj_transpose_eq_adjoint Matrix.toEuclideanLin_conjTranspose_eq_adjoint
end Matrix
mathlib commit https://github.com/leanprover-community/mathlib/commit/1a313d8bba1bad05faba71a4a4e9742ab5bd9efd
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: FrΓ©dΓ©ric Dupuis, Heather Macbeth
! This file was ported from Lean 3 source module analysis.inner_product_space.adjoint
-! leanprover-community/mathlib commit 17ef379e997badd73e5eabb4d38f11919ab3c4b3
+! leanprover-community/mathlib commit 3fc0b254310908f70a1a75f01147d52e53e9f8a2
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -86,7 +86,7 @@ theorem adjointAux_inner_left (A : E βL[π] F) (x : E) (y : F) : βͺadjointA
#align continuous_linear_map.adjoint_aux_inner_left ContinuousLinearMap.adjointAux_inner_left
theorem adjointAux_inner_right (A : E βL[π] F) (x : E) (y : F) : βͺx, adjointAux A yβ« = βͺA x, yβ« :=
- by rw [β inner_conj_sym, adjoint_aux_inner_left, inner_conj_sym]
+ by rw [β inner_conj_symm, adjoint_aux_inner_left, inner_conj_symm]
#align continuous_linear_map.adjoint_aux_inner_right ContinuousLinearMap.adjointAux_inner_right
variable [CompleteSpace F]
mathlib commit https://github.com/leanprover-community/mathlib/commit/2af0836443b4cfb5feda0df0051acdb398304931
@@ -324,7 +324,7 @@ theorem LinearMap.IsSymmetric.isSelfAdjoint {A : E βL[π] E} (hA : (A : E
/-- The orthogonal projection is self-adjoint. -/
theorem orthogonalProjection_isSelfAdjoint (U : Submodule π E) [CompleteSpace U] :
IsSelfAdjoint (U.subtypeL βL orthogonalProjection U) :=
- (orthogonalProjectionIsSymmetric U).IsSelfAdjoint
+ (orthogonalProjection_isSymmetric U).IsSelfAdjoint
#align orthogonal_projection_is_self_adjoint orthogonalProjection_isSelfAdjoint
theorem conj_orthogonalProjection {T : E βL[π] E} (hT : IsSelfAdjoint T) (U : Submodule π E)
@@ -500,9 +500,9 @@ theorem isAdjointPairInner (A : E' ββ[β] F') :
end Real
/-- The Gram operator Tβ T is symmetric. -/
-theorem isSymmetricAdjointMulSelf (T : E ββ[π] E) : IsSymmetric (T.adjoint * T) := fun x y => by
+theorem isSymmetric_adjoint_mul_self (T : E ββ[π] E) : IsSymmetric (T.adjoint * T) := fun x y => by
simp only [mul_apply, adjoint_inner_left, adjoint_inner_right]
-#align linear_map.is_symmetric_adjoint_mul_self LinearMap.isSymmetricAdjointMulSelf
+#align linear_map.is_symmetric_adjoint_mul_self LinearMap.isSymmetric_adjoint_mul_self
/-- The Gram operator Tβ T is a positive operator. -/
theorem re_inner_adjoint_mul_self_nonneg (T : E ββ[π] E) (x : E) : 0 β€ re βͺx, (T.adjoint * T) xβ« :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -252,7 +252,7 @@ instance : CstarRing (E βL[π] E) :=
calc
βA xβ = Real.sqrt (re βͺ(Aβ * A) x, xβ«) := by rw [apply_norm_eq_sqrt_inner_adjoint_left]
- _ β€ Real.sqrt (βAβ * Aβ * βxβ * βxβ) := Real.sqrt_le_sqrt this
+ _ β€ Real.sqrt (βAβ * Aβ * βxβ * βxβ) := (Real.sqrt_le_sqrt this)
_ = Real.sqrt βAβ * Aβ * βxβ := by
rw [mul_assoc, Real.sqrt_mul (norm_nonneg _), Real.sqrt_mul_self (norm_nonneg _)]
β©
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -234,7 +234,7 @@ theorem norm_adjoint_comp_self (A : E βL[π] F) :
_ β€ βAβ βL Aβ * βxβ * βxβ := mul_le_mul_of_nonneg_right (le_opNorm _ _) (norm_nonneg _)
calc
βA xβ = β(re βͺ(Aβ βL A) x, xβ«) := by rw [apply_norm_eq_sqrt_inner_adjoint_left]
- _ β€ β(βAβ βL Aβ * βxβ * βxβ) := (Real.sqrt_le_sqrt this)
+ _ β€ β(βAβ βL Aβ * βxβ * βxβ) := Real.sqrt_le_sqrt this
_ = ββAβ βL Aβ * βxβ := by
simp_rw [mul_assoc, Real.sqrt_mul (norm_nonneg _) (βxβ * βxβ),
Real.sqrt_mul_self (norm_nonneg x)]
This adds the notation βr
for Real.sqrt r
. The precedence is such that βxβ»ΒΉ
is parsed as β(xβ»ΒΉ)
; not because this is particularly desirable, but because it's the default and the choice doesn't really matter.
This is extracted from #7907, which adds a more general nth root typeclass.
The idea is to perform all the boring substitutions downstream quickly, so that we can play around with custom elaborators with a much slower rate of code-rot.
This PR also won't rot as quickly, as it does not forbid writing x.sqrt
as that PR does.
While perhaps claiming β
for Real.sqrt
is greedy; it:
NNReal.sqrt
and Nat.sqrt
sqrt
on Float
Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
@@ -148,7 +148,7 @@ theorem apply_norm_sq_eq_inner_adjoint_left (A : E βL[π] F) (x : E) :
#align continuous_linear_map.apply_norm_sq_eq_inner_adjoint_left ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_left
theorem apply_norm_eq_sqrt_inner_adjoint_left (A : E βL[π] F) (x : E) :
- βA xβ = Real.sqrt (re βͺ(Aβ βL A) x, xβ«) := by
+ βA xβ = β(re βͺ(Aβ βL A) x, xβ«) := by
rw [β apply_norm_sq_eq_inner_adjoint_left, Real.sqrt_sq (norm_nonneg _)]
#align continuous_linear_map.apply_norm_eq_sqrt_inner_adjoint_left ContinuousLinearMap.apply_norm_eq_sqrt_inner_adjoint_left
@@ -159,7 +159,7 @@ theorem apply_norm_sq_eq_inner_adjoint_right (A : E βL[π] F) (x : E) :
#align continuous_linear_map.apply_norm_sq_eq_inner_adjoint_right ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_right
theorem apply_norm_eq_sqrt_inner_adjoint_right (A : E βL[π] F) (x : E) :
- βA xβ = Real.sqrt (re βͺx, (Aβ βL A) xβ«) := by
+ βA xβ = β(re βͺx, (Aβ βL A) xβ«) := by
rw [β apply_norm_sq_eq_inner_adjoint_right, Real.sqrt_sq (norm_nonneg _)]
#align continuous_linear_map.apply_norm_eq_sqrt_inner_adjoint_right ContinuousLinearMap.apply_norm_eq_sqrt_inner_adjoint_right
@@ -233,9 +233,9 @@ theorem norm_adjoint_comp_self (A : E βL[π] F) :
re βͺ(Aβ βL A) x, xβ« β€ β(Aβ βL A) xβ * βxβ := re_inner_le_norm _ _
_ β€ βAβ βL Aβ * βxβ * βxβ := mul_le_mul_of_nonneg_right (le_opNorm _ _) (norm_nonneg _)
calc
- βA xβ = Real.sqrt (re βͺ(Aβ βL A) x, xβ«) := by rw [apply_norm_eq_sqrt_inner_adjoint_left]
- _ β€ Real.sqrt (βAβ βL Aβ * βxβ * βxβ) := (Real.sqrt_le_sqrt this)
- _ = Real.sqrt βAβ βL Aβ * βxβ := by
+ βA xβ = β(re βͺ(Aβ βL A) x, xβ«) := by rw [apply_norm_eq_sqrt_inner_adjoint_left]
+ _ β€ β(βAβ βL Aβ * βxβ * βxβ) := (Real.sqrt_le_sqrt this)
+ _ = ββAβ βL Aβ * βxβ := by
simp_rw [mul_assoc, Real.sqrt_mul (norm_nonneg _) (βxβ * βxβ),
Real.sqrt_mul_self (norm_nonneg x)]
IsROrC
to RCLike
(#10819)
IsROrC
contains data, which goes against the expectation that classes prefixed with Is
are prop-valued. People have been complaining about this on and off, so this PR renames IsROrC
to RCLike
.
@@ -42,11 +42,11 @@ adjoint
noncomputable section
-open IsROrC
+open RCLike
open scoped ComplexConjugate
-variable {π E F G : Type*} [IsROrC π]
+variable {π E F G : Type*} [RCLike π]
variable [NormedAddCommGroup E] [NormedAddCommGroup F] [NormedAddCommGroup G]
variable [InnerProductSpace π E] [InnerProductSpace π F] [InnerProductSpace π G]
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -47,9 +47,7 @@ open IsROrC
open scoped ComplexConjugate
variable {π E F G : Type*} [IsROrC π]
-
variable [NormedAddCommGroup E] [NormedAddCommGroup F] [NormedAddCommGroup G]
-
variable [InnerProductSpace π E] [InnerProductSpace π F] [InnerProductSpace π G]
local notation "βͺ" x ", " y "β«" => @inner π _ _ x y
@@ -319,7 +317,6 @@ end IsSelfAdjoint
namespace LinearMap
variable [CompleteSpace E]
-
variable {T : E ββ[π] E}
/-- The **Hellinger--Toeplitz theorem**: Construct a self-adjoint operator from an everywhere
For as yet un-completely diagnosed reasons, unitary.star_mul_self_of_mem hu
for (hu : u β unitary (H βL[π] H))
elaborates slowly thanks to [1.068378s] β
ContinuousLinearMap.comp (ContinuousLinearMap.adjoint u) u =?= star ?a * ?b
. This PR pulls out the statements into have
's which speeds up the proofs significantly. #11299 documents the issue for future investigation.
@@ -545,11 +545,15 @@ lemma _root_.LinearIsometryEquiv.star_eq_symm (e : H ββα΅’[π] H) :
theorem norm_map_of_mem_unitary {u : H βL[π] H} (hu : u β unitary (H βL[π] H)) (x : H) :
βu xβ = βxβ :=
- u.norm_map_iff_adjoint_comp_self.mpr (unitary.star_mul_self_of_mem hu) x
+ -- Elaborates faster with this broken out #11299
+ have := unitary.star_mul_self_of_mem hu
+ u.norm_map_iff_adjoint_comp_self.mpr this x
theorem inner_map_map_of_mem_unitary {u : H βL[π] H} (hu : u β unitary (H βL[π] H)) (x y : H) :
βͺu x, u yβ«_π = βͺx, yβ«_π :=
- u.inner_map_map_iff_adjoint_comp_self.mpr (unitary.star_mul_self_of_mem hu) x y
+ -- Elaborates faster with this broken out #11299
+ have := unitary.star_mul_self_of_mem hu
+ u.inner_map_map_iff_adjoint_comp_self.mpr this x y
end ContinuousLinearMap
This constructs a group isomorphism unitary (H βL[π] H) ββ (H ββα΅’[π] H)
where H
is a Hilbert space. In addition, several lemmas are provided for convenience concerning unitary operators.
@@ -506,6 +506,99 @@ theorem im_inner_adjoint_mul_self_eq_zero (T : E ββ[π] E) (x : E) :
end LinearMap
+section Unitary
+
+variable {H : Type*} [NormedAddCommGroup H] [InnerProductSpace π H] [CompleteSpace H]
+
+namespace ContinuousLinearMap
+
+variable {K : Type*} [NormedAddCommGroup K] [InnerProductSpace π K] [CompleteSpace K]
+
+theorem inner_map_map_iff_adjoint_comp_self (u : H βL[π] K) :
+ (β x y : H, βͺu x, u yβ«_π = βͺx, yβ«_π) β adjoint u βL u = 1 := by
+ refine β¨fun h β¦ ext fun x β¦ ?_, fun h β¦ ?_β©
+ Β· refine ext_inner_right π fun y β¦ ?_
+ simpa [star_eq_adjoint, adjoint_inner_left] using h x y
+ Β· simp [β adjoint_inner_left, β comp_apply, h]
+
+theorem norm_map_iff_adjoint_comp_self (u : H βL[π] K) :
+ (β x : H, βu xβ = βxβ) β adjoint u βL u = 1 := by
+ rw [LinearMap.norm_map_iff_inner_map_map u, u.inner_map_map_iff_adjoint_comp_self]
+
+@[simp]
+lemma _root_.LinearIsometryEquiv.adjoint_eq_symm (e : H ββα΅’[π] K) :
+ adjoint (e : H βL[π] K) = e.symm :=
+ let e' := (e : H βL[π] K)
+ calc
+ adjoint e' = adjoint e' βL (e' βL e.symm) := by
+ convert (adjoint e').comp_id.symm
+ ext
+ simp [e']
+ _ = e.symm := by
+ rw [β comp_assoc, norm_map_iff_adjoint_comp_self e' |>.mp e.norm_map]
+ exact (e.symm : K βL[π] H).id_comp
+
+@[simp]
+lemma _root_.LinearIsometryEquiv.star_eq_symm (e : H ββα΅’[π] H) :
+ star (e : H βL[π] H) = e.symm :=
+ e.adjoint_eq_symm
+
+theorem norm_map_of_mem_unitary {u : H βL[π] H} (hu : u β unitary (H βL[π] H)) (x : H) :
+ βu xβ = βxβ :=
+ u.norm_map_iff_adjoint_comp_self.mpr (unitary.star_mul_self_of_mem hu) x
+
+theorem inner_map_map_of_mem_unitary {u : H βL[π] H} (hu : u β unitary (H βL[π] H)) (x y : H) :
+ βͺu x, u yβ«_π = βͺx, yβ«_π :=
+ u.inner_map_map_iff_adjoint_comp_self.mpr (unitary.star_mul_self_of_mem hu) x y
+
+end ContinuousLinearMap
+
+namespace unitary
+
+theorem norm_map (u : unitary (H βL[π] H)) (x : H) : β(u : H βL[π] H) xβ = βxβ :=
+ u.val.norm_map_of_mem_unitary u.property x
+
+theorem inner_map_map (u : unitary (H βL[π] H)) (x y : H) :
+ βͺ(u : H βL[π] H) x, (u : H βL[π] H) yβ«_π = βͺx, yβ«_π :=
+ u.val.inner_map_map_of_mem_unitary u.property x y
+
+/-- The unitary elements of continuous linear maps on a Hilbert space coincide with the linear
+isometric equivalences on that Hilbert space. -/
+noncomputable def linearIsometryEquiv : unitary (H βL[π] H) β* (H ββα΅’[π] H) where
+ toFun u :=
+ { (u : H βL[π] H) with
+ norm_map' := norm_map u
+ invFun := β(star u)
+ left_inv := fun x β¦ congr($(star_mul_self u).val x)
+ right_inv := fun x β¦ congr($(mul_star_self u).val x) }
+ invFun e :=
+ { val := e
+ property := by
+ let e' : (H βL[π] H)Λ£ :=
+ { val := (e : H βL[π] H)
+ inv := (e.symm : H βL[π] H)
+ val_inv := by ext; simp
+ inv_val := by ext; simp }
+ exact IsUnit.mem_unitary_of_star_mul_self β¨e', rflβ© <|
+ (e : H βL[π] H).norm_map_iff_adjoint_comp_self.mp e.norm_map }
+ left_inv u := Subtype.ext rfl
+ right_inv e := LinearIsometryEquiv.ext fun x β¦ rfl
+ map_mul' u v := by ext; rfl
+
+@[simp]
+lemma linearIsometryEquiv_coe_apply (u : unitary (H βL[π] H)) :
+ linearIsometryEquiv u = (u : H βL[π] H) :=
+ rfl
+
+@[simp]
+lemma linearIsometryEquiv_coe_symm_apply (e : H ββα΅’[π] H) :
+ linearIsometryEquiv.symm e = (e : H βL[π] H) :=
+ rfl
+
+end unitary
+
+end Unitary
+
section Matrix
open Matrix LinearMap
refine
s (#10762)
I replaced a few "terminal" refine/refine'
s with exact
.
The strategy was very simple-minded: essentially any refine
whose following line had smaller indentation got replaced by exact
and then I cleaned up the mess.
This PR certainly leaves some further terminal refine
s, but maybe the current change is beneficial.
@@ -311,7 +311,7 @@ theorem conj_orthogonalProjection {T : E βL[π] E} (hT : IsSelfAdjoint T) (U
(U.subtypeL βL orthogonalProjection U βL T βL U.subtypeL βL orthogonalProjection U) := by
rw [β ContinuousLinearMap.comp_assoc]
nth_rw 1 [β (orthogonalProjection_isSelfAdjoint U).adjoint_eq]
- refine' hT.adjoint_conj _
+ exact hT.adjoint_conj _
#align is_self_adjoint.conj_orthogonal_projection IsSelfAdjoint.conj_orthogonalProjection
end IsSelfAdjoint
@@ -443,7 +443,7 @@ theorem eq_adjoint_iff_basis_right {ΞΉ : Type*} (b : Basis ΞΉ π F) (A : E β
A = LinearMap.adjoint B β β i x, βͺA x, b iβ« = βͺx, B (b i)β« := by
refine' β¨fun h x y => by rw [h, adjoint_inner_left], fun h => _β©
ext x
- refine' ext_inner_right_basis b fun i => by simp only [h i, adjoint_inner_left]
+ exact ext_inner_right_basis b fun i => by simp only [h i, adjoint_inner_left]
#align linear_map.eq_adjoint_iff_basis_right LinearMap.eq_adjoint_iff_basis_right
/-- `E ββ[π] E` is a star algebra with the adjoint as the star operation. -/
@@ -100,11 +100,11 @@ theorem adjointAux_adjointAux (A : E βL[π] F) : adjointAux (adjointAux A) =
@[simp]
theorem adjointAux_norm (A : E βL[π] F) : βadjointAux Aβ = βAβ := by
refine' le_antisymm _ _
- Β· refine' ContinuousLinearMap.op_norm_le_bound _ (norm_nonneg _) fun x => _
+ Β· refine' ContinuousLinearMap.opNorm_le_bound _ (norm_nonneg _) fun x => _
rw [adjointAux_apply, LinearIsometryEquiv.norm_map]
exact toSesqForm_apply_norm_le
Β· nth_rw 1 [β adjointAux_adjointAux A]
- refine' ContinuousLinearMap.op_norm_le_bound _ (norm_nonneg _) fun x => _
+ refine' ContinuousLinearMap.opNorm_le_bound _ (norm_nonneg _) fun x => _
rw [adjointAux_apply, LinearIsometryEquiv.norm_map]
exact toSesqForm_apply_norm_le
#align continuous_linear_map.adjoint_aux_norm ContinuousLinearMap.adjointAux_norm
@@ -226,14 +226,14 @@ theorem norm_adjoint_comp_self (A : E βL[π] F) :
βContinuousLinearMap.adjoint A βL Aβ = βAβ * βAβ := by
refine' le_antisymm _ _
Β· calc
- βAβ βL Aβ β€ βAβ β * βAβ := op_norm_comp_le _ _
+ βAβ βL Aβ β€ βAβ β * βAβ := opNorm_comp_le _ _
_ = βAβ * βAβ := by rw [LinearIsometryEquiv.norm_map]
Β· rw [β sq, β Real.sqrt_le_sqrt_iff (norm_nonneg _), Real.sqrt_sq (norm_nonneg _)]
- refine' op_norm_le_bound _ (Real.sqrt_nonneg _) fun x => _
+ refine' opNorm_le_bound _ (Real.sqrt_nonneg _) fun x => _
have :=
calc
re βͺ(Aβ βL A) x, xβ« β€ β(Aβ βL A) xβ * βxβ := re_inner_le_norm _ _
- _ β€ βAβ βL Aβ * βxβ * βxβ := mul_le_mul_of_nonneg_right (le_op_norm _ _) (norm_nonneg _)
+ _ β€ βAβ βL Aβ * βxβ * βxβ := mul_le_mul_of_nonneg_right (le_opNorm _ _) (norm_nonneg _)
calc
βA xβ = Real.sqrt (re βͺ(Aβ βL A) x, xβ«) := by rw [apply_norm_eq_sqrt_inner_adjoint_left]
_ β€ Real.sqrt (βAβ βL Aβ * βxβ * βxβ) := (Real.sqrt_le_sqrt this)
Clm
-> CLM
, Cle
-> CLE
(#10018)
Rename
Complex.equivRealProdClm
β Complex.equivRealProdCLM
;
CLE
?Complex.reClm
β Complex.reCLM
;Complex.imClm
β Complex.imCLM
;Complex.conjLie
β Complex.conjLIE
;Complex.conjCle
β Complex.conjCLE
;Complex.ofRealLi
β Complex.ofRealLI
;Complex.ofRealClm
β Complex.ofRealCLM
;fderivInnerClm
β fderivInnerCLM
;LinearPMap.adjointDomainMkClm
β LinearPMap.adjointDomainMkCLM
;LinearPMap.adjointDomainMkClmExtend
β LinearPMap.adjointDomainMkCLMExtend
;IsROrC.reClm
β IsROrC.reCLM
;IsROrC.imClm
β IsROrC.imCLM
;IsROrC.conjLie
β IsROrC.conjLIE
;IsROrC.conjCle
β IsROrC.conjCLE
;IsROrC.ofRealLi
β IsROrC.ofRealLI
;IsROrC.ofRealClm
β IsROrC.ofRealCLM
;MeasureTheory.condexpL1Clm
β MeasureTheory.condexpL1CLM
;algebraMapClm
β algebraMapCLM
;WeakDual.CharacterSpace.toClm
β WeakDual.CharacterSpace.toCLM
;BoundedContinuousFunction.evalClm
β BoundedContinuousFunction.evalCLM
;ContinuousMap.evalClm
β ContinuousMap.evalCLM
;TrivSqZeroExt.fstClm
β TrivSqZeroExt.fstClm
;TrivSqZeroExt.sndClm
β TrivSqZeroExt.sndCLM
;TrivSqZeroExt.inlClm
β TrivSqZeroExt.inlCLM
;TrivSqZeroExt.inrClm
β TrivSqZeroExt.inrCLM
and related theorems.
@@ -373,18 +373,18 @@ theorem adjoint_toContinuousLinearMap (A : E ββ[π] F) :
rfl
#align linear_map.adjoint_to_continuous_linear_map LinearMap.adjoint_toContinuousLinearMap
-theorem adjoint_eq_toClm_adjoint (A : E ββ[π] F) :
+theorem adjoint_eq_toCLM_adjoint (A : E ββ[π] F) :
haveI := FiniteDimensional.complete π E
haveI := FiniteDimensional.complete π F
LinearMap.adjoint A = ContinuousLinearMap.adjoint (LinearMap.toContinuousLinearMap A) :=
rfl
-#align linear_map.adjoint_eq_to_clm_adjoint LinearMap.adjoint_eq_toClm_adjoint
+#align linear_map.adjoint_eq_to_clm_adjoint LinearMap.adjoint_eq_toCLM_adjoint
/-- The fundamental property of the adjoint. -/
theorem adjoint_inner_left (A : E ββ[π] F) (x : E) (y : F) : βͺadjoint A y, xβ« = βͺy, A xβ« := by
haveI := FiniteDimensional.complete π E
haveI := FiniteDimensional.complete π F
- rw [β coe_toContinuousLinearMap A, adjoint_eq_toClm_adjoint]
+ rw [β coe_toContinuousLinearMap A, adjoint_eq_toCLM_adjoint]
exact ContinuousLinearMap.adjoint_inner_left _ x y
#align linear_map.adjoint_inner_left LinearMap.adjoint_inner_left
@@ -392,7 +392,7 @@ theorem adjoint_inner_left (A : E ββ[π] F) (x : E) (y : F) : βͺadjoint A
theorem adjoint_inner_right (A : E ββ[π] F) (x : E) (y : F) : βͺx, adjoint A yβ« = βͺA x, yβ« := by
haveI := FiniteDimensional.complete π E
haveI := FiniteDimensional.complete π F
- rw [β coe_toContinuousLinearMap A, adjoint_eq_toClm_adjoint]
+ rw [β coe_toContinuousLinearMap A, adjoint_eq_toCLM_adjoint]
exact ContinuousLinearMap.adjoint_inner_right _ x y
#align linear_map.adjoint_inner_right LinearMap.adjoint_inner_right
This adds the (unique) Cβ-norm on matrices Matrix n n π
with IsROrC π
within the scope Matrix.L2OpNorm
. This norm coincides with the operator norm induced by the βΒ² norm (i.e., the norm on Matrix m n π
obtained by pulling back the norm from EuclideanSpace π n βL[π] EuclideanSpace π m
). Where possible, we state results for rectangular matrices.
@@ -514,7 +514,7 @@ variable {m n : Type*} [Fintype m] [DecidableEq m] [Fintype n] [DecidableEq n]
variable [FiniteDimensional π E] [FiniteDimensional π F]
variable (vβ : OrthonormalBasis n π E) (vβ : OrthonormalBasis m π F)
-/- the linear map associated to the conjugate transpose of a matrix corresponding to two
+/-- The linear map associated to the conjugate transpose of a matrix corresponding to two
orthonormal bases is the adjoint of the linear map associated to the matrix. -/
lemma Matrix.toLin_conjTranspose (A : Matrix m n π) :
toLin vβ.toBasis vβ.toBasis Aα΄΄ = adjoint (toLin vβ.toBasis vβ.toBasis A) := by
norm_adjoint_comp_self
(#9569)
This is a non-square version of norm_star_mul_self
@@ -143,25 +143,25 @@ theorem adjoint_comp (A : F βL[π] G) (B : E βL[π] F) : (A βL B)β =
simp only [adjoint_inner_right, ContinuousLinearMap.coe_comp', Function.comp_apply]
#align continuous_linear_map.adjoint_comp ContinuousLinearMap.adjoint_comp
-theorem apply_norm_sq_eq_inner_adjoint_left (A : E βL[π] E) (x : E) :
- βA xβ ^ 2 = re βͺ(Aβ * A) x, xβ« := by
- have h : βͺ(Aβ * A) x, xβ« = βͺA x, A xβ« := by rw [β adjoint_inner_left]; rfl
+theorem apply_norm_sq_eq_inner_adjoint_left (A : E βL[π] F) (x : E) :
+ βA xβ ^ 2 = re βͺ(Aβ βL A) x, xβ« := by
+ have h : βͺ(Aβ βL A) x, xβ« = βͺA x, A xβ« := by rw [β adjoint_inner_left]; rfl
rw [h, β inner_self_eq_norm_sq (π := π) _]
#align continuous_linear_map.apply_norm_sq_eq_inner_adjoint_left ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_left
-theorem apply_norm_eq_sqrt_inner_adjoint_left (A : E βL[π] E) (x : E) :
- βA xβ = Real.sqrt (re βͺ(Aβ * A) x, xβ«) := by
+theorem apply_norm_eq_sqrt_inner_adjoint_left (A : E βL[π] F) (x : E) :
+ βA xβ = Real.sqrt (re βͺ(Aβ βL A) x, xβ«) := by
rw [β apply_norm_sq_eq_inner_adjoint_left, Real.sqrt_sq (norm_nonneg _)]
#align continuous_linear_map.apply_norm_eq_sqrt_inner_adjoint_left ContinuousLinearMap.apply_norm_eq_sqrt_inner_adjoint_left
-theorem apply_norm_sq_eq_inner_adjoint_right (A : E βL[π] E) (x : E) :
- βA xβ ^ 2 = re βͺx, (Aβ * A) xβ« := by
- have h : βͺx, (Aβ * A) xβ« = βͺA x, A xβ« := by rw [β adjoint_inner_right]; rfl
+theorem apply_norm_sq_eq_inner_adjoint_right (A : E βL[π] F) (x : E) :
+ βA xβ ^ 2 = re βͺx, (Aβ βL A) xβ« := by
+ have h : βͺx, (Aβ βL A) xβ« = βͺA x, A xβ« := by rw [β adjoint_inner_right]; rfl
rw [h, β inner_self_eq_norm_sq (π := π) _]
#align continuous_linear_map.apply_norm_sq_eq_inner_adjoint_right ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_right
-theorem apply_norm_eq_sqrt_inner_adjoint_right (A : E βL[π] E) (x : E) :
- βA xβ = Real.sqrt (re βͺx, (Aβ * A) xβ«) := by
+theorem apply_norm_eq_sqrt_inner_adjoint_right (A : E βL[π] F) (x : E) :
+ βA xβ = Real.sqrt (re βͺx, (Aβ βL A) xβ«) := by
rw [β apply_norm_sq_eq_inner_adjoint_right, Real.sqrt_sq (norm_nonneg _)]
#align continuous_linear_map.apply_norm_eq_sqrt_inner_adjoint_right ContinuousLinearMap.apply_norm_eq_sqrt_inner_adjoint_right
@@ -222,26 +222,27 @@ theorem isSelfAdjoint_iff' {A : E βL[π] E} : IsSelfAdjoint A β Continuous
Iff.rfl
#align continuous_linear_map.is_self_adjoint_iff' ContinuousLinearMap.isSelfAdjoint_iff'
-instance : CstarRing (E βL[π] E) :=
- β¨by
- intro A
- rw [star_eq_adjoint]
- refine' le_antisymm _ _
- Β· calc
- βAβ * Aβ β€ βAβ β * βAβ := op_norm_comp_le _ _
- _ = βAβ * βAβ := by rw [LinearIsometryEquiv.norm_map]
- Β· rw [β sq, β Real.sqrt_le_sqrt_iff (norm_nonneg _), Real.sqrt_sq (norm_nonneg _)]
- refine' op_norm_le_bound _ (Real.sqrt_nonneg _) fun x => _
- have :=
- calc
- re βͺ(Aβ * A) x, xβ« β€ β(Aβ * A) xβ * βxβ := re_inner_le_norm _ _
- _ β€ βAβ * Aβ * βxβ * βxβ := mul_le_mul_of_nonneg_right (le_op_norm _ _) (norm_nonneg _)
+theorem norm_adjoint_comp_self (A : E βL[π] F) :
+ βContinuousLinearMap.adjoint A βL Aβ = βAβ * βAβ := by
+ refine' le_antisymm _ _
+ Β· calc
+ βAβ βL Aβ β€ βAβ β * βAβ := op_norm_comp_le _ _
+ _ = βAβ * βAβ := by rw [LinearIsometryEquiv.norm_map]
+ Β· rw [β sq, β Real.sqrt_le_sqrt_iff (norm_nonneg _), Real.sqrt_sq (norm_nonneg _)]
+ refine' op_norm_le_bound _ (Real.sqrt_nonneg _) fun x => _
+ have :=
calc
- βA xβ = Real.sqrt (re βͺ(Aβ * A) x, xβ«) := by rw [apply_norm_eq_sqrt_inner_adjoint_left]
- _ β€ Real.sqrt (βAβ * Aβ * βxβ * βxβ) := (Real.sqrt_le_sqrt this)
- _ = Real.sqrt βAβ * Aβ * βxβ := by
- simp_rw [mul_assoc, Real.sqrt_mul (norm_nonneg _) (βxβ * βxβ),
- Real.sqrt_mul_self (norm_nonneg x)] β©
+ re βͺ(Aβ βL A) x, xβ« β€ β(Aβ βL A) xβ * βxβ := re_inner_le_norm _ _
+ _ β€ βAβ βL Aβ * βxβ * βxβ := mul_le_mul_of_nonneg_right (le_op_norm _ _) (norm_nonneg _)
+ calc
+ βA xβ = Real.sqrt (re βͺ(Aβ βL A) x, xβ«) := by rw [apply_norm_eq_sqrt_inner_adjoint_left]
+ _ β€ Real.sqrt (βAβ βL Aβ * βxβ * βxβ) := (Real.sqrt_le_sqrt this)
+ _ = Real.sqrt βAβ βL Aβ * βxβ := by
+ simp_rw [mul_assoc, Real.sqrt_mul (norm_nonneg _) (βxβ * βxβ),
+ Real.sqrt_mul_self (norm_nonneg x)]
+
+instance : CstarRing (E βL[π] E) where
+ norm_star_mul_self := norm_adjoint_comp_self _
theorem isAdjointPair_inner (A : E βL[π] F) :
LinearMap.IsAdjointPair (sesqFormOfInner : E ββ[π] E βββ[π] π)
@@ -505,20 +505,44 @@ theorem im_inner_adjoint_mul_self_eq_zero (T : E ββ[π] E) (x : E) :
end LinearMap
-namespace Matrix
+section Matrix
+
+open Matrix LinearMap
variable {m n : Type*} [Fintype m] [DecidableEq m] [Fintype n] [DecidableEq n]
+variable [FiniteDimensional π E] [FiniteDimensional π F]
+variable (vβ : OrthonormalBasis n π E) (vβ : OrthonormalBasis m π F)
+
+/- the linear map associated to the conjugate transpose of a matrix corresponding to two
+orthonormal bases is the adjoint of the linear map associated to the matrix. -/
+lemma Matrix.toLin_conjTranspose (A : Matrix m n π) :
+ toLin vβ.toBasis vβ.toBasis Aα΄΄ = adjoint (toLin vβ.toBasis vβ.toBasis A) := by
+ refine eq_adjoint_iff_basis vβ.toBasis vβ.toBasis _ _ |>.mpr fun i j β¦ ?_
+ simp_rw [toLin_self]
+ simp [sum_inner, inner_smul_left, inner_sum, inner_smul_right,
+ orthonormal_iff_ite.mp vβ.orthonormal, orthonormal_iff_ite.mp vβ.orthonormal]
+
+/-- The matrix associated to the adjoint of a linear map corresponding to two orthonormal bases
+is the conjugate tranpose of the matrix associated to the linear map. -/
+lemma LinearMap.toMatrix_adjoint (f : E ββ[π] F) :
+ toMatrix vβ.toBasis vβ.toBasis (adjoint f) = (toMatrix vβ.toBasis vβ.toBasis f)α΄΄ :=
+ toLin vβ.toBasis vβ.toBasis |>.injective <| by simp [toLin_conjTranspose]
+
+/-- The star algebra equivalence between the linear endomorphisms of finite-dimensional inner
+product space and square matrices induced by the choice of an orthonormal basis. -/
+@[simps]
+def LinearMap.toMatrixOrthonormal : (E ββ[π] E) βββ[π] Matrix n n π :=
+ { LinearMap.toMatrix vβ.toBasis vβ.toBasis with
+ map_mul' := LinearMap.toMatrix_mul vβ.toBasis
+ map_star' := LinearMap.toMatrix_adjoint vβ vβ }
open scoped ComplexConjugate
/-- The adjoint of the linear map associated to a matrix is the linear map associated to the
conjugate transpose of that matrix. -/
-theorem toEuclideanLin_conjTranspose_eq_adjoint (A : Matrix m n π) :
- Matrix.toEuclideanLin A.conjTranspose = LinearMap.adjoint (Matrix.toEuclideanLin A) := by
- rw [LinearMap.eq_adjoint_iff]
- intro x y
- simp_rw [EuclideanSpace.inner_eq_star_dotProduct, piLp_equiv_toEuclideanLin, toLin'_apply,
- star_mulVec, conjTranspose_conjTranspose, dotProduct_mulVec]
+theorem Matrix.toEuclideanLin_conjTranspose_eq_adjoint (A : Matrix m n π) :
+ Matrix.toEuclideanLin A.conjTranspose = LinearMap.adjoint (Matrix.toEuclideanLin A) :=
+ A.toLin_conjTranspose (EuclideanSpace.basisFun n π) (EuclideanSpace.basisFun m π)
#align matrix.to_euclidean_lin_conj_transpose_eq_adjoint Matrix.toEuclideanLin_conjTranspose_eq_adjoint
end Matrix
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -40,8 +40,6 @@ adjoint
-/
-local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
-
noncomputable section
open IsROrC
@@ -477,26 +477,13 @@ theorem isSymmetric_iff_isSelfAdjoint (A : E ββ[π] E) : IsSymmetric A β
exact eq_comm
#align linear_map.is_symmetric_iff_is_self_adjoint LinearMap.isSymmetric_iff_isSelfAdjoint
-section Real
-
-variable {E' : Type*} {F' : Type*}
-
-variable [NormedAddCommGroup E'] [NormedAddCommGroup F']
-
-variable [InnerProductSpace β E'] [InnerProductSpace β F']
-
-variable [FiniteDimensional β E'] [FiniteDimensional β F']
-
--- Todo: Generalize this to `IsROrC`.
-theorem isAdjointPair_inner (A : E' ββ[β] F') :
- IsAdjointPair (sesqFormOfInner : E' ββ[β] E' ββ[β] β) (sesqFormOfInner : F' ββ[β] F' ββ[β] β) A
+theorem isAdjointPair_inner (A : E ββ[π] F) :
+ IsAdjointPair (sesqFormOfInner : E ββ[π] E βββ[π] π) (sesqFormOfInner : F ββ[π] F βββ[π] π) A
(LinearMap.adjoint A) := by
intro x y
simp only [sesqFormOfInner_apply_apply, adjoint_inner_left]
#align linear_map.is_adjoint_pair_inner LinearMap.isAdjointPair_inner
-end Real
-
/-- The Gram operator Tβ T is symmetric. -/
theorem isSymmetric_adjoint_mul_self (T : E ββ[π] E) : IsSymmetric (LinearMap.adjoint T * T) := by
intro x y
@@ -245,26 +245,13 @@ instance : CstarRing (E βL[π] E) :=
simp_rw [mul_assoc, Real.sqrt_mul (norm_nonneg _) (βxβ * βxβ),
Real.sqrt_mul_self (norm_nonneg x)] β©
-section Real
-
-variable {E' : Type*} {F' : Type*}
-
-variable [NormedAddCommGroup E'] [NormedAddCommGroup F']
-
-variable [InnerProductSpace β E'] [InnerProductSpace β F']
-
-variable [CompleteSpace E'] [CompleteSpace F']
-
--- Todo: Generalize this to `IsROrC`.
-theorem isAdjointPair_inner (A : E' βL[β] F') :
- LinearMap.IsAdjointPair (sesqFormOfInner : E' ββ[β] E' ββ[β] β)
- (sesqFormOfInner : F' ββ[β] F' ββ[β] β) A (Aβ ) := by
+theorem isAdjointPair_inner (A : E βL[π] F) :
+ LinearMap.IsAdjointPair (sesqFormOfInner : E ββ[π] E βββ[π] π)
+ (sesqFormOfInner : F ββ[π] F βββ[π] π) A (Aβ ) := by
intro x y
simp only [sesqFormOfInner_apply_apply, adjoint_inner_left, coe_coe]
#align continuous_linear_map.is_adjoint_pair_inner ContinuousLinearMap.isAdjointPair_inner
-end Real
-
end ContinuousLinearMap
/-! ### Self-adjoint operators -/
Dual
reducible (#6998)
Following LinearAlgebra.Dual
this makes NormedSpace.Dual
reducible.
@@ -65,10 +65,12 @@ namespace ContinuousLinearMap
variable [CompleteSpace E] [CompleteSpace G]
+-- Note: made noncomputable to stop excess compilation
+-- leanprover-community/mathlib4#7103
/-- The adjoint, as a continuous conjugate-linear map. This is only meant as an auxiliary
definition for the main definition `adjoint`, where this is bundled as a conjugate-linear isometric
equivalence. -/
-def adjointAux : (E βL[π] F) βLβ[π] F βL[π] E :=
+noncomputable def adjointAux : (E βL[π] F) βLβ[π] F βL[π] E :=
(ContinuousLinearMap.compSL _ _ _ _ _ ((toDual π E).symm : NormedSpace.Dual π E βLβ[π] E)).comp
(toSesqForm : (E βL[π] F) βL[π] F βLβ[π] NormedSpace.Dual π E)
#align continuous_linear_map.adjoint_aux ContinuousLinearMap.adjointAux
@@ -222,7 +222,6 @@ theorem isSelfAdjoint_iff' {A : E βL[π] E} : IsSelfAdjoint A β Continuous
Iff.rfl
#align continuous_linear_map.is_self_adjoint_iff' ContinuousLinearMap.isSelfAdjoint_iff'
-set_option maxHeartbeats 300000 in -- Porting note: Added to prevent timeout.
instance : CstarRing (E βL[π] E) :=
β¨by
intro A
FiniteDimensional.complete
, Submodule.complete_of_finiteDimensional
from a
normed space over π
to a uniform additive commutative group that is a TVS over π
.Submodule.closed_of_finiteDimensional
, LinearMap.closedEmbedding_of_injective
,
closedEmbedding_smul_left
isClosedMap_smul_left
, and
ContinuousLinearMap.exists_right_inverse_of_surjective
from a normed space to a TVS.finiteDimensional_of_isCompact_closed_ballβ
to
finiteDimensional_of_isCompact_closedBallβ
.Co-authored-by: ADedecker <anatolededecker@gmail.com>
@@ -356,48 +356,59 @@ namespace LinearMap
variable [FiniteDimensional π E] [FiniteDimensional π F] [FiniteDimensional π G]
-section synthOrder
-
-/- porting note: Lean correctly determines that there is no good synthesization order for this
-instance, but in this case it is only a local instance with low priority so we circumvent the
-check. In addition, note that this instance is not actually needed for the *statement* of
-`LinearMap.adjoint`. -/
-set_option synthInstance.checkSynthOrder false
-attribute [local instance 20] FiniteDimensional.complete
+/- Porting note: Lean can't use `FiniteDimensional.complete` since it was generalized to topological
+vector spaces. Use local instances instead. -/
/-- The adjoint of an operator from the finite-dimensional inner product space `E` to the
finite-dimensional inner product space `F`. -/
def adjoint : (E ββ[π] F) βββ[π] F ββ[π] E :=
+ have := FiniteDimensional.complete π E
+ have := FiniteDimensional.complete π F
+ /- Note: Instead of the two instances above, the following works:
+ ```
+ have := FiniteDimensional.complete π
+ have := FiniteDimensional.complete π
+ ```
+ But removing one of the `have`s makes it fail. The reason is that `E` and `F` don't live
+ in the same universe, so the first `have` can no longer be used for `F` after its universe
+ metavariable has been assigned to that of `E`!
+ -/
((LinearMap.toContinuousLinearMap : (E ββ[π] F) ββ[π] E βL[π] F).trans
ContinuousLinearMap.adjoint.toLinearEquiv).trans
LinearMap.toContinuousLinearMap.symm
#align linear_map.adjoint LinearMap.adjoint
theorem adjoint_toContinuousLinearMap (A : E ββ[π] F) :
+ haveI := FiniteDimensional.complete π E
+ haveI := FiniteDimensional.complete π F
LinearMap.toContinuousLinearMap (LinearMap.adjoint A) =
ContinuousLinearMap.adjoint (LinearMap.toContinuousLinearMap A) :=
rfl
#align linear_map.adjoint_to_continuous_linear_map LinearMap.adjoint_toContinuousLinearMap
theorem adjoint_eq_toClm_adjoint (A : E ββ[π] F) :
+ haveI := FiniteDimensional.complete π E
+ haveI := FiniteDimensional.complete π F
LinearMap.adjoint A = ContinuousLinearMap.adjoint (LinearMap.toContinuousLinearMap A) :=
rfl
#align linear_map.adjoint_eq_to_clm_adjoint LinearMap.adjoint_eq_toClm_adjoint
/-- The fundamental property of the adjoint. -/
theorem adjoint_inner_left (A : E ββ[π] F) (x : E) (y : F) : βͺadjoint A y, xβ« = βͺy, A xβ« := by
+ haveI := FiniteDimensional.complete π E
+ haveI := FiniteDimensional.complete π F
rw [β coe_toContinuousLinearMap A, adjoint_eq_toClm_adjoint]
exact ContinuousLinearMap.adjoint_inner_left _ x y
#align linear_map.adjoint_inner_left LinearMap.adjoint_inner_left
/-- The fundamental property of the adjoint. -/
theorem adjoint_inner_right (A : E ββ[π] F) (x : E) (y : F) : βͺx, adjoint A yβ« = βͺA x, yβ« := by
+ haveI := FiniteDimensional.complete π E
+ haveI := FiniteDimensional.complete π F
rw [β coe_toContinuousLinearMap A, adjoint_eq_toClm_adjoint]
exact ContinuousLinearMap.adjoint_inner_right _ x y
#align linear_map.adjoint_inner_right LinearMap.adjoint_inner_right
-end synthOrder
-
/-- The adjoint is involutive. -/
@[simp]
theorem adjoint_adjoint (A : E ββ[π] F) : LinearMap.adjoint (LinearMap.adjoint A) = A := by
Typically a * operation on a mathematical structure R
equipped with a multiplication is an involutive anti-automorphism i.e.
β r s : R, star (r * s) = star s * star r
Currently mathlib defines a class StarSemigroup
to be a semigroup satisfying this property. However, the requirement for the multiplication to be associative is unnecessarily restrictive. There are important classes of star-algebra which are not associative (e.g. JB*-algebras).
This PR removes the requirement for a StarSemigroup
to be a semigroup, merely requiring it to have a multiplication.
I've changed the name from StarSemigroup
to StarMul
since it's no longer a semigroup.
Previously opened as a mathlib PR https://github.com/leanprover-community/mathlib/pull/17949
Co-authored-by: Christopher Hoskin <mans0954@users.noreply.github.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -204,7 +204,7 @@ instance : Star (E βL[π] E) :=
instance : InvolutiveStar (E βL[π] E) :=
β¨adjoint_adjointβ©
-instance : StarSemigroup (E βL[π] E) :=
+instance : StarMul (E βL[π] E) :=
β¨adjoint_compβ©
instance : StarRing (E βL[π] E) :=
@@ -455,7 +455,7 @@ instance : Star (E ββ[π] E) :=
instance : InvolutiveStar (E ββ[π] E) :=
β¨adjoint_adjointβ©
-instance : StarSemigroup (E ββ[π] E) :=
+instance : StarMul (E ββ[π] E) :=
β¨adjoint_compβ©
instance : StarRing (E ββ[π] E) :=
@@ -40,6 +40,7 @@ adjoint
-/
+local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
noncomputable section
@@ -142,9 +143,8 @@ theorem adjoint_comp (A : F βL[π] G) (B : E βL[π] F) : (A βL B)β =
simp only [adjoint_inner_right, ContinuousLinearMap.coe_comp', Function.comp_apply]
#align continuous_linear_map.adjoint_comp ContinuousLinearMap.adjoint_comp
--- Porting note: Originally `βA xβ ^ 2`. But this didn't work because the exponent was `2 : β`.
theorem apply_norm_sq_eq_inner_adjoint_left (A : E βL[π] E) (x : E) :
- HPow.hPow βA xβ 2 = re βͺ(Aβ * A) x, xβ« := by
+ βA xβ ^ 2 = re βͺ(Aβ * A) x, xβ« := by
have h : βͺ(Aβ * A) x, xβ« = βͺA x, A xβ« := by rw [β adjoint_inner_left]; rfl
rw [h, β inner_self_eq_norm_sq (π := π) _]
#align continuous_linear_map.apply_norm_sq_eq_inner_adjoint_left ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_left
@@ -154,9 +154,8 @@ theorem apply_norm_eq_sqrt_inner_adjoint_left (A : E βL[π] E) (x : E) :
rw [β apply_norm_sq_eq_inner_adjoint_left, Real.sqrt_sq (norm_nonneg _)]
#align continuous_linear_map.apply_norm_eq_sqrt_inner_adjoint_left ContinuousLinearMap.apply_norm_eq_sqrt_inner_adjoint_left
--- Porting note: Originally `βA xβ ^ 2`. But this didn't work because the exponent was `2 : β`.
theorem apply_norm_sq_eq_inner_adjoint_right (A : E βL[π] E) (x : E) :
- HPow.hPow βA xβ 2 = re βͺx, (Aβ * A) xβ« := by
+ βA xβ ^ 2 = re βͺx, (Aβ * A) xβ« := by
have h : βͺx, (Aβ * A) xβ« = βͺA x, A xβ« := by rw [β adjoint_inner_right]; rfl
rw [h, β inner_self_eq_norm_sq (π := π) _]
#align continuous_linear_map.apply_norm_sq_eq_inner_adjoint_right ContinuousLinearMap.apply_norm_sq_eq_inner_adjoint_right
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -47,7 +47,7 @@ open IsROrC
open scoped ComplexConjugate
-variable {π E F G : Type _} [IsROrC π]
+variable {π E F G : Type*} [IsROrC π]
variable [NormedAddCommGroup E] [NormedAddCommGroup F] [NormedAddCommGroup G]
@@ -247,7 +247,7 @@ instance : CstarRing (E βL[π] E) :=
section Real
-variable {E' : Type _} {F' : Type _}
+variable {E' : Type*} {F' : Type*}
variable [NormedAddCommGroup E'] [NormedAddCommGroup F']
@@ -428,7 +428,7 @@ theorem eq_adjoint_iff (A : E ββ[π] F) (B : F ββ[π] E) :
/-- The adjoint is unique: a map `A` is the adjoint of `B` iff it satisfies `βͺA x, yβ« = βͺx, B yβ«`
for all basis vectors `x` and `y`. -/
-theorem eq_adjoint_iff_basis {ΞΉβ : Type _} {ΞΉβ : Type _} (bβ : Basis ΞΉβ π E) (bβ : Basis ΞΉβ π F)
+theorem eq_adjoint_iff_basis {ΞΉβ : Type*} {ΞΉβ : Type*} (bβ : Basis ΞΉβ π E) (bβ : Basis ΞΉβ π F)
(A : E ββ[π] F) (B : F ββ[π] E) :
A = LinearMap.adjoint B β β (iβ : ΞΉβ) (iβ : ΞΉβ), βͺA (bβ iβ), bβ iββ« = βͺbβ iβ, B (bβ iβ)β« := by
refine' β¨fun h x y => by rw [h, adjoint_inner_left], fun h => _β©
@@ -436,13 +436,13 @@ theorem eq_adjoint_iff_basis {ΞΉβ : Type _} {ΞΉβ : Type _} (bβ : Basis ΞΉ
exact ext_inner_right_basis bβ fun iβ => by simp only [adjoint_inner_left, h iβ iβ]
#align linear_map.eq_adjoint_iff_basis LinearMap.eq_adjoint_iff_basis
-theorem eq_adjoint_iff_basis_left {ΞΉ : Type _} (b : Basis ΞΉ π E) (A : E ββ[π] F) (B : F ββ[π] E) :
+theorem eq_adjoint_iff_basis_left {ΞΉ : Type*} (b : Basis ΞΉ π E) (A : E ββ[π] F) (B : F ββ[π] E) :
A = LinearMap.adjoint B β β i y, βͺA (b i), yβ« = βͺb i, B yβ« := by
refine' β¨fun h x y => by rw [h, adjoint_inner_left], fun h => Basis.ext b fun i => _β©
exact ext_inner_right π fun y => by simp only [h i, adjoint_inner_left]
#align linear_map.eq_adjoint_iff_basis_left LinearMap.eq_adjoint_iff_basis_left
-theorem eq_adjoint_iff_basis_right {ΞΉ : Type _} (b : Basis ΞΉ π F) (A : E ββ[π] F) (B : F ββ[π] E) :
+theorem eq_adjoint_iff_basis_right {ΞΉ : Type*} (b : Basis ΞΉ π F) (A : E ββ[π] F) (B : F ββ[π] E) :
A = LinearMap.adjoint B β β i x, βͺA x, b iβ« = βͺx, B (b i)β« := by
refine' β¨fun h x y => by rw [h, adjoint_inner_left], fun h => _β©
ext x
@@ -481,7 +481,7 @@ theorem isSymmetric_iff_isSelfAdjoint (A : E ββ[π] E) : IsSymmetric A β
section Real
-variable {E' : Type _} {F' : Type _}
+variable {E' : Type*} {F' : Type*}
variable [NormedAddCommGroup E'] [NormedAddCommGroup F']
@@ -524,7 +524,7 @@ end LinearMap
namespace Matrix
-variable {m n : Type _} [Fintype m] [DecidableEq m] [Fintype n] [DecidableEq n]
+variable {m n : Type*} [Fintype m] [DecidableEq m] [Fintype n] [DecidableEq n]
open scoped ComplexConjugate
@@ -2,15 +2,12 @@
Copyright (c) 2021 FrΓ©dΓ©ric Dupuis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: FrΓ©dΓ©ric Dupuis, Heather Macbeth
-
-! This file was ported from Lean 3 source module analysis.inner_product_space.adjoint
-! leanprover-community/mathlib commit 46b633fd842bef9469441c0209906f6dddd2b4f5
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.InnerProductSpace.Dual
import Mathlib.Analysis.InnerProductSpace.PiL2
+#align_import analysis.inner_product_space.adjoint from "leanprover-community/mathlib"@"46b633fd842bef9469441c0209906f6dddd2b4f5"
+
/-!
# Adjoint of operators on Hilbert spaces
at
and goals (#5387)
Changes are of the form
some_tactic at hβ’
-> some_tactic at h β’
some_tactic at h
-> some_tactic at h
@@ -292,7 +292,7 @@ theorem isSymmetric {A : E βL[π] E} (hA : IsSelfAdjoint A) : (A : E ββ[
/-- Conjugating preserves self-adjointness. -/
theorem conj_adjoint {T : E βL[π] E} (hT : IsSelfAdjoint T) (S : E βL[π] F) :
IsSelfAdjoint (S βL T βL ContinuousLinearMap.adjoint S) := by
- rw [isSelfAdjoint_iff'] at hTβ’
+ rw [isSelfAdjoint_iff'] at hT β’
simp only [hT, adjoint_comp, adjoint_adjoint]
exact ContinuousLinearMap.comp_assoc _ _ _
#align is_self_adjoint.conj_adjoint IsSelfAdjoint.conj_adjoint
@@ -300,7 +300,7 @@ theorem conj_adjoint {T : E βL[π] E} (hT : IsSelfAdjoint T) (S : E βL[
/-- Conjugating preserves self-adjointness. -/
theorem adjoint_conj {T : E βL[π] E} (hT : IsSelfAdjoint T) (S : F βL[π] E) :
IsSelfAdjoint (ContinuousLinearMap.adjoint S βL T βL S) := by
- rw [isSelfAdjoint_iff'] at hTβ’
+ rw [isSelfAdjoint_iff'] at hT β’
simp only [hT, adjoint_comp, adjoint_adjoint]
exact ContinuousLinearMap.comp_assoc _ _ _
#align is_self_adjoint.adjoint_conj IsSelfAdjoint.adjoint_conj
@@ -239,7 +239,7 @@ instance : CstarRing (E βL[π] E) :=
refine' op_norm_le_bound _ (Real.sqrt_nonneg _) fun x => _
have :=
calc
- re βͺ(Aβ * A) x, xβ« β€ β(Aβ * A) xβ * βxβ := re_inner_le_norm π _ _
+ re βͺ(Aβ * A) x, xβ« β€ β(Aβ * A) xβ * βxβ := re_inner_le_norm _ _
_ β€ βAβ * Aβ * βxβ * βxβ := mul_le_mul_of_nonneg_right (le_op_norm _ _) (norm_nonneg _)
calc
βA xβ = Real.sqrt (re βͺ(Aβ * A) x, xβ«) := by rw [apply_norm_eq_sqrt_inner_adjoint_left]
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file