:: Dual Spaces and Hahn-Banach's Theorem
:: by Keiko Narita , Noboru Endou and Yasunari Shidama
::
:: Received March 31, 2014
:: Copyright (c) 2014-2021 Association of Mizar Users
:: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.
environ
vocabularies RLSUB_1, HAHNBAN, HAHNBAN1, UNIALG_1, MONOID_0, DUALSP01,
RLVECT_1, ARYTM_1, RELAT_1, FUNCT_1, RSSPACE, RSSPACE3, VECTSP_1, REAL_1,
TARSKI, MSSUBFAM, STRUCT_0, REALSET1, SEQ_1, FUNCOP_1, FCONT_1, NORMSP_0,
SEQ_2, FUNCSDOM, LOPBAN_1, ORDINAL2, ARYTM_3, ALGSTR_0, NORMSP_1,
FUNCT_2, PRE_TOPC, SUBSET_1, ZFMISC_1, NUMBERS, SEQ_4, XBOOLE_0, CARD_1,
SUPINF_2, MESFUNC1, COMPLEX1, XXREAL_0, XXREAL_2, NAT_1, REWRITE1,
VALUED_1, METRIC_1, RELAT_2, ASYMPT_1, FUNCT_7;
notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, RELAT_1, FUNCT_1, ORDINAL1,
FUNCT_2, FUNCOP_1, REALSET1, NUMBERS, XCMPLX_0, XXREAL_0, XXREAL_2,
XREAL_0, NAT_1, COMPLEX1, VALUED_1, SEQ_1, SEQ_2, SEQ_4, STRUCT_0,
ALGSTR_0, NORMSP_0, NORMSP_1, PRE_TOPC, RLVECT_1, RLSUB_1, VECTSP_1,
FUNCSDOM, MONOID_0, HAHNBAN, RSSPACE, RSSPACE3, LOPBAN_1, HAHNBAN1;
constructors REAL_1, REALSET1, RSSPACE3, BINOP_2, RLSUB_1, LOPBAN_2, SEQ_1,
SEQ_2, SEQ_4, HAHNBAN, HAHNBAN1, MONOID_0, COMSEQ_2;
registrations STRUCT_0, XREAL_0, ALGSTR_0, NUMBERS, ORDINAL1, MEMBERED,
RELAT_1, XXREAL_0, VALUED_0, MONOID_0, RLVECT_1, VECTSP_1, FUNCT_2,
VALUED_1, FUNCOP_1, SEQ_4, HAHNBAN, HAHNBAN1, RELSET_1, FUNCT_1,
XCMPLX_0, NORMSP_0, NAT_1, NORMSP_1, SEQ_2;
requirements NUMERALS, BOOLE, SUBSET, REAL, ARITHM;
begin :: Dual Spaces of Real Linear Spaces
reserve V for non empty RealLinearSpace;
definition
let X be RealLinearSpace;
func MultF_Real*(X) -> Function of
[:the carrier of F_Real,the carrier of X:], the carrier of X equals
:: DUALSP01:def 1
the Mult of X;
end;
theorem :: DUALSP01:1
for X be RealLinearSpace holds
ModuleStr (# the carrier of X, the addF of X, the ZeroF of X,
MultF_Real*(X) #)
is VectSp of F_Real;
definition
let X be RealLinearSpace;
func RLSp2RVSp X ->VectSp of F_Real equals
:: DUALSP01:def 2
ModuleStr (# the carrier of X, the addF of X, the ZeroF of X,
MultF_Real*(X) #);
end;
definition
let X be ModuleStr over F_Real;
func MultReal*(X)
-> Function of [:REAL,the carrier of X:], the carrier of X equals
:: DUALSP01:def 3
the lmult of X;
end;
theorem :: DUALSP01:2
for X be VectSp of F_Real holds
RLSStruct (# the carrier of X, the ZeroF of X,
the addF of X, MultReal*(X) #) is RealLinearSpace;
definition
let X be VectSp of F_Real;
func RVSp2RLSp X -> RealLinearSpace equals
:: DUALSP01:def 4
RLSStruct (# the carrier of X, the ZeroF of X, the addF of X,
MultReal*(X) #);
end;
theorem :: DUALSP01:3
for X be RealLinearSpace, v,w be Element of X,
v1,w1 be Element of RLSp2RVSp X st
v=v1 & w=w1 holds v+w=v1+w1 & v-w = v1-w1;
theorem :: DUALSP01:4
for X be VectSp of F_Real, v,w be Element of X,
v1,w1 be Element of RVSp2RLSp X st
v=v1 & w=w1 holds v+w = v1+w1 & v-w = v1-w1;
definition
let V be non empty RealLinearSpace;
func V*' -> strict non empty RealLinearSpace means
:: DUALSP01:def 5
ex X be non empty VectSp of F_Real
st X = RLSp2RVSp V & it= RVSp2RLSp X*';
end;
theorem :: DUALSP01:5
for x be object holds
x in the carrier of V*' iff x is linear-Functional of V;
registration
let V be non empty RealLinearSpace;
cluster V*' -> constituted-Functions;
end;
definition
let V be non empty RealLinearSpace;
let f be Element of V*';
let v be VECTOR of V;
redefine func f.v -> Element of REAL;
end;
theorem :: DUALSP01:6
for V be non empty RealLinearSpace, f,g,h be VECTOR of V*' holds
h = f+g iff for x be VECTOR of V holds h.x = f.x + g.x;
theorem :: DUALSP01:7
for V be non empty RealLinearSpace, f,h be VECTOR of V*', a be Real
holds h = a*f iff for x be VECTOR of V holds h.x = a * f.x;
theorem :: DUALSP01:8
for V be non empty RealLinearSpace holds 0.(V*') = (the carrier of V) --> 0;
theorem :: DUALSP01:9
for X be RealLinearSpace holds
(the carrier of X) --> 0 is linear-Functional of X;
definition
let X be RealLinearSpace;
func LinearFunctionals X -> Subset of RealVectSpace(the carrier of X) means
:: DUALSP01:def 6
for x be object holds x in it iff x is linear-Functional of X;
end;
registration
let X be RealNormSpace;
cluster LinearFunctionals X -> non empty;
end;
registration
let X be RealLinearSpace;
cluster LinearFunctionals X -> non empty functional;
end;
theorem :: DUALSP01:10
for X be RealLinearSpace holds LinearFunctionals X is linearly-closed;
theorem :: DUALSP01:11
for X be RealLinearSpace holds
RLSStruct (# LinearFunctionals X,
Zero_(LinearFunctionals X, RealVectSpace(the carrier of X)),
Add_(LinearFunctionals X, RealVectSpace(the carrier of X)),
Mult_(LinearFunctionals X, RealVectSpace(the carrier of X)) #)
is Subspace of RealVectSpace(the carrier of X);
registration
let X be RealLinearSpace;
cluster RLSStruct (# LinearFunctionals X,
Zero_(LinearFunctionals X, RealVectSpace(the carrier of X)),
Add_(LinearFunctionals X, RealVectSpace(the carrier of X)),
Mult_(LinearFunctionals X, RealVectSpace(the carrier of X)) #)
-> Abelian add-associative right_zeroed right_complementable
scalar-distributive vector-distributive scalar-associative scalar-unital;
end;
definition
let X be RealLinearSpace;
func X*' -> strict RealLinearSpace equals
:: DUALSP01:def 7
RLSStruct (# LinearFunctionals X,
Zero_(LinearFunctionals X, RealVectSpace(the carrier of X)),
Add_(LinearFunctionals X, RealVectSpace(the carrier of X)),
Mult_(LinearFunctionals X, RealVectSpace(the carrier of X)) #);
end;
registration
let X be RealLinearSpace;
cluster X*' -> constituted-Functions;
end;
definition
let X be RealLinearSpace;
let f be Element of X*';
let v be VECTOR of X;
redefine func f.v -> Element of REAL;
end;
theorem :: DUALSP01:12
for X be RealLinearSpace, f,g,h be VECTOR of X*' holds
h = f+g iff for x be VECTOR of X holds h.x = f.x + g.x;
theorem :: DUALSP01:13
for X be RealLinearSpace, f,h be VECTOR of X*', a be Real
holds h = a*f iff for x be VECTOR of X holds h.x = a * f.x;
theorem :: DUALSP01:14
for X be RealLinearSpace holds 0.(X*') = (the carrier of X) --> 0;
begin :: Dual Spaces of Real Normed Spaces
reserve S for Real_Sequence;
reserve k,n,m,m1 for Nat;
reserve g,h,r,x for Real;
definition
let S be Real_Sequence;
let x be Real;
func S - x -> Real_Sequence means
:: DUALSP01:def 8
for n holds it.n = S.n - x;
end;
theorem :: DUALSP01:15
S is convergent implies S - x is convergent & lim (S-x) = (lim S) - x;
definition
let X be RealNormSpace;
let IT be Functional of X;
attr IT is Lipschitzian means
:: DUALSP01:def 9
ex K be Real st 0 <= K &
for x be VECTOR of X holds |. IT.x .| <= K * ||. x .||;
end;
theorem :: DUALSP01:16
for X be RealNormSpace, f be Functional of X st
(for x be VECTOR of X holds f.x=0) holds f is Lipschitzian;
registration
let X be RealNormSpace;
cluster Lipschitzian for linear-Functional of X;
end;
definition
let X be RealNormSpace;
func BoundedLinearFunctionals X -> Subset of X*' means
:: DUALSP01:def 10
for x be set holds x in it
iff x is Lipschitzian linear-Functional of X;
end;
registration
let X be RealNormSpace;
cluster BoundedLinearFunctionals X -> non empty;
end;
theorem :: DUALSP01:17
for X be RealNormSpace holds BoundedLinearFunctionals X is linearly-closed;
theorem :: DUALSP01:18
for X be RealNormSpace holds
RLSStruct (# BoundedLinearFunctionals X,
Zero_(BoundedLinearFunctionals X, X*'),
Add_(BoundedLinearFunctionals X, X*'),
Mult_(BoundedLinearFunctionals X, X*') #) is Subspace of X*';
registration
let X be RealNormSpace;
cluster RLSStruct (# BoundedLinearFunctionals X,
Zero_(BoundedLinearFunctionals X, X*'),
Add_(BoundedLinearFunctionals X, X*'),
Mult_(BoundedLinearFunctionals X, X*') #)
-> Abelian add-associative right_zeroed right_complementable
vector-distributive scalar-distributive scalar-associative
scalar-unital;
end;
definition
let X be RealNormSpace;
func R_VectorSpace_of_BoundedLinearFunctionals X ->
strict RealLinearSpace equals
:: DUALSP01:def 11
RLSStruct (# BoundedLinearFunctionals X,
Zero_(BoundedLinearFunctionals X, X*'),
Add_(BoundedLinearFunctionals X, X*'),
Mult_(BoundedLinearFunctionals X, X*') #);
end;
registration
let X be RealNormSpace;
cluster -> Function-like Relation-like for Element of
R_VectorSpace_of_BoundedLinearFunctionals X;
end;
definition
let X be RealNormSpace;
let f be Element of R_VectorSpace_of_BoundedLinearFunctionals X;
let v be VECTOR of X;
redefine func f.v -> Element of REAL;
end;
theorem :: DUALSP01:19
for X be RealNormSpace,
f,g,h be VECTOR of R_VectorSpace_of_BoundedLinearFunctionals X
holds h = f+g iff for x be VECTOR of X holds h.x = f.x + g.x;
theorem :: DUALSP01:20
for X be RealNormSpace,
f,h be VECTOR of R_VectorSpace_of_BoundedLinearFunctionals X,
a be Real
holds h = a*f iff for x be VECTOR of X holds h.x = a * f.x;
theorem :: DUALSP01:21
for X be RealNormSpace holds
0.(R_VectorSpace_of_BoundedLinearFunctionals X) = (the carrier of X) --> 0;
definition
let X be RealNormSpace;
let f be object;
func Bound2Lipschitz(f,X) -> Lipschitzian linear-Functional of X equals
:: DUALSP01:def 12
In(f,BoundedLinearFunctionals X);
end;
definition
let X be RealNormSpace;
let u be linear-Functional of X;
func PreNorms u -> non empty Subset of REAL equals
:: DUALSP01:def 13
{|.u.t.| where t is VECTOR of X : ||.t.|| <= 1 };
end;
registration let X be RealNormSpace,
g be Lipschitzian linear-Functional of X;
cluster PreNorms g -> bounded_above;
end;
theorem :: DUALSP01:22
for X be RealNormSpace, g be linear-Functional of X
holds g is Lipschitzian iff PreNorms g is bounded_above;
definition
let X be RealNormSpace;
func BoundedLinearFunctionalsNorm X
-> Function of BoundedLinearFunctionals X,REAL means
:: DUALSP01:def 14
for x be object st x in BoundedLinearFunctionals X holds
it.x = upper_bound PreNorms(Bound2Lipschitz(x,X));
end;
theorem :: DUALSP01:23
for X be RealNormSpace, f be Lipschitzian linear-Functional of X
holds Bound2Lipschitz(f,X)=f;
theorem :: DUALSP01:24
for X be RealNormSpace, f be Lipschitzian linear-Functional of X
holds (BoundedLinearFunctionalsNorm X).f = upper_bound PreNorms f;
definition
let X be RealNormSpace;
func DualSp X -> non empty NORMSTR equals
:: DUALSP01:def 15
NORMSTR (# BoundedLinearFunctionals X,
Zero_(BoundedLinearFunctionals X, X*'),
Add_(BoundedLinearFunctionals X, X*'),
Mult_(BoundedLinearFunctionals X, X*'),
BoundedLinearFunctionalsNorm X #);
end;
theorem :: DUALSP01:25
for X be RealNormSpace holds (the carrier of X) --> 0 = 0.(DualSp X);
theorem :: DUALSP01:26
for X be RealNormSpace, f be Point of DualSp X,
g be Lipschitzian linear-Functional of X
st g=f holds for t be VECTOR of X holds |.g.t.| <= ||.f.|| * ||.t.||;
theorem :: DUALSP01:27
for X be RealNormSpace, f be Point of DualSp X holds 0 <= ||.f.||;
theorem :: DUALSP01:28
for X, Y be RealNormSpace for f be Point of DualSp X
st f = 0.(DualSp X) holds 0 = ||.f.||;
registration
let X be RealNormSpace;
cluster -> Function-like Relation-like for Element of DualSp X;
end;
definition
let X be RealNormSpace;
let f be Element of DualSp X;
let v be VECTOR of X;
redefine func f.v -> Element of REAL;
end;
theorem :: DUALSP01:29
for X be RealNormSpace, f,g,h be Point of DualSp X
holds h = f+g iff for x be VECTOR of X holds h.x = f.x + g.x;
theorem :: DUALSP01:30
for X be RealNormSpace, f,h be Point of DualSp X, a be Real
holds h = a*f iff for x be VECTOR of X holds h.x = a * f.x;
theorem :: DUALSP01:31
for X be RealNormSpace, f,g be Point of DualSp X, a be Real holds
( ||.f.|| = 0 iff f = 0.(DualSp X) ) &
||.a*f.|| = |.a.| * ||.f.|| & ||.f+g.|| <= ||.f.|| + ||.g.||;
registration
let X be RealNormSpace;
cluster DualSp X -> reflexive discerning RealNormSpace-like;
end;
theorem :: DUALSP01:32
for X be RealNormSpace holds DualSp X is RealNormSpace;
registration
let X be RealNormSpace;
cluster DualSp X -> reflexive discerning RealNormSpace-like
vector-distributive scalar-distributive scalar-associative scalar-unital
Abelian add-associative right_zeroed right_complementable;
end;
theorem :: DUALSP01:33
for X be RealNormSpace, f,g,h be Point of DualSp X
holds h = f-g iff for x be VECTOR of X holds h.x = f.x - g.x;
definition let X be RealNormSpace;
let s be sequence of DualSp X, n be Nat;
redefine func s.n -> Element of DualSp X;
end;
theorem :: DUALSP01:34
for X be RealNormSpace, seq be sequence of DualSp X
st seq is Cauchy_sequence_by_Norm holds seq is convergent;
theorem :: DUALSP01:35
for X be RealNormSpace holds DualSp X is RealBanachSpace;
registration
let X be RealNormSpace;
cluster DualSp X -> complete;
end;
begin :: Hahn-Banach's Extension Theorem
definition
let V be RealNormSpace;
mode SubRealNormSpace of V -> RealNormSpace means
:: DUALSP01:def 16
the carrier of it c= the carrier of V
& 0.it = 0.V
& the addF of it = (the addF of V)||the carrier of it
& the Mult of it = (the Mult of V) | [:REAL, the carrier of it:]
& the normF of it = (the normF of V) | (the carrier of it);
end;
theorem :: DUALSP01:36
for V be RealNormSpace, X be SubRealNormSpace of V,
f be Lipschitzian linear-Functional of X,
F be Point of DualSp X
st f = F holds
ex g be Lipschitzian linear-Functional of V, G be Point of DualSp V
st g = G & g|(the carrier of X) = f & ||.G.||=||.F.||;
::$N Hahn-Banach's extension theorem (real normed spaces)
theorem :: DUALSP01:37
for V be RealNormSpace, X be SubRealNormSpace of V,
f be Lipschitzian linear-Functional of X,
F be Point of DualSp X
st ( f = F & for x be VECTOR of X, v be VECTOR of V
st x=v holds f.x <= ||.v.|| )
holds
ex g be Lipschitzian linear-Functional of V, G be Point of DualSp V
st g = G & g|(the carrier of X) = f
& for x be VECTOR of V holds g.x <= ||.x.|| & ||.G.||=||.F.||;