Skip to content

Commit

Permalink
feat (NormedSpace.Dual): make Dual reducible (#6998)
Browse files Browse the repository at this point in the history
Following `LinearAlgebra.Dual` this makes `NormedSpace.Dual` reducible.
  • Loading branch information
mattrobball committed Sep 11, 2023
1 parent eae0fe5 commit a4810ea
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 38 deletions.
4 changes: 3 additions & 1 deletion Mathlib/Analysis/InnerProductSpace/Adjoint.lean
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion Mathlib/Analysis/InnerProductSpace/Dual.lean
Expand Up @@ -174,7 +174,8 @@ variable (B : E β†’L⋆[π•œ] E β†’L[π•œ] π•œ)

@[simp]
theorem continuousLinearMapOfBilin_apply (v w : E) : βŸͺBβ™― v, w⟫ = B v w := by
simp [continuousLinearMapOfBilin]
rw [continuousLinearMapOfBilin, coe_comp', ContinuousLinearEquiv.coe_coe,
LinearIsometryEquiv.coe_toContinuousLinearEquiv, Function.comp_apply, toDual_symm_apply]
#align inner_product_space.continuous_linear_map_of_bilin_apply InnerProductSpace.continuousLinearMapOfBilin_apply

theorem unique_continuousLinearMapOfBilin {v f : E} (is_lax_milgram : βˆ€ w, βŸͺf, w⟫ = B v w) :
Expand Down
9 changes: 0 additions & 9 deletions Mathlib/Analysis/InnerProductSpace/LinearPMap.lean
Expand Up @@ -135,19 +135,10 @@ def adjointAux : T.adjointDomain β†’β‚—[π•œ] E where
hT.eq_of_inner_left fun _ => by
simp only [inner_add_left, Submodule.coe_add, InnerProductSpace.toDual_symm_apply,
adjointDomainMkClmExtend_apply]
-- Porting note(https://github.com/leanprover-community/mathlib4/issues/5026):
-- mathlib3 was finished here
rw [adjointDomainMkClmExtend_apply, adjointDomainMkClmExtend_apply,
adjointDomainMkClmExtend_apply]
simp only [AddSubmonoid.coe_add, Submodule.coe_toAddSubmonoid, inner_add_left]
map_smul' _ _ :=
hT.eq_of_inner_left fun _ => by
simp only [inner_smul_left, Submodule.coe_smul_of_tower, RingHom.id_apply,
InnerProductSpace.toDual_symm_apply, adjointDomainMkClmExtend_apply]
-- Porting note(https://github.com/leanprover-community/mathlib4/issues/5026):
-- mathlib3 was finished here
rw [adjointDomainMkClmExtend_apply, adjointDomainMkClmExtend_apply]
simp only [Submodule.coe_smul_of_tower, inner_smul_left]
#align linear_pmap.adjoint_aux LinearPMap.adjointAux

theorem adjointAux_inner (y : T.adjointDomain) (x : T.domain) :
Expand Down
33 changes: 7 additions & 26 deletions Mathlib/Analysis/NormedSpace/Dual.lean
Expand Up @@ -53,35 +53,16 @@ variable (E : Type*) [SeminormedAddCommGroup E] [NormedSpace π•œ E]
variable (F : Type*) [NormedAddCommGroup F] [NormedSpace π•œ F]

/-- The topological dual of a seminormed space `E`. -/
def Dual :=
E β†’L[π•œ] π•œ
abbrev Dual : Type _ := E β†’L[π•œ] π•œ
#align normed_space.dual NormedSpace.Dual

-- Porting note: added manually
section DerivedInstances
-- TODO: helper instance for elaboration of inclusionInDoubleDual_norm_eq until
-- leanprover/lean4#2522 is resolved; remove once fixed
instance : NormedSpace π•œ (Dual π•œ E) := inferInstance

instance : Inhabited (Dual π•œ E) :=
inferInstanceAs (Inhabited (E β†’L[π•œ] π•œ))

instance : SeminormedAddCommGroup (Dual π•œ E) :=
inferInstanceAs (SeminormedAddCommGroup (E β†’L[π•œ] π•œ))

instance : NormedSpace π•œ (Dual π•œ E) :=
inferInstanceAs (NormedSpace π•œ (E β†’L[π•œ] π•œ))

end DerivedInstances

instance : ContinuousLinearMapClass (Dual π•œ E) π•œ E π•œ :=
ContinuousLinearMap.continuousSemilinearMapClass

instance : CoeFun (Dual π•œ E) fun _ => E β†’ π•œ :=
FunLike.hasCoeToFun

instance : NormedAddCommGroup (Dual π•œ F) :=
ContinuousLinearMap.toNormedAddCommGroup

instance [FiniteDimensional π•œ E] : FiniteDimensional π•œ (Dual π•œ E) :=
inferInstanceAs (FiniteDimensional π•œ (E β†’L[π•œ] π•œ))
-- TODO: helper instance for elaboration of inclusionInDoubleDual_norm_le until
-- leanprover/lean4#2522 is resolved; remove once fixed
instance : SeminormedAddCommGroup (Dual π•œ E) := inferInstance

/-- The inclusion of a normed space in its double (topological) dual, considered
as a bounded linear map. -/
Expand Down
2 changes: 1 addition & 1 deletion docs/undergrad.yaml
Expand Up @@ -434,7 +434,7 @@ Topology:
Hilbert spaces:
Hilbert projection theorem: 'exists_norm_eq_iInf_of_complete_convex'
orthogonal projection onto closed vector subspaces: 'orthogonalProjection'
dual space: 'NormedSpace.instNormedSpaceDualToNormedFieldInstSeminormedAddCommGroupDual'
dual space: 'NormedSpace.Dual'
Riesz representation theorem: 'InnerProductSpace.toDual'
inner product space $l^2$: 'lp.instInnerProductSpace'
its completeness: 'lp.instCompleteSpace'
Expand Down

0 comments on commit a4810ea

Please sign in to comment.