src/HOL/Real/HahnBanach/HahnBanach.thy
author wenzelm
Mon, 08 May 2000 20:57:02 +0200
changeset 8838 4eaa99f0d223
parent 8703 816d8f6513be
child 8902 a705822f4e2a
permissions -rw-r--r--
replaced rabs by overloaded abs;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
     1
(*  Title:      HOL/Real/HahnBanach/HahnBanach.thy
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
     2
    ID:         $Id$
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
     3
    Author:     Gertrud Bauer, TU Munich
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
     4
*)
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
     5
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
     6
header {* The Hahn-Banach Theorem *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
     7
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
     8
theory HahnBanach
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
     9
     = HahnBanachSupLemmas + HahnBanachExtLemmas + ZornLemma:;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    10
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    11
text {*
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
    12
  We present the proof of two different versions of the Hahn-Banach 
7927
b50446a33c16 update by Gertrud Bauer;
wenzelm
parents: 7917
diff changeset
    13
  Theorem, closely following \cite[\S36]{Heuser:1986}.
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    14
*};
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    15
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    16
subsection {* The Hahn-Banach Theorem for vector spaces *};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    17
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    18
text {* {\bf Theorem.} Let $f$ be a linear form defined on a subspace 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    19
 $F$ of a real vector space $E$, such that $f$ is bounded by a seminorm 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    20
 $p$. 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    21
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    22
 Then $f$ can be extended  to a linear form $h$  on $E$ that is again
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    23
 bounded by $p$.
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    24
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    25
 \bigskip{\bf Proof Outline.}
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    26
 First we define the set $M$ of all norm-preserving extensions of $f$.
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    27
 We show that every chain in $M$ has an upper bound in $M$.
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    28
 With Zorn's lemma we can conclude that $M$ has a maximal element $g$.
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    29
 We further show by contradiction that the domain $H$ of $g$ is the whole
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    30
 vector space $E$. 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    31
 If $H \neq E$, then $g$ can be extended in 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    32
 a norm-preserving way to a greater vector space $H_0$. 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    33
 So $g$ cannot be maximal in $M$.
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    34
 \bigskip
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    35
*};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    36
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    37
theorem HahnBanach: "[| is_vectorspace E; is_subspace F E; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    38
 is_seminorm E p; is_linearform F f; ALL x:F. f x <= p x |]
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    39
  ==> EX h. is_linearform E h & (ALL x:F. h x = f x)
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    40
          & (ALL x:E. h x <= p x)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    41
proof -;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    42
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    43
txt {* Let $E$ be a vector space, $F$ a subspace of $E$, $p$ a seminorm on $E$ and $f$ a linear form on $F$ such that $f$ is bounded by $p$. *};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    44
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    45
  assume "is_vectorspace E" "is_subspace F E" "is_seminorm E p" 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    46
    "is_linearform F f" "ALL x:F. f x <= p x";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    47
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    48
txt {* Define $M$ as the set of all norm-preserving extensions of $F$.  *};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    49
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    50
  def M == "norm_pres_extensions E p F f";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    51
  {{;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    52
    fix c; assume "c : chain M" "EX x. x:c";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    53
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    54
txt {* Show that every non-empty chain $c$ in $M$ has an upper bound in $M$: $\Union c$ is greater that every element of the chain $c$, so $\Union c$ is an upper bound of $c$ that lies in $M$. *};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    55
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    56
    have "Union c : M";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    57
    proof (unfold M_def, rule norm_pres_extensionI);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    58
      show "EX (H::'a set) h::'a => real. graph H h = Union c
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    59
              & is_linearform H h 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    60
              & is_subspace H E 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    61
              & is_subspace F H 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    62
              & graph F f <= graph H h
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    63
              & (ALL x::'a:H. h x <= p x)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    64
      proof (intro exI conjI);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    65
        let ?H = "domain (Union c)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    66
        let ?h = "funct (Union c)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    67
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    68
        show a: "graph ?H ?h = Union c"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    69
        proof (rule graph_domain_funct);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    70
          fix x y z; assume "(x, y) : Union c" "(x, z) : Union c";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    71
          show "z = y"; by (rule sup_definite);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    72
        qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    73
        show "is_linearform ?H ?h"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    74
          by (simp! add: sup_lf a);
8674
ac6c028e0249 fixed goal selection;
wenzelm
parents: 8109
diff changeset
    75
        show "is_subspace ?H E";
ac6c028e0249 fixed goal selection;
wenzelm
parents: 8109
diff changeset
    76
          by (rule sup_subE [OF _ _ _ a]) (simp!)+;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    77
        show "is_subspace F ?H"; 
8674
ac6c028e0249 fixed goal selection;
wenzelm
parents: 8109
diff changeset
    78
          by (rule sup_supF [OF _ _ _ a]) (simp!)+;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    79
        show "graph F f <= graph ?H ?h"; 
8674
ac6c028e0249 fixed goal selection;
wenzelm
parents: 8109
diff changeset
    80
          by (rule sup_ext [OF _ _ _ a]) (simp!)+;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    81
        show "ALL x::'a:?H. ?h x <= p x"; 
8674
ac6c028e0249 fixed goal selection;
wenzelm
parents: 8109
diff changeset
    82
          by (rule sup_norm_pres [OF _ _ a]) (simp!)+;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    83
      qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    84
    qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    85
  }};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    86
  
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    87
txt {* With Zorn's Lemma we can conclude that there is a maximal element $g$ in $M$. *};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    88
8104
wenzelm
parents: 8084
diff changeset
    89
  hence "EX g:M. ALL x:M. g <= x --> g = x";
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    90
  proof (rule Zorn's_Lemma);
8104
wenzelm
parents: 8084
diff changeset
    91
    txt {* We show that $M$ is non-empty: *};
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    92
    have "graph F f : norm_pres_extensions E p F f";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    93
    proof (rule norm_pres_extensionI2);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    94
      have "is_vectorspace F"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    95
      thus "is_subspace F F"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    96
    qed (blast!)+; 
8104
wenzelm
parents: 8084
diff changeset
    97
    thus "graph F f : M"; by (simp!);
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    98
  qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    99
  thus ?thesis;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   100
  proof;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   101
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   102
txt {* We take this maximal element $g$.  *};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   103
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   104
    fix g; assume "g:M" "ALL x:M. g <= x --> g = x";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   105
    show ?thesis;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   106
8104
wenzelm
parents: 8084
diff changeset
   107
      txt {* $g$ is a norm-preserving extension of $f$, that is: $g$
wenzelm
parents: 8084
diff changeset
   108
      is the graph of a linear form $h$, defined on a subspace $H$ of
wenzelm
parents: 8084
diff changeset
   109
      $E$, which is a superspace of $F$. $h$ is an extension of $f$
wenzelm
parents: 8084
diff changeset
   110
      and $h$ is again bounded by $p$. *};
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   111
8109
aca11f954993 obtain: renamed 'in' to 'where';
wenzelm
parents: 8108
diff changeset
   112
      obtain H h where "graph H h = g" "is_linearform H h" 
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   113
        "is_subspace H E" "is_subspace F H" "graph F f <= graph H h" 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   114
        "ALL x:H. h x <= p x";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   115
      proof -;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   116
        have "EX H h. graph H h = g & is_linearform H h 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   117
          & is_subspace H E & is_subspace F H
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   118
          & graph F f <= graph H h
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   119
          & (ALL x:H. h x <= p x)"; by (simp! add: norm_pres_extension_D);
8107
wenzelm
parents: 8104
diff changeset
   120
        thus ?thesis; by (elim exE conjE) rule;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   121
      qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   122
      have h: "is_vectorspace H"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   123
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   124
txt {* We show that $h$ is defined on whole $E$ by classical contradiction.  *}; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   125
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   126
      have "H = E"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   127
      proof (rule classical);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   128
8104
wenzelm
parents: 8084
diff changeset
   129
	txt {* Assume $h$ is not defined on whole $E$. *};
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   130
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   131
        assume "H ~= E";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   132
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   133
txt {* Then show that $h$ can be extended in a norm-preserving way to a function $h_0$ with the graph $g_{h0}$.  *};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   134
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   135
        have "EX g_h0 : M. g <= g_h0 & g ~= g_h0"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   136
8104
wenzelm
parents: 8084
diff changeset
   137
	  txt {* Consider $x_0 \in E \setminus H$. *};
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   138
8109
aca11f954993 obtain: renamed 'in' to 'where';
wenzelm
parents: 8108
diff changeset
   139
          obtain x0 where "x0:E" "x0~:H"; 
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   140
          proof -;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   141
            have "EX x0:E. x0~:H";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   142
            proof (rule set_less_imp_diff_not_empty);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   143
              have "H <= E"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   144
              thus "H < E"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   145
            qed;
8104
wenzelm
parents: 8084
diff changeset
   146
            thus ?thesis; by blast;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   147
          qed;
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   148
          have x0: "x0 ~= 00";
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   149
          proof (rule classical);
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   150
            presume "x0 = 00";
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   151
            with h; have "x0:H"; by simp;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   152
            thus ?thesis; by contradiction;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   153
          qed blast;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   154
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   155
txt {* Define $H_0$ as the direct sum of $H$ and the linear closure of $x_0$.  *};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   156
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   157
          def H0 == "H + lin x0";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   158
          show ?thesis;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   159
8104
wenzelm
parents: 8084
diff changeset
   160
	    txt {* Pick a real number $\xi$ that fulfills certain
wenzelm
parents: 8084
diff changeset
   161
	    inequations, which will be used to establish that $h_0$ is
wenzelm
parents: 8084
diff changeset
   162
	    a norm-preserving extension of $h$. *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   163
8109
aca11f954993 obtain: renamed 'in' to 'where';
wenzelm
parents: 8108
diff changeset
   164
            obtain xi where "ALL y:H. - p (y + x0) - h y <= xi 
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   165
                              & xi <= p (y + x0) - h y";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   166
            proof -;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   167
	      from h; have "EX xi. ALL y:H. - p (y + x0) - h y <= xi 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   168
                              & xi <= p (y + x0) - h y"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   169
              proof (rule ex_xi);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   170
                fix u v; assume "u:H" "v:H";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   171
                from h; have "h v - h u = h (v - u)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   172
                  by (simp! add: linearform_diff);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   173
                also; have "... <= p (v - u)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   174
                  by (simp!);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   175
                also; have "v - u = x0 + - x0 + v + - u";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   176
                  by (simp! add: diff_eq1);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   177
                also; have "... = v + x0 + - (u + x0)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   178
                  by (simp!);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   179
                also; have "... = (v + x0) - (u + x0)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   180
                  by (simp! add: diff_eq1);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   181
                also; have "p ... <= p (v + x0) + p (u + x0)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   182
                  by (rule seminorm_diff_subadditive) (simp!)+;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   183
                finally; have "h v - h u <= p (v + x0) + p (u + x0)"; .;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   184
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   185
                thus "- p (u + x0) - h u <= p (v + x0) - h v";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   186
                  by (rule real_diff_ineq_swap);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   187
              qed;
8107
wenzelm
parents: 8104
diff changeset
   188
              thus ?thesis; by rule rule;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   189
            qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   190
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   191
txt {* Define the extension $h_0$ of $h$ to $H_0$ using $\xi$.  *};
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   192
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   193
            def h0 == "\\<lambda>x. let (y,a) = SOME (y, a). x = y + a (*) x0 
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   194
                                                  & y:H
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   195
                           in (h y) + a * xi";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   196
            show ?thesis;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   197
            proof;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   198
 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   199
txt {* Show that $h_0$ is an extension of $h$  *};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   200
 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   201
              show "g <= graph H0 h0 & g ~= graph H0 h0";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   202
              proof;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   203
		show "g <= graph H0 h0";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   204
		proof -;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   205
		  have  "graph H h <= graph H0 h0";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   206
                  proof (rule graph_extI);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   207
		    fix t; assume "t:H"; 
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   208
		    have "(SOME (y, a). t = y + a (*) x0 & y : H)
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   209
                         = (t,0r)";
8674
ac6c028e0249 fixed goal selection;
wenzelm
parents: 8109
diff changeset
   210
		      by (rule decomp_H0_H [OF _ _ _ _ _ x0]);
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   211
		    thus "h t = h0 t"; by (simp! add: Let_def);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   212
		  next;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   213
		    show "H <= H0";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   214
		    proof (rule subspace_subset);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   215
		      show "is_subspace H H0";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   216
		      proof (unfold H0_def, rule subspace_vs_sum1);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   217
			show "is_vectorspace H"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   218
			show "is_vectorspace (lin x0)"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   219
		      qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   220
		    qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   221
		  qed; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   222
		  thus ?thesis; by (simp!);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   223
		qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   224
                show "g ~= graph H0 h0";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   225
		proof -;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   226
		  have "graph H h ~= graph H0 h0";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   227
		  proof;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   228
		    assume e: "graph H h = graph H0 h0";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   229
		    have "x0 : H0"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   230
		    proof (unfold H0_def, rule vs_sumI);
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   231
		      show "x0 = 00 + x0"; by (simp!);
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   232
		      from h; show "00 : H"; ..;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   233
		      show "x0 : lin x0"; by (rule x_lin_x);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   234
		    qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   235
		    hence "(x0, h0 x0) : graph H0 h0"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   236
		    with e; have "(x0, h0 x0) : graph H h"; by simp;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   237
		    hence "x0 : H"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   238
		    thus False; by contradiction;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   239
		  qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   240
		  thus ?thesis; by (simp!);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   241
		qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   242
              qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   243
	      
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   244
txt {* and $h_0$ is norm-preserving.  *}; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   245
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   246
              show "graph H0 h0 : M";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   247
	      proof -;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   248
		have "graph H0 h0 : norm_pres_extensions E p F f";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   249
		proof (rule norm_pres_extensionI2);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   250
		  show "is_linearform H0 h0";
8674
ac6c028e0249 fixed goal selection;
wenzelm
parents: 8109
diff changeset
   251
		    by (rule h0_lf [OF _ _ _ _ _ _ x0]) (simp!)+;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   252
		  show "is_subspace H0 E";
8674
ac6c028e0249 fixed goal selection;
wenzelm
parents: 8109
diff changeset
   253
		    by (unfold H0_def) (rule vs_sum_subspace [OF _ lin_subspace]);
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   254
		  have "is_subspace F H"; .;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   255
		  also; from h lin_vs; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   256
		  have [fold H0_def]: "is_subspace H (H + lin x0)"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   257
		  finally (subspace_trans [OF _ h]); 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   258
		  show f_h0: "is_subspace F H0"; .;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   259
		
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   260
		  show "graph F f <= graph H0 h0";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   261
		  proof (rule graph_extI);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   262
		    fix x; assume "x:F";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   263
		    have "f x = h x"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   264
		    also; have " ... = h x + 0r * xi"; by simp;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   265
		    also; have "... = (let (y,a) = (x, 0r) in h y + a * xi)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   266
		      by (simp add: Let_def);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   267
		    also; have 
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   268
		      "(x, 0r) = (SOME (y, a). x = y + a (*) x0 & y : H)";
8674
ac6c028e0249 fixed goal selection;
wenzelm
parents: 8109
diff changeset
   269
		      by (rule decomp_H0_H [RS sym, OF _ _ _ _ _ x0]) (simp!)+;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   270
		    also; have 
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   271
		      "(let (y,a) = (SOME (y,a). x = y + a (*) x0 & y : H)
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   272
                        in h y + a * xi) 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   273
                      = h0 x"; by (simp!);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   274
		    finally; show "f x = h0 x"; .;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   275
		  next;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   276
		    from f_h0; show "F <= H0"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   277
		  qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   278
		
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   279
		  show "ALL x:H0. h0 x <= p x";
8674
ac6c028e0249 fixed goal selection;
wenzelm
parents: 8109
diff changeset
   280
		    by (rule h0_norm_pres [OF _ _ _ _ x0]);
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   281
		qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   282
		thus "graph H0 h0 : M"; by (simp!);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   283
	      qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   284
            qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   285
          qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   286
        qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   287
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   288
txt {* So the graph $g$ of $h$ cannot be maximal. Contradiction.  *}; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   289
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   290
        hence "~ (ALL x:M. g <= x --> g = x)"; by simp;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   291
        thus ?thesis; by contradiction;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   292
      qed; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   293
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   294
txt {* Now we have a linear extension $h$ of $f$ to $E$ that is 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   295
bounded by $p$. *};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   296
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   297
      thus "EX h. is_linearform E h & (ALL x:F. h x = f x) 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   298
                & (ALL x:E. h x <= p x)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   299
      proof (intro exI conjI);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   300
        assume eq: "H = E";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   301
	from eq; show "is_linearform E h"; by (simp!);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   302
	show "ALL x:F. h x = f x"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   303
	proof (intro ballI, rule sym);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   304
	  fix x; assume "x:F"; show "f x = h x "; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   305
	qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   306
	from eq; show "ALL x:E. h x <= p x"; by (force!);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   307
      qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   308
    qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   309
  qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   310
qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   311
(*
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   312
theorem HahnBanach: 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   313
  "[| is_vectorspace E; is_subspace F E; is_seminorm E p; 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   314
  is_linearform F f; ALL x:F. f x <= p x |]
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   315
  ==> EX h. is_linearform E h
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   316
          & (ALL x:F. h x = f x)
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   317
          & (ALL x:E. h x <= p x)";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   318
proof -;
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   319
  assume "is_vectorspace E" "is_subspace F E" "is_seminorm E p"
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   320
         "is_linearform F f" "ALL x:F. f x <= p x";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   321
  
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   322
  txt{* We define $M$ to be the set of all linear extensions 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   323
  of $f$ to superspaces of $F$, which are bounded by $p$. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   324
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   325
  def M == "norm_pres_extensions E p F f";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   326
  
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   327
  txt{* We show that $M$ is non-empty: *};
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   328
 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   329
  have aM: "graph F f : norm_pres_extensions E p F f";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   330
  proof (rule norm_pres_extensionI2);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   331
    have "is_vectorspace F"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   332
    thus "is_subspace F F"; ..;
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   333
  qed (blast!)+;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   334
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   335
  subsubsect {* Existence of a limit function *}; 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   336
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   337
  txt {* For every non-empty chain of norm-preserving extensions
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   338
  the union of all functions in the chain is again a norm-preserving
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   339
  extension. (The union is an upper bound for all elements. 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   340
  It is even the least upper bound, because every upper bound of $M$
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   341
  is also an upper bound for $\Union c$, as $\Union c\in M$) *};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   342
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   343
  {{;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   344
    fix c; assume "c:chain M" "EX x. x:c";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   345
    have "Union c : M";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   346
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   347
    proof (unfold M_def, rule norm_pres_extensionI);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   348
      show "EX (H::'a set) h::'a => real. graph H h = Union c
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   349
              & is_linearform H h 
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   350
              & is_subspace H E 
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   351
              & is_subspace F H 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   352
              & graph F f <= graph H h
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   353
              & (ALL x::'a:H. h x <= p x)";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   354
      proof (intro exI conjI);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   355
        let ?H = "domain (Union c)";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   356
        let ?h = "funct (Union c)";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   357
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   358
        show a: "graph ?H ?h = Union c"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   359
        proof (rule graph_domain_funct);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   360
          fix x y z; assume "(x, y) : Union c" "(x, z) : Union c";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   361
          show "z = y"; by (rule sup_definite);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   362
        qed;
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   363
        show "is_linearform ?H ?h";  
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   364
          by (simp! add: sup_lf a);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   365
        show "is_subspace ?H E"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   366
          by (rule sup_subE, rule a) (simp!)+;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   367
        show "is_subspace F ?H"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   368
          by (rule sup_supF, rule a) (simp!)+;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   369
        show "graph F f <= graph ?H ?h"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   370
          by (rule sup_ext, rule a) (simp!)+;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   371
        show "ALL x::'a:?H. ?h x <= p x"; 
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   372
          by (rule sup_norm_pres, rule a) (simp!)+;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   373
      qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   374
    qed;
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   375
  }};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   376
 
7927
b50446a33c16 update by Gertrud Bauer;
wenzelm
parents: 7917
diff changeset
   377
  txt {* According to Zorn's Lemma there is
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   378
  a maximal norm-preserving extension $g\in M$. *};
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   379
  
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   380
  with aM; have bex_g: "EX g:M. ALL x:M. g <= x --> g = x";
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   381
    by (simp! add: Zorn's_Lemma);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   382
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   383
  thus ?thesis;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   384
  proof;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   385
    fix g; assume g: "g:M" "ALL x:M. g <= x --> g = x";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   386
 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   387
    have ex_Hh: 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   388
      "EX H h. graph H h = g 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   389
           & is_linearform H h 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   390
           & is_subspace H E 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   391
           & is_subspace F H
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   392
           & graph F f <= graph H h
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   393
           & (ALL x:H. h x <= p x) "; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   394
      by (simp! add: norm_pres_extension_D);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   395
    thus ?thesis;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   396
    proof (elim exE conjE, intro exI);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   397
      fix H h; 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   398
      assume "graph H h = g" "is_linearform (H::'a set) h" 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   399
             "is_subspace H E" "is_subspace F H"
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   400
        and h_ext: "graph F f <= graph H h"
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   401
        and h_bound: "ALL x:H. h x <= p x";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   402
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   403
      have h: "is_vectorspace H"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   404
      have f: "is_vectorspace F"; ..;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   405
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   406
subsubsect {* The domain of the limit function *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   407
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   408
have eq: "H = E"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   409
proof (rule classical);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   410
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   411
txt {* Assume that the domain of the supremum is not $E$, *};
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   412
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   413
  assume "H ~= E";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   414
  have "H <= E"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   415
  hence "H < E"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   416
 
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   417
  txt{* then there exists an element $x_0$ in $E \setminus H$: *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   418
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   419
  hence "EX x0:E. x0~:H"; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   420
    by (rule set_less_imp_diff_not_empty);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   421
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   422
  txt {* We get that $h$ can be extended  in a 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   423
  norm-preserving way to some $H_0$. *};
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   424
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   425
  hence "EX H0 h0. g <= graph H0 h0 & g ~= graph H0 h0 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   426
                 & graph H0 h0 : M";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   427
  proof;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   428
    fix x0; assume "x0:E" "x0~:H";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   429
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   430
    have x0: "x0 ~= 00";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   431
    proof (rule classical);
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   432
      presume "x0 = 00";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   433
      with h; have "x0:H"; by simp;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   434
      thus ?thesis; by contradiction;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   435
    qed blast;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   436
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   437
    txt {* Define $H_0$ as the (direct) sum of H and the 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   438
    linear closure of $x_0$. \label{ex-xi-use}*};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   439
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   440
    def H0 == "H + lin x0";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   441
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   442
    from h; have xi: "EX xi. ALL y:H. - p (y + x0) - h y <= xi 
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   443
                                    & xi <= p (y + x0) - h y";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   444
    proof (rule ex_xi);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   445
      fix u v; assume "u:H" "v:H";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   446
      from h; have "h v - h u = h (v - u)";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   447
         by (simp! add: linearform_diff);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   448
      also; from h_bound; have "... <= p (v - u)";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   449
        by (simp!);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   450
      also; have "v - u = x0 + - x0 + v + - u";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   451
        by (simp! add: diff_eq1);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   452
      also; have "... = v + x0 + - (u + x0)";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   453
        by (simp!);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   454
      also; have "... = (v + x0) - (u + x0)";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   455
        by (simp! add: diff_eq1);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   456
      also; have "p ... <= p (v + x0) + p (u + x0)";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   457
         by (rule seminorm_diff_subadditive) (simp!)+;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   458
      finally; have "h v - h u <= p (v + x0) + p (u + x0)"; .;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   459
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   460
      thus "- p (u + x0) - h u <= p (v + x0) - h v";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   461
        by (rule real_diff_ineq_swap);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   462
    qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   463
    hence "EX h0. g <= graph H0 h0 & g ~= graph H0 h0
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   464
               & graph H0 h0 : M"; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   465
    proof (elim exE, intro exI conjI);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   466
      fix xi; 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   467
      assume a: "ALL y:H. - p (y + x0) - h y <= xi 
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   468
                        & xi <= p (y + x0) - h y";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   469
     
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   470
      txt {* Define $h_0$ as the canonical linear extension 
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   471
      of $h$ on $H_0$:*};  
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   472
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   473
      def h0 ==
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   474
          "\\<lambda>x. let (y,a) = SOME (y, a). x = y + a ( * ) x0 & y:H
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   475
               in (h y) + a * xi";
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   476
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   477
      txt {* We get that the graph of $h_0$ extends that of
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   478
      $h$. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   479
        
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   480
      have  "graph H h <= graph H0 h0"; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   481
      proof (rule graph_extI);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   482
        fix t; assume "t:H"; 
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   483
        have "(SOME (y, a). t = y + a ( * ) x0 & y : H) = (t,0r)";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   484
          by (rule decomp_H0_H, rule x0); 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   485
        thus "h t = h0 t"; by (simp! add: Let_def);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   486
      next;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   487
        show "H <= H0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   488
        proof (rule subspace_subset);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   489
	  show "is_subspace H H0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   490
          proof (unfold H0_def, rule subspace_vs_sum1);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   491
       	    show "is_vectorspace H"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   492
            show "is_vectorspace (lin x0)"; ..;
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   493
          qed;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   494
        qed;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   495
      qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   496
      thus "g <= graph H0 h0"; by (simp!);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   497
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   498
      txt {* Apparently $h_0$ is not equal to $h$. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   499
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   500
      have "graph H h ~= graph H0 h0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   501
      proof;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   502
        assume e: "graph H h = graph H0 h0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   503
        have "x0 : H0"; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   504
        proof (unfold H0_def, rule vs_sumI);
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   505
          show "x0 = 00 + x0"; by (simp!);
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   506
          from h; show "00 : H"; ..;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   507
          show "x0 : lin x0"; by (rule x_lin_x);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   508
        qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   509
        hence "(x0, h0 x0) : graph H0 h0"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   510
        with e; have "(x0, h0 x0) : graph H h"; by simp;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   511
        hence "x0 : H"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   512
        thus False; by contradiction;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   513
      qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   514
      thus "g ~= graph H0 h0"; by (simp!);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   515
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   516
      txt {* Furthermore  $h_0$ is a norm-preserving extension 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   517
     of $f$. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   518
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   519
      have "graph H0 h0 : norm_pres_extensions E p F f";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   520
      proof (rule norm_pres_extensionI2);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   521
        show "is_linearform H0 h0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   522
          by (rule h0_lf, rule x0) (simp!)+;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   523
        show "is_subspace H0 E";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   524
          by (unfold H0_def, rule vs_sum_subspace, 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   525
             rule lin_subspace);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   526
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   527
        have "is_subspace F H"; .;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   528
        also; from h lin_vs; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   529
	have [fold H0_def]: "is_subspace H (H + lin x0)"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   530
        finally (subspace_trans [OF _ h]); 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   531
	show f_h0: "is_subspace F H0"; .; (*** 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   532
        backwards:
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   533
        show f_h0: "is_subspace F H0"; .;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   534
        proof (rule subspace_trans [of F H H0]);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   535
          from h lin_vs; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   536
          have "is_subspace H (H + lin x0)"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   537
          thus "is_subspace H H0"; by (unfold H0_def);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   538
        qed; ***)
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   539
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   540
        show "graph F f <= graph H0 h0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   541
        proof (rule graph_extI);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   542
          fix x; assume "x:F";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   543
          have "f x = h x"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   544
          also; have " ... = h x + 0r * xi"; by simp;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   545
          also; have "... = (let (y,a) = (x, 0r) in h y + a * xi)";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   546
            by (simp add: Let_def);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   547
          also; have 
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   548
            "(x, 0r) = (SOME (y, a). x = y + a ( * ) x0 & y : H)";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   549
            by (rule decomp_H0_H [RS sym], rule x0) (simp!)+;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   550
          also; have 
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   551
            "(let (y,a) = (SOME (y,a). x = y + a ( * ) x0 & y : H)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   552
              in h y + a * xi) 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   553
             = h0 x"; by (simp!);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   554
          finally; show "f x = h0 x"; .;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   555
        next;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   556
          from f_h0; show "F <= H0"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   557
        qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   558
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   559
        show "ALL x:H0. h0 x <= p x";
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   560
          by (rule h0_norm_pres, rule x0) (assumption | simp!)+;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   561
      qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   562
      thus "graph H0 h0 : M"; by (simp!);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   563
    qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   564
    thus ?thesis; ..;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   565
  qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   566
7927
b50446a33c16 update by Gertrud Bauer;
wenzelm
parents: 7917
diff changeset
   567
  txt {* We have shown that $h$ can still be extended to 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   568
  some $h_0$, in contradiction to the assumption that 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   569
  $h$ is a maximal element. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   570
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   571
  hence "EX x:M. g <= x & g ~= x"; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   572
    by (elim exE conjE, intro bexI conjI);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   573
  hence "~ (ALL x:M. g <= x --> g = x)"; by simp;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   574
  thus ?thesis; by contradiction;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   575
qed; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   576
7927
b50446a33c16 update by Gertrud Bauer;
wenzelm
parents: 7917
diff changeset
   577
txt{* It follows $H = E$, and the thesis can be shown. *};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   578
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   579
show "is_linearform E h & (ALL x:F. h x = f x) 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   580
     & (ALL x:E. h x <= p x)";
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   581
proof (intro conjI); 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   582
  from eq; show "is_linearform E h"; by (simp!);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   583
  show "ALL x:F. h x = f x"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   584
  proof (intro ballI, rule sym);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   585
    fix x; assume "x:F"; show "f x = h x "; ..;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   586
  qed;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   587
  from eq; show "ALL x:E. h x <= p x"; by (force!);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   588
qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   589
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   590
qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   591
qed;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   592
qed;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   593
*)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   594
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   595
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   596
subsection  {* Alternative formulation *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   597
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   598
text {* The following alternative formulation of the Hahn-Banach
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   599
Theorem\label{abs-HahnBanach} uses the fact that for a real linear form
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   600
$f$ and a seminorm $p$ the
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   601
following inequations are equivalent:\footnote{This was shown in lemma
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   602
$\idt{abs{\dsh}ineq{\dsh}iff}$ (see page \pageref{abs-ineq-iff}).}
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   603
\begin{matharray}{ll}
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   604
\forall x\in H.\ap |h\ap x|\leq p\ap x& {\rm and}\\
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   605
\forall x\in H.\ap h\ap x\leq p\ap x\\
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   606
\end{matharray}
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   607
*};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   608
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   609
theorem abs_HahnBanach:
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   610
  "[| is_vectorspace E; is_subspace F E; is_linearform F f; 
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   611
  is_seminorm E p; ALL x:F. abs (f x) <= p x |]
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   612
  ==> EX g. is_linearform E g & (ALL x:F. g x = f x)
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   613
   & (ALL x:E. abs (g x) <= p x)";
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   614
proof -;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   615
  assume "is_vectorspace E" "is_subspace F E" "is_seminorm E p" 
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   616
    "is_linearform F f"  "ALL x:F. abs (f x) <= p x";
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   617
  have "ALL x:F. f x <= p x";  by (rule abs_ineq_iff [RS iffD1]);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   618
  hence "EX g. is_linearform E g & (ALL x:F. g x = f x) 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   619
              & (ALL x:E. g x <= p x)";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   620
    by (simp! only: HahnBanach);
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   621
  thus ?thesis; 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   622
  proof (elim exE conjE);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   623
    fix g; assume "is_linearform E g" "ALL x:F. g x = f x" 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   624
                  "ALL x:E. g x <= p x";
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   625
    hence "ALL x:E. abs (g x) <= p x";
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   626
      by (simp! add: abs_ineq_iff [OF subspace_refl]);
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   627
    thus ?thesis; by (intro exI conjI);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   628
  qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   629
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   630
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   631
subsection {* The Hahn-Banach Theorem for normed spaces *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   632
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   633
text {* Every continuous linear form $f$ on a subspace $F$ of a
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   634
norm space $E$, can be extended to a continuous linear form $g$ on
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   635
$E$ such that $\fnorm{f} = \fnorm {g}$. *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   636
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   637
theorem norm_HahnBanach:
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   638
  "[| is_normed_vectorspace E norm; is_subspace F E; 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   639
  is_linearform F f; is_continuous F norm f |] 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   640
  ==> EX g. is_linearform E g
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   641
         & is_continuous E norm g 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   642
         & (ALL x:F. g x = f x) 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   643
         & function_norm E norm g = function_norm F norm f";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   644
proof -;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   645
  assume e_norm: "is_normed_vectorspace E norm";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   646
  assume f: "is_subspace F E" "is_linearform F f";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   647
  assume f_cont: "is_continuous F norm f";
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   648
  have e: "is_vectorspace E"; ..;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   649
  with _; have f_norm: "is_normed_vectorspace F norm"; ..;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   650
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   651
  txt{* We define a function $p$ on $E$ as follows:
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   652
  \begin{matharray}{l}
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   653
  p \: x = \fnorm f \cdot \norm x\\
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   654
  \end{matharray}
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   655
  *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   656
8674
ac6c028e0249 fixed goal selection;
wenzelm
parents: 8109
diff changeset
   657
  def p == "\\<lambda>x. function_norm F norm f * norm x";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   658
  
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   659
  txt{* $p$ is a seminorm on $E$: *};
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   660
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   661
  have q: "is_seminorm E p";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   662
  proof;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   663
    fix x y a; assume "x:E" "y:E";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   664
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   665
    txt{* $p$ is positive definite: *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   666
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   667
    show "0r <= p x";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   668
    proof (unfold p_def, rule real_le_mult_order);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   669
      from _ f_norm; show "0r <= function_norm F norm f"; ..;
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   670
      show "0r <= norm x"; ..;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   671
    qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   672
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   673
    txt{* $p$ is absolutely homogenous: *};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   674
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   675
    show "p (a (*) x) = abs a * p x";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   676
    proof -; 
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   677
      have "p (a (*) x) = function_norm F norm f * norm (a (*) x)";
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   678
        by (simp!);
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   679
      also; have "norm (a (*) x) = abs a * norm x"; 
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   680
        by (rule normed_vs_norm_abs_homogenous);
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   681
      also; have "function_norm F norm f * (abs a * norm x) 
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   682
        = abs a * (function_norm F norm f * norm x)";
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   683
        by (simp! only: real_mult_left_commute);
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   684
      also; have "... = abs a * p x"; by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   685
      finally; show ?thesis; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   686
    qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   687
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   688
    txt{* Furthermore, $p$ is subadditive: *};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   689
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   690
    show "p (x + y) <= p x + p y";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   691
    proof -;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   692
      have "p (x + y) = function_norm F norm f * norm (x + y)";
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   693
        by (simp!);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   694
      also; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   695
      have "... <= function_norm F norm f * (norm x + norm y)";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   696
      proof (rule real_mult_le_le_mono1);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   697
        from _ f_norm; show "0r <= function_norm F norm f"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   698
        show "norm (x + y) <= norm x + norm y"; ..;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   699
      qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   700
      also; have "... = function_norm F norm f * norm x 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   701
                        + function_norm F norm f * norm y";
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   702
        by (simp! only: real_add_mult_distrib2);
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   703
      finally; show ?thesis; by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   704
    qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   705
  qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   706
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   707
  txt{* $f$ is bounded by $p$. *}; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   708
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   709
  have "ALL x:F. abs (f x) <= p x";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   710
  proof;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   711
    fix x; assume "x:F";
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   712
     from f_norm; show "abs (f x) <= p x"; 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   713
       by (simp! add: norm_fx_le_norm_f_norm_x);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   714
  qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   715
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   716
  txt{* Using the fact that $p$ is a seminorm and 
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   717
  $f$ is bounded by $p$ we can apply the Hahn-Banach Theorem 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   718
  for real vector spaces. 
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   719
  So $f$ can be extended in a norm-preserving way to some function
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   720
  $g$ on the whole vector space $E$. *};
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   721
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   722
  with e f q; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   723
  have "EX g. is_linearform E g & (ALL x:F. g x = f x) 
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   724
            & (ALL x:E. abs (g x) <= p x)";
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   725
    by (simp! add: abs_HahnBanach);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   726
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   727
  thus ?thesis;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   728
  proof (elim exE conjE); 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   729
    fix g;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   730
    assume "is_linearform E g" and a: "ALL x:F. g x = f x" 
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   731
       and b: "ALL x:E. abs (g x) <= p x";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   732
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   733
    show "EX g. is_linearform E g 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   734
            & is_continuous E norm g 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   735
            & (ALL x:F. g x = f x) 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   736
            & function_norm E norm g = function_norm F norm f";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   737
    proof (intro exI conjI);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   738
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   739
    txt{* We furthermore have to show that 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   740
    $g$ is also continuous: *};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   741
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   742
      show g_cont: "is_continuous E norm g";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   743
      proof;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   744
        fix x; assume "x:E";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   745
        from b [RS bspec, OF this]; 
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   746
        show "abs (g x) <= function_norm F norm f * norm x";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   747
          by (unfold p_def);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   748
      qed; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   749
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   750
      txt {* To complete the proof, we show that 
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   751
      $\fnorm g = \fnorm f$. \label{order_antisym} *};
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   752
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   753
      show "function_norm E norm g = function_norm F norm f"
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   754
        (is "?L = ?R");
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   755
      proof (rule order_antisym);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   756
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   757
        txt{* First we show $\fnorm g \leq \fnorm f$.  The function norm
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   758
        $\fnorm g$ is defined as the smallest $c\in\bbbR$ such that
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   759
        \begin{matharray}{l}
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   760
        \All {x\in E} {|g\ap x| \leq c \cdot \norm x}
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   761
        \end{matharray}
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   762
        Furthermore holds
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   763
        \begin{matharray}{l}
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   764
        \All {x\in E} {|g\ap x| \leq \fnorm f \cdot \norm x}
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   765
        \end{matharray}
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   766
        *};
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   767
 
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   768
        have "ALL x:E. abs (g x) <= function_norm F norm f * norm x";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   769
        proof;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   770
          fix x; assume "x:E"; 
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   771
          show "abs (g x) <= function_norm F norm f * norm x";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   772
            by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   773
        qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   774
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   775
        with _ g_cont; show "?L <= ?R";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   776
        proof (rule fnorm_le_ub);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   777
          from f_cont f_norm; show "0r <= function_norm F norm f"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   778
        qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   779
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   780
        txt{* The other direction is achieved by a similar 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   781
        argument. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   782
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   783
        have "ALL x:F. abs (f x) <= function_norm E norm g * norm x";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   784
        proof;
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   785
          fix x; assume "x : F"; 
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   786
          from a; have "g x = f x"; ..;
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   787
          hence "abs (f x) = abs (g x)"; by simp;
8108
wenzelm
parents: 8107
diff changeset
   788
          also; from _ _ g_cont;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   789
          have "... <= function_norm E norm g * norm x";
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   790
          proof (rule norm_fx_le_norm_f_norm_x);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   791
            show "x:E"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   792
          qed;
8838
4eaa99f0d223 replaced rabs by overloaded abs;
wenzelm
parents: 8703
diff changeset
   793
          finally; show "abs (f x) <= function_norm E norm g * norm x"; .;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   794
        qed; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   795
        thus "?R <= ?L"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   796
        proof (rule fnorm_le_ub [OF f_norm f_cont]);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   797
          from g_cont; show "0r <= function_norm E norm g"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   798
        qed;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   799
      qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   800
    qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   801
  qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   802
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   803
8703
816d8f6513be Times -> <*>
nipkow
parents: 8674
diff changeset
   804
end;