src/HOL/Real/HahnBanach/HahnBanach.thy
author wenzelm
Thu, 06 Jan 2000 16:00:18 +0100
changeset 8109 aca11f954993
parent 8108 ce4bb031d664
child 8674 ac6c028e0249
permissions -rw-r--r--
obtain: renamed 'in' to 'where';
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);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    75
        show "is_subspace ?H E"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    76
          by (rule sup_subE, rule a) (simp!)+;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    77
        show "is_subspace F ?H"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    78
          by (rule sup_supF, rule a) (simp!)+;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    79
        show "graph F f <= graph ?H ?h"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    80
          by (rule sup_ext, rule a) (simp!)+;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    81
        show "ALL x::'a:?H. ?h x <= p x"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
    82
          by (rule sup_norm_pres, rule a) (simp!)+;
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;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   148
          have x0: "x0 ~= <0>";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   149
          proof (rule classical);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   150
            presume "x0 = <0>";
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
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   193
            def h0 == "\<lambda>x. let (y,a) = SOME (y, a). x = y + a <*> x0 
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"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   208
		    have "(SOME (y, a). t = y + a <*> x0 & y : H) 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   209
                         = (t,0r)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   210
		      by (rule decomp_H0_H, rule x0); 
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);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   231
		      show "x0 = <0> + x0"; by (simp!);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   232
		      from h; show "<0> : H"; ..;
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";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   251
		    by (rule h0_lf, rule x0) (simp!)+;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   252
		  show "is_subspace H0 E";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   253
		    by (unfold H0_def, rule vs_sum_subspace, 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   254
                        rule lin_subspace);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   255
		  have "is_subspace F H"; .;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   256
		  also; from h lin_vs; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   257
		  have [fold H0_def]: "is_subspace H (H + lin x0)"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   258
		  finally (subspace_trans [OF _ h]); 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   259
		  show f_h0: "is_subspace F H0"; .;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   260
		
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   261
		  show "graph F f <= graph H0 h0";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   262
		  proof (rule graph_extI);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   263
		    fix x; assume "x:F";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   264
		    have "f x = h x"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   265
		    also; have " ... = h x + 0r * xi"; by simp;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   266
		    also; have "... = (let (y,a) = (x, 0r) in h y + a * xi)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   267
		      by (simp add: Let_def);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   268
		    also; have 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   269
		      "(x, 0r) = (SOME (y, a). x = y + a <*> x0 & y : H)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   270
		      by (rule decomp_H0_H [RS sym], rule x0) (simp!)+;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   271
		    also; have 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   272
		      "(let (y,a) = (SOME (y,a). x = y + a <*> x0 & y : H)
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   273
                        in h y + a * xi) 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   274
                      = h0 x"; by (simp!);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   275
		    finally; show "f x = h0 x"; .;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   276
		  next;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   277
		    from f_h0; show "F <= H0"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   278
		  qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   279
		
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   280
		  show "ALL x:H0. h0 x <= p x";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   281
		    by (rule h0_norm_pres, rule x0);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   282
		qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   283
		thus "graph H0 h0 : M"; by (simp!);
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
        qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   288
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   289
txt {* So the graph $g$ of $h$ cannot be maximal. Contradiction.  *}; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   290
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   291
        hence "~ (ALL x:M. g <= x --> g = x)"; by simp;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   292
        thus ?thesis; by contradiction;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   293
      qed; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   294
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   295
txt {* Now we have a linear extension $h$ of $f$ to $E$ that is 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   296
bounded by $p$. *};
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   297
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   298
      thus "EX h. is_linearform E h & (ALL x:F. h x = f x) 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   299
                & (ALL x:E. h x <= p x)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   300
      proof (intro exI conjI);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   301
        assume eq: "H = E";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   302
	from eq; show "is_linearform E h"; by (simp!);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   303
	show "ALL x:F. h x = f x"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   304
	proof (intro ballI, rule sym);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   305
	  fix x; assume "x:F"; show "f x = h x "; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   306
	qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   307
	from eq; show "ALL x:E. h x <= p x"; by (force!);
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
qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   312
(*
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   313
theorem HahnBanach: 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   314
  "[| is_vectorspace E; is_subspace F E; is_seminorm E p; 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   315
  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
   316
  ==> EX h. is_linearform E h
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   317
          & (ALL x:F. h x = f x)
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   318
          & (ALL x:E. h x <= p x)";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   319
proof -;
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   320
  assume "is_vectorspace E" "is_subspace F E" "is_seminorm E p"
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   321
         "is_linearform F f" "ALL x:F. f x <= p x";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   322
  
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   323
  txt{* We define $M$ to be the set of all linear extensions 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   324
  of $f$ to superspaces of $F$, which are bounded by $p$. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   325
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   326
  def M == "norm_pres_extensions E p F f";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   327
  
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   328
  txt{* We show that $M$ is non-empty: *};
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   329
 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   330
  have aM: "graph F f : norm_pres_extensions E p F f";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   331
  proof (rule norm_pres_extensionI2);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   332
    have "is_vectorspace F"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   333
    thus "is_subspace F F"; ..;
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   334
  qed (blast!)+;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   335
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   336
  subsubsect {* Existence of a limit function *}; 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   337
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   338
  txt {* For every non-empty chain of norm-preserving extensions
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   339
  the union of all functions in the chain is again a norm-preserving
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   340
  extension. (The union is an upper bound for all elements. 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   341
  It is even the least upper bound, because every upper bound of $M$
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   342
  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
   343
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   344
  {{;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   345
    fix c; assume "c:chain M" "EX x. x:c";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   346
    have "Union c : M";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   347
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   348
    proof (unfold M_def, rule norm_pres_extensionI);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   349
      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
   350
              & is_linearform H h 
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   351
              & is_subspace H E 
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   352
              & is_subspace F H 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   353
              & graph F f <= graph H h
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   354
              & (ALL x::'a:H. h x <= p x)";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   355
      proof (intro exI conjI);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   356
        let ?H = "domain (Union c)";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   357
        let ?h = "funct (Union c)";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   358
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   359
        show a: "graph ?H ?h = Union c"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   360
        proof (rule graph_domain_funct);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   361
          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
   362
          show "z = y"; by (rule sup_definite);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   363
        qed;
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   364
        show "is_linearform ?H ?h";  
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   365
          by (simp! add: sup_lf a);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   366
        show "is_subspace ?H E"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   367
          by (rule sup_subE, rule a) (simp!)+;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   368
        show "is_subspace F ?H"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   369
          by (rule sup_supF, rule a) (simp!)+;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   370
        show "graph F f <= graph ?H ?h"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   371
          by (rule sup_ext, rule a) (simp!)+;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   372
        show "ALL x::'a:?H. ?h x <= p x"; 
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   373
          by (rule sup_norm_pres, rule a) (simp!)+;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   374
      qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   375
    qed;
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   376
  }};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   377
 
7927
b50446a33c16 update by Gertrud Bauer;
wenzelm
parents: 7917
diff changeset
   378
  txt {* According to Zorn's Lemma there is
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   379
  a maximal norm-preserving extension $g\in M$. *};
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   380
  
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   381
  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
   382
    by (simp! add: Zorn's_Lemma);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   383
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   384
  thus ?thesis;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   385
  proof;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   386
    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
   387
 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   388
    have ex_Hh: 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   389
      "EX H h. graph H h = g 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   390
           & is_linearform H h 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   391
           & is_subspace H E 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   392
           & is_subspace F H
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   393
           & graph F f <= graph H h
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   394
           & (ALL x:H. h x <= p x) "; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   395
      by (simp! add: norm_pres_extension_D);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   396
    thus ?thesis;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   397
    proof (elim exE conjE, intro exI);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   398
      fix H h; 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   399
      assume "graph H h = g" "is_linearform (H::'a set) h" 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   400
             "is_subspace H E" "is_subspace F H"
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   401
        and h_ext: "graph F f <= graph H h"
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   402
        and h_bound: "ALL x:H. h x <= p x";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   403
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   404
      have h: "is_vectorspace H"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   405
      have f: "is_vectorspace F"; ..;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   406
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   407
subsubsect {* The domain of the limit function *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   408
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   409
have eq: "H = E"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   410
proof (rule classical);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   411
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   412
txt {* Assume that the domain of the supremum is not $E$, *};
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   413
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   414
  assume "H ~= E";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   415
  have "H <= E"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   416
  hence "H < E"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   417
 
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   418
  txt{* then there exists an element $x_0$ in $E \setminus H$: *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   419
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   420
  hence "EX x0:E. x0~:H"; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   421
    by (rule set_less_imp_diff_not_empty);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   422
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   423
  txt {* We get that $h$ can be extended  in a 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   424
  norm-preserving way to some $H_0$. *};
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   425
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   426
  hence "EX H0 h0. g <= graph H0 h0 & g ~= graph H0 h0 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   427
                 & graph H0 h0 : M";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   428
  proof;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   429
    fix x0; assume "x0:E" "x0~:H";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   430
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   431
    have x0: "x0 ~= <0>";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   432
    proof (rule classical);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   433
      presume "x0 = <0>";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   434
      with h; have "x0:H"; by simp;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   435
      thus ?thesis; by contradiction;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   436
    qed blast;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   437
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   438
    txt {* Define $H_0$ as the (direct) sum of H and the 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   439
    linear closure of $x_0$. \label{ex-xi-use}*};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   440
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   441
    def H0 == "H + lin x0";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   442
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   443
    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
   444
                                    & xi <= p (y + x0) - h y";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   445
    proof (rule ex_xi);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   446
      fix u v; assume "u:H" "v:H";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   447
      from h; have "h v - h u = h (v - u)";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   448
         by (simp! add: linearform_diff);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   449
      also; from h_bound; have "... <= p (v - u)";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   450
        by (simp!);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   451
      also; have "v - u = x0 + - x0 + v + - u";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   452
        by (simp! add: diff_eq1);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   453
      also; have "... = v + x0 + - (u + x0)";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   454
        by (simp!);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   455
      also; have "... = (v + x0) - (u + x0)";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   456
        by (simp! add: diff_eq1);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   457
      also; have "p ... <= p (v + x0) + p (u + x0)";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   458
         by (rule seminorm_diff_subadditive) (simp!)+;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   459
      finally; have "h v - h u <= p (v + x0) + p (u + x0)"; .;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   460
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   461
      thus "- p (u + x0) - h u <= p (v + x0) - h v";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   462
        by (rule real_diff_ineq_swap);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   463
    qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   464
    hence "EX h0. g <= graph H0 h0 & g ~= graph H0 h0
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   465
               & graph H0 h0 : M"; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   466
    proof (elim exE, intro exI conjI);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   467
      fix xi; 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   468
      assume a: "ALL y:H. - p (y + x0) - h y <= xi 
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   469
                        & xi <= p (y + x0) - h y";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   470
     
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   471
      txt {* Define $h_0$ as the canonical linear extension 
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   472
      of $h$ on $H_0$:*};  
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   473
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   474
      def h0 ==
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   475
          "\<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
   476
               in (h y) + a * xi";
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   477
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   478
      txt {* We get that the graph of $h_0$ extends that of
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   479
      $h$. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   480
        
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   481
      have  "graph H h <= graph H0 h0"; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   482
      proof (rule graph_extI);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   483
        fix t; assume "t:H"; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   484
        have "(SOME (y, a). t = y + a <*> x0 & y : H) = (t,0r)";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   485
          by (rule decomp_H0_H, rule x0); 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   486
        thus "h t = h0 t"; by (simp! add: Let_def);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   487
      next;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   488
        show "H <= H0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   489
        proof (rule subspace_subset);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   490
	  show "is_subspace H H0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   491
          proof (unfold H0_def, rule subspace_vs_sum1);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   492
       	    show "is_vectorspace H"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   493
            show "is_vectorspace (lin x0)"; ..;
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   494
          qed;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   495
        qed;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   496
      qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   497
      thus "g <= graph H0 h0"; by (simp!);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   498
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   499
      txt {* Apparently $h_0$ is not equal to $h$. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   500
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   501
      have "graph H h ~= graph H0 h0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   502
      proof;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   503
        assume e: "graph H h = graph H0 h0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   504
        have "x0 : H0"; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   505
        proof (unfold H0_def, rule vs_sumI);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   506
          show "x0 = <0> + x0"; by (simp!);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   507
          from h; show "<0> : H"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   508
          show "x0 : lin x0"; by (rule x_lin_x);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   509
        qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   510
        hence "(x0, h0 x0) : graph H0 h0"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   511
        with e; have "(x0, h0 x0) : graph H h"; by simp;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   512
        hence "x0 : H"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   513
        thus False; by contradiction;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   514
      qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   515
      thus "g ~= graph H0 h0"; by (simp!);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   516
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   517
      txt {* Furthermore  $h_0$ is a norm-preserving extension 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   518
     of $f$. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   519
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   520
      have "graph H0 h0 : norm_pres_extensions E p F f";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   521
      proof (rule norm_pres_extensionI2);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   522
        show "is_linearform H0 h0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   523
          by (rule h0_lf, rule x0) (simp!)+;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   524
        show "is_subspace H0 E";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   525
          by (unfold H0_def, rule vs_sum_subspace, 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   526
             rule lin_subspace);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   527
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   528
        have "is_subspace F H"; .;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   529
        also; from h lin_vs; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   530
	have [fold H0_def]: "is_subspace H (H + lin x0)"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   531
        finally (subspace_trans [OF _ h]); 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   532
	show f_h0: "is_subspace F H0"; .; (*** 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   533
        backwards:
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   534
        show f_h0: "is_subspace F H0"; .;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   535
        proof (rule subspace_trans [of F H H0]);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   536
          from h lin_vs; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   537
          have "is_subspace H (H + lin x0)"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   538
          thus "is_subspace H H0"; by (unfold H0_def);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   539
        qed; ***)
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   540
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   541
        show "graph F f <= graph H0 h0";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   542
        proof (rule graph_extI);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   543
          fix x; assume "x:F";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   544
          have "f x = h x"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   545
          also; have " ... = h x + 0r * xi"; by simp;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   546
          also; have "... = (let (y,a) = (x, 0r) in h y + a * xi)";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   547
            by (simp add: Let_def);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   548
          also; have 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   549
            "(x, 0r) = (SOME (y, a). x = y + a <*> x0 & y : H)";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   550
            by (rule decomp_H0_H [RS sym], rule x0) (simp!)+;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   551
          also; have 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   552
            "(let (y,a) = (SOME (y,a). x = y + a <*> x0 & y : H)
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   553
              in h y + a * xi) 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   554
             = h0 x"; by (simp!);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   555
          finally; show "f x = h0 x"; .;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   556
        next;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   557
          from f_h0; show "F <= H0"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   558
        qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   559
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   560
        show "ALL x:H0. h0 x <= p x";
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   561
          by (rule h0_norm_pres, rule x0) (assumption | simp!)+;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   562
      qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   563
      thus "graph H0 h0 : M"; by (simp!);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   564
    qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   565
    thus ?thesis; ..;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   566
  qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   567
7927
b50446a33c16 update by Gertrud Bauer;
wenzelm
parents: 7917
diff changeset
   568
  txt {* We have shown that $h$ can still be extended to 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   569
  some $h_0$, in contradiction to the assumption that 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   570
  $h$ is a maximal element. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   571
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   572
  hence "EX x:M. g <= x & g ~= x"; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   573
    by (elim exE conjE, intro bexI conjI);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   574
  hence "~ (ALL x:M. g <= x --> g = x)"; by simp;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   575
  thus ?thesis; by contradiction;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   576
qed; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   577
7927
b50446a33c16 update by Gertrud Bauer;
wenzelm
parents: 7917
diff changeset
   578
txt{* It follows $H = E$, and the thesis can be shown. *};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   579
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   580
show "is_linearform E h & (ALL x:F. h x = f x) 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   581
     & (ALL x:E. h x <= p x)";
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   582
proof (intro conjI); 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   583
  from eq; show "is_linearform E h"; by (simp!);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   584
  show "ALL x:F. h x = f x"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   585
  proof (intro ballI, rule sym);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   586
    fix x; assume "x:F"; show "f x = h x "; ..;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   587
  qed;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   588
  from eq; show "ALL x:E. h x <= p x"; by (force!);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   589
qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   590
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   591
qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   592
qed;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   593
qed;
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   594
*)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   595
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   596
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   597
subsection  {* Alternative formulation *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   598
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   599
text {* The following alternative formulation of the Hahn-Banach
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   600
Theorem\label{rabs-HahnBanach} uses the fact that for a real linear form
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   601
$f$ and a seminorm $p$ the
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   602
following inequations are equivalent:\footnote{This was shown in lemma
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   603
$\idt{rabs{\dsh}ineq{\dsh}iff}$ (see page \pageref{rabs-ineq-iff}).}
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   604
\begin{matharray}{ll}
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   605
\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
   606
\forall x\in H.\ap h\ap x\leq p\ap x\\
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   607
\end{matharray}
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   608
*};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   609
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   610
theorem rabs_HahnBanach:
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   611
  "[| is_vectorspace E; is_subspace F E; is_linearform F f; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   612
  is_seminorm E p; ALL x:F. rabs (f x) <= p x |]
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   613
  ==> EX g. is_linearform E g & (ALL x:F. g x = f x)
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   614
   & (ALL x:E. rabs (g x) <= p x)";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   615
proof -;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   616
  assume "is_vectorspace E" "is_subspace F E" "is_seminorm E p" 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   617
    "is_linearform F f"  "ALL x:F. rabs (f x) <= p x";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   618
  have "ALL x:F. f x <= p x";  by (rule rabs_ineq_iff [RS iffD1]);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   619
  hence "EX g. is_linearform E g & (ALL x:F. g x = f x) 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   620
              & (ALL x:E. g x <= p x)";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   621
    by (simp! only: HahnBanach);
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   622
  thus ?thesis; 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   623
  proof (elim exE conjE);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   624
    fix g; assume "is_linearform E g" "ALL x:F. g x = f x" 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   625
                  "ALL x:E. g x <= p x";
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   626
    hence "ALL x:E. rabs (g x) <= p x";
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   627
      by (simp! add: rabs_ineq_iff [OF subspace_refl]);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   628
    thus ?thesis; by (intro exI conjI);
7535
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
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   631
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   632
subsection {* The Hahn-Banach Theorem for normed spaces *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   633
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   634
text {* Every continuous linear form $f$ on a subspace $F$ of a
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   635
norm space $E$, can be extended to a continuous linear form $g$ on
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   636
$E$ such that $\fnorm{f} = \fnorm {g}$. *};
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   637
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   638
theorem norm_HahnBanach:
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   639
  "[| is_normed_vectorspace E norm; is_subspace F E; 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   640
  is_linearform F f; is_continuous F norm f |] 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   641
  ==> EX g. is_linearform E g
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   642
         & is_continuous E norm g 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   643
         & (ALL x:F. g x = f x) 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   644
         & 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
   645
proof -;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   646
  assume e_norm: "is_normed_vectorspace E norm";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   647
  assume f: "is_subspace F E" "is_linearform F f";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   648
  assume f_cont: "is_continuous F norm f";
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   649
  have e: "is_vectorspace E"; ..;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   650
  with _; have f_norm: "is_normed_vectorspace F norm"; ..;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   651
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   652
  txt{* We define a function $p$ on $E$ as follows:
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   653
  \begin{matharray}{l}
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   654
  p \: x = \fnorm f \cdot \norm x\\
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   655
  \end{matharray}
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   656
  *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   657
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   658
  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
   659
  
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   660
  txt{* $p$ is a seminorm on $E$: *};
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   661
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   662
  have q: "is_seminorm E p";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   663
  proof;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   664
    fix x y a; assume "x:E" "y:E";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   665
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   666
    txt{* $p$ is positive definite: *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   667
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   668
    show "0r <= p x";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   669
    proof (unfold p_def, rule real_le_mult_order);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   670
      from _ f_norm; show "0r <= function_norm F norm f"; ..;
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   671
      show "0r <= norm x"; ..;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   672
    qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   673
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   674
    txt{* $p$ is absolutely homogenous: *};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   675
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   676
    show "p (a <*> x) = rabs a * p x";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   677
    proof -; 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   678
      have "p (a <*> x) = function_norm F norm f * norm (a <*> x)";
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   679
        by (simp!);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   680
      also; have "norm (a <*> x) = rabs a * norm x"; 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   681
        by (rule normed_vs_norm_rabs_homogenous);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   682
      also; have "function_norm F norm f * (rabs a * norm x) 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   683
        = rabs a * (function_norm F norm f * norm x)";
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   684
        by (simp! only: real_mult_left_commute);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   685
      also; have "... = rabs a * p x"; by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   686
      finally; show ?thesis; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   687
    qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   688
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   689
    txt{* Furthermore, $p$ is subadditive: *};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   690
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   691
    show "p (x + y) <= p x + p y";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   692
    proof -;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   693
      have "p (x + y) = function_norm F norm f * norm (x + y)";
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   694
        by (simp!);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   695
      also; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   696
      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
   697
      proof (rule real_mult_le_le_mono1);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   698
        from _ f_norm; show "0r <= function_norm F norm f"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   699
        show "norm (x + y) <= norm x + norm y"; ..;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   700
      qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   701
      also; have "... = function_norm F norm f * norm x 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   702
                        + function_norm F norm f * norm y";
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   703
        by (simp! only: real_add_mult_distrib2);
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   704
      finally; show ?thesis; by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   705
    qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   706
  qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   707
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   708
  txt{* $f$ is bounded by $p$. *}; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   709
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   710
  have "ALL x:F. rabs (f x) <= p x";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   711
  proof;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   712
    fix x; assume "x:F";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   713
     from f_norm; show "rabs (f x) <= p x"; 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   714
       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
   715
  qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   716
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   717
  txt{* Using the fact that $p$ is a seminorm and 
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   718
  $f$ is bounded by $p$ we can apply the Hahn-Banach Theorem 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   719
  for real vector spaces. 
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   720
  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
   721
  $g$ on the whole vector space $E$. *};
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   722
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   723
  with e f q; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   724
  have "EX g. is_linearform E g & (ALL x:F. g x = f x) 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   725
            & (ALL x:E. rabs (g x) <= p x)";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   726
    by (simp! add: rabs_HahnBanach);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   727
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   728
  thus ?thesis;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   729
  proof (elim exE conjE); 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   730
    fix g;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   731
    assume "is_linearform E g" and a: "ALL x:F. g x = f x" 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   732
       and b: "ALL x:E. rabs (g x) <= p x";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   733
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   734
    show "EX g. is_linearform E g 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   735
            & is_continuous E norm g 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   736
            & (ALL x:F. g x = f x) 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   737
            & function_norm E norm g = function_norm F norm f";
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   738
    proof (intro exI conjI);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   739
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   740
    txt{* We furthermore have to show that 
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   741
    $g$ is also continuous: *};
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   742
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   743
      show g_cont: "is_continuous E norm g";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   744
      proof;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   745
        fix x; assume "x:E";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   746
        from b [RS bspec, OF this]; 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   747
        show "rabs (g x) <= function_norm F norm f * norm x";
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   748
          by (unfold p_def);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   749
      qed; 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   750
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   751
      txt {* To complete the proof, we show that 
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   752
      $\fnorm g = \fnorm f$. \label{order_antisym} *};
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   753
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   754
      show "function_norm E norm g = function_norm F norm f"
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   755
        (is "?L = ?R");
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   756
      proof (rule order_antisym);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   757
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   758
        txt{* First we show $\fnorm g \leq \fnorm f$.  The function norm
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   759
        $\fnorm g$ is defined as the smallest $c\in\bbbR$ such that
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   760
        \begin{matharray}{l}
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   761
        \All {x\in E} {|g\ap x| \leq c \cdot \norm x}
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   762
        \end{matharray}
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   763
        Furthermore holds
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   764
        \begin{matharray}{l}
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   765
        \All {x\in E} {|g\ap x| \leq \fnorm f \cdot \norm x}
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   766
        \end{matharray}
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   767
        *};
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   768
 
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   769
        have "ALL x:E. rabs (g x) <= function_norm F norm f * norm x";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   770
        proof;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   771
          fix x; assume "x:E"; 
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   772
          show "rabs (g x) <= function_norm F norm f * norm x";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   773
            by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   774
        qed;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   775
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   776
        with _ g_cont; show "?L <= ?R";
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   777
        proof (rule fnorm_le_ub);
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   778
          from f_cont f_norm; show "0r <= function_norm F norm f"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   779
        qed;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   780
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   781
        txt{* The other direction is achieved by a similar 
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   782
        argument. *};
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   783
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   784
        have "ALL x:F. rabs (f x) <= function_norm E norm g * norm x";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   785
        proof;
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   786
          fix x; assume "x : F"; 
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   787
          from a; have "g x = f x"; ..;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   788
          hence "rabs (f x) = rabs (g x)"; by simp;
8108
wenzelm
parents: 8107
diff changeset
   789
          also; from _ _ g_cont;
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   790
          have "... <= function_norm E norm g * norm x";
8084
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   791
          proof (rule norm_fx_le_norm_f_norm_x);
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   792
            show "x:E"; ..;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   793
          qed;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   794
          finally; show "rabs (f x) <= function_norm E norm g * norm x"; .;
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   795
        qed; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   796
        thus "?R <= ?L"; 
c3790c6b4470 small changes;
bauerg
parents: 7978
diff changeset
   797
        proof (rule fnorm_le_ub [OF f_norm f_cont]);
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   798
          from g_cont; show "0r <= function_norm E norm g"; ..;
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents: 7808
diff changeset
   799
        qed;
7535
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
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   804
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   805
end;