src/HOL/Real/HahnBanach/HahnBanach.thy
changeset 8703 816d8f6513be
parent 8674 ac6c028e0249
child 8838 4eaa99f0d223
equal deleted inserted replaced
8702:78b7010db847 8703:816d8f6513be
   143               have "H <= E"; ..;
   143               have "H <= E"; ..;
   144               thus "H < E"; ..;
   144               thus "H < E"; ..;
   145             qed;
   145             qed;
   146             thus ?thesis; by blast;
   146             thus ?thesis; by blast;
   147           qed;
   147           qed;
   148           have x0: "x0 ~= <0>";
   148           have x0: "x0 ~= 00";
   149           proof (rule classical);
   149           proof (rule classical);
   150             presume "x0 = <0>";
   150             presume "x0 = 00";
   151             with h; have "x0:H"; by simp;
   151             with h; have "x0:H"; by simp;
   152             thus ?thesis; by contradiction;
   152             thus ?thesis; by contradiction;
   153           qed blast;
   153           qed blast;
   154 
   154 
   155 txt {* Define $H_0$ as the direct sum of $H$ and the linear closure of $x_0$.  *};
   155 txt {* Define $H_0$ as the direct sum of $H$ and the linear closure of $x_0$.  *};
   188               thus ?thesis; by rule rule;
   188               thus ?thesis; by rule rule;
   189             qed;
   189             qed;
   190 
   190 
   191 txt {* Define the extension $h_0$ of $h$ to $H_0$ using $\xi$.  *};
   191 txt {* Define the extension $h_0$ of $h$ to $H_0$ using $\xi$.  *};
   192 
   192 
   193             def h0 == "\\<lambda>x. let (y,a) = SOME (y, a). x = y + a <*> x0 
   193             def h0 == "\\<lambda>x. let (y,a) = SOME (y, a). x = y + a (*) x0 
   194                                                   & y:H
   194                                                   & y:H
   195                            in (h y) + a * xi";
   195                            in (h y) + a * xi";
   196             show ?thesis;
   196             show ?thesis;
   197             proof;
   197             proof;
   198  
   198  
   203 		show "g <= graph H0 h0";
   203 		show "g <= graph H0 h0";
   204 		proof -;
   204 		proof -;
   205 		  have  "graph H h <= graph H0 h0";
   205 		  have  "graph H h <= graph H0 h0";
   206                   proof (rule graph_extI);
   206                   proof (rule graph_extI);
   207 		    fix t; assume "t:H"; 
   207 		    fix t; assume "t:H"; 
   208 		    have "(SOME (y, a). t = y + a <*> x0 & y : H)
   208 		    have "(SOME (y, a). t = y + a (*) x0 & y : H)
   209                          = (t,0r)";
   209                          = (t,0r)";
   210 		      by (rule decomp_H0_H [OF _ _ _ _ _ x0]);
   210 		      by (rule decomp_H0_H [OF _ _ _ _ _ x0]);
   211 		    thus "h t = h0 t"; by (simp! add: Let_def);
   211 		    thus "h t = h0 t"; by (simp! add: Let_def);
   212 		  next;
   212 		  next;
   213 		    show "H <= H0";
   213 		    show "H <= H0";
   226 		  have "graph H h ~= graph H0 h0";
   226 		  have "graph H h ~= graph H0 h0";
   227 		  proof;
   227 		  proof;
   228 		    assume e: "graph H h = graph H0 h0";
   228 		    assume e: "graph H h = graph H0 h0";
   229 		    have "x0 : H0"; 
   229 		    have "x0 : H0"; 
   230 		    proof (unfold H0_def, rule vs_sumI);
   230 		    proof (unfold H0_def, rule vs_sumI);
   231 		      show "x0 = <0> + x0"; by (simp!);
   231 		      show "x0 = 00 + x0"; by (simp!);
   232 		      from h; show "<0> : H"; ..;
   232 		      from h; show "00 : H"; ..;
   233 		      show "x0 : lin x0"; by (rule x_lin_x);
   233 		      show "x0 : lin x0"; by (rule x_lin_x);
   234 		    qed;
   234 		    qed;
   235 		    hence "(x0, h0 x0) : graph H0 h0"; ..;
   235 		    hence "(x0, h0 x0) : graph H0 h0"; ..;
   236 		    with e; have "(x0, h0 x0) : graph H h"; by simp;
   236 		    with e; have "(x0, h0 x0) : graph H h"; by simp;
   237 		    hence "x0 : H"; ..;
   237 		    hence "x0 : H"; ..;
   263 		    have "f x = h x"; ..;
   263 		    have "f x = h x"; ..;
   264 		    also; have " ... = h x + 0r * xi"; by simp;
   264 		    also; have " ... = h x + 0r * xi"; by simp;
   265 		    also; have "... = (let (y,a) = (x, 0r) in h y + a * xi)";
   265 		    also; have "... = (let (y,a) = (x, 0r) in h y + a * xi)";
   266 		      by (simp add: Let_def);
   266 		      by (simp add: Let_def);
   267 		    also; have 
   267 		    also; have 
   268 		      "(x, 0r) = (SOME (y, a). x = y + a <*> x0 & y : H)";
   268 		      "(x, 0r) = (SOME (y, a). x = y + a (*) x0 & y : H)";
   269 		      by (rule decomp_H0_H [RS sym, OF _ _ _ _ _ x0]) (simp!)+;
   269 		      by (rule decomp_H0_H [RS sym, OF _ _ _ _ _ x0]) (simp!)+;
   270 		    also; have 
   270 		    also; have 
   271 		      "(let (y,a) = (SOME (y,a). x = y + a <*> x0 & y : H)
   271 		      "(let (y,a) = (SOME (y,a). x = y + a (*) x0 & y : H)
   272                         in h y + a * xi) 
   272                         in h y + a * xi) 
   273                       = h0 x"; by (simp!);
   273                       = h0 x"; by (simp!);
   274 		    finally; show "f x = h0 x"; .;
   274 		    finally; show "f x = h0 x"; .;
   275 		  next;
   275 		  next;
   276 		    from f_h0; show "F <= H0"; ..;
   276 		    from f_h0; show "F <= H0"; ..;
   425   hence "EX H0 h0. g <= graph H0 h0 & g ~= graph H0 h0 
   425   hence "EX H0 h0. g <= graph H0 h0 & g ~= graph H0 h0 
   426                  & graph H0 h0 : M";
   426                  & graph H0 h0 : M";
   427   proof;
   427   proof;
   428     fix x0; assume "x0:E" "x0~:H";
   428     fix x0; assume "x0:E" "x0~:H";
   429 
   429 
   430     have x0: "x0 ~= <0>";
   430     have x0: "x0 ~= 00";
   431     proof (rule classical);
   431     proof (rule classical);
   432       presume "x0 = <0>";
   432       presume "x0 = 00";
   433       with h; have "x0:H"; by simp;
   433       with h; have "x0:H"; by simp;
   434       thus ?thesis; by contradiction;
   434       thus ?thesis; by contradiction;
   435     qed blast;
   435     qed blast;
   436 
   436 
   437     txt {* Define $H_0$ as the (direct) sum of H and the 
   437     txt {* Define $H_0$ as the (direct) sum of H and the 
   469      
   469      
   470       txt {* Define $h_0$ as the canonical linear extension 
   470       txt {* Define $h_0$ as the canonical linear extension 
   471       of $h$ on $H_0$:*};  
   471       of $h$ on $H_0$:*};  
   472 
   472 
   473       def h0 ==
   473       def h0 ==
   474           "\\<lambda>x. let (y,a) = SOME (y, a). x = y + a <*> x0 & y:H
   474           "\\<lambda>x. let (y,a) = SOME (y, a). x = y + a ( * ) x0 & y:H
   475                in (h y) + a * xi";
   475                in (h y) + a * xi";
   476 
   476 
   477       txt {* We get that the graph of $h_0$ extends that of
   477       txt {* We get that the graph of $h_0$ extends that of
   478       $h$. *};
   478       $h$. *};
   479         
   479         
   480       have  "graph H h <= graph H0 h0"; 
   480       have  "graph H h <= graph H0 h0"; 
   481       proof (rule graph_extI);
   481       proof (rule graph_extI);
   482         fix t; assume "t:H"; 
   482         fix t; assume "t:H"; 
   483         have "(SOME (y, a). t = y + a <*> x0 & y : H) = (t,0r)";
   483         have "(SOME (y, a). t = y + a ( * ) x0 & y : H) = (t,0r)";
   484           by (rule decomp_H0_H, rule x0); 
   484           by (rule decomp_H0_H, rule x0); 
   485         thus "h t = h0 t"; by (simp! add: Let_def);
   485         thus "h t = h0 t"; by (simp! add: Let_def);
   486       next;
   486       next;
   487         show "H <= H0";
   487         show "H <= H0";
   488         proof (rule subspace_subset);
   488         proof (rule subspace_subset);
   500       have "graph H h ~= graph H0 h0";
   500       have "graph H h ~= graph H0 h0";
   501       proof;
   501       proof;
   502         assume e: "graph H h = graph H0 h0";
   502         assume e: "graph H h = graph H0 h0";
   503         have "x0 : H0"; 
   503         have "x0 : H0"; 
   504         proof (unfold H0_def, rule vs_sumI);
   504         proof (unfold H0_def, rule vs_sumI);
   505           show "x0 = <0> + x0"; by (simp!);
   505           show "x0 = 00 + x0"; by (simp!);
   506           from h; show "<0> : H"; ..;
   506           from h; show "00 : H"; ..;
   507           show "x0 : lin x0"; by (rule x_lin_x);
   507           show "x0 : lin x0"; by (rule x_lin_x);
   508         qed;
   508         qed;
   509         hence "(x0, h0 x0) : graph H0 h0"; ..;
   509         hence "(x0, h0 x0) : graph H0 h0"; ..;
   510         with e; have "(x0, h0 x0) : graph H h"; by simp;
   510         with e; have "(x0, h0 x0) : graph H h"; by simp;
   511         hence "x0 : H"; ..;
   511         hence "x0 : H"; ..;
   543           have "f x = h x"; ..;
   543           have "f x = h x"; ..;
   544           also; have " ... = h x + 0r * xi"; by simp;
   544           also; have " ... = h x + 0r * xi"; by simp;
   545           also; have "... = (let (y,a) = (x, 0r) in h y + a * xi)";
   545           also; have "... = (let (y,a) = (x, 0r) in h y + a * xi)";
   546             by (simp add: Let_def);
   546             by (simp add: Let_def);
   547           also; have 
   547           also; have 
   548             "(x, 0r) = (SOME (y, a). x = y + a <*> x0 & y : H)";
   548             "(x, 0r) = (SOME (y, a). x = y + a ( * ) x0 & y : H)";
   549             by (rule decomp_H0_H [RS sym], rule x0) (simp!)+;
   549             by (rule decomp_H0_H [RS sym], rule x0) (simp!)+;
   550           also; have 
   550           also; have 
   551             "(let (y,a) = (SOME (y,a). x = y + a <*> x0 & y : H)
   551             "(let (y,a) = (SOME (y,a). x = y + a ( * ) x0 & y : H)
   552               in h y + a * xi) 
   552               in h y + a * xi) 
   553              = h0 x"; by (simp!);
   553              = h0 x"; by (simp!);
   554           finally; show "f x = h0 x"; .;
   554           finally; show "f x = h0 x"; .;
   555         next;
   555         next;
   556           from f_h0; show "F <= H0"; ..;
   556           from f_h0; show "F <= H0"; ..;
   670       show "0r <= norm x"; ..;
   670       show "0r <= norm x"; ..;
   671     qed;
   671     qed;
   672 
   672 
   673     txt{* $p$ is absolutely homogenous: *};
   673     txt{* $p$ is absolutely homogenous: *};
   674 
   674 
   675     show "p (a <*> x) = rabs a * p x";
   675     show "p (a (*) x) = rabs a * p x";
   676     proof -; 
   676     proof -; 
   677       have "p (a <*> x) = function_norm F norm f * norm (a <*> x)";
   677       have "p (a (*) x) = function_norm F norm f * norm (a (*) x)";
   678         by (simp!);
   678         by (simp!);
   679       also; have "norm (a <*> x) = rabs a * norm x"; 
   679       also; have "norm (a (*) x) = rabs a * norm x"; 
   680         by (rule normed_vs_norm_rabs_homogenous);
   680         by (rule normed_vs_norm_rabs_homogenous);
   681       also; have "function_norm F norm f * (rabs a * norm x) 
   681       also; have "function_norm F norm f * (rabs a * norm x) 
   682         = rabs a * (function_norm F norm f * norm x)";
   682         = rabs a * (function_norm F norm f * norm x)";
   683         by (simp! only: real_mult_left_commute);
   683         by (simp! only: real_mult_left_commute);
   684       also; have "... = rabs a * p x"; by (simp!);
   684       also; have "... = rabs a * p x"; by (simp!);