src/HOL/Real/HahnBanach/NormedSpace.thy
changeset 7808 fd019ac3485f
parent 7566 c5a3f980a7af
child 7917 5e5b9813cce7
equal deleted inserted replaced
7807:6a102f74ad0a 7808:fd019ac3485f
     1 (*  Title:      HOL/Real/HahnBanach/NormedSpace.thy
     1 (*  Title:      HOL/Real/HahnBanach/NormedSpace.thy
     2     ID:         $Id$
     2     ID:         $Id$
     3     Author:     Gertrud Bauer, TU Munich
     3     Author:     Gertrud Bauer, TU Munich
     4 *)
     4 *)
     5 
     5 
       
     6 header {* Normed vector spaces *};
       
     7 
     6 theory NormedSpace =  Subspace:;
     8 theory NormedSpace =  Subspace:;
     7 
     9 
     8 
    10 
     9 section {* normed vector spaces *};
       
    10 
    11 
    11 subsection {* quasinorm *};
    12 subsection {* Quasinorms *};
       
    13 
    12 
    14 
    13 constdefs
    15 constdefs
    14   is_quasinorm :: "['a set,  'a => real] => bool"
    16   is_quasinorm :: "['a set,  'a => real] => bool"
    15   "is_quasinorm V norm == ALL x: V. ALL y:V. ALL a. 
    17   "is_quasinorm V norm == ALL x: V. ALL y:V. ALL a. 
    16         0r <= norm x 
    18         0r <= norm x 
    17       & norm (a [*] x) = (rabs a) * (norm x)
    19       & norm (a [*] x) = (rabs a) * (norm x)
    18       & norm (x [+] y) <= norm x + norm y";
    20       & norm (x [+] y) <= norm x + norm y";
    19 
    21 
    20 lemma is_quasinormI[intro]: 
    22 lemma is_quasinormI [intro]: 
    21   "[| !! x y a. [| x:V; y:V|] ==>  0r <= norm x;
    23   "[| !! x y a. [| x:V; y:V|] ==>  0r <= norm x;
    22       !! x a. x:V ==> norm (a [*] x) = (rabs a) * (norm x);
    24       !! x a. x:V ==> norm (a [*] x) = (rabs a) * (norm x);
    23       !! x y. [|x:V; y:V |] ==> norm (x [+] y) <= norm x + norm y |] 
    25       !! x y. [|x:V; y:V |] ==> norm (x [+] y) <= norm x + norm y |] 
    24     ==> is_quasinorm V norm";
    26     ==> is_quasinorm V norm";
    25   by (unfold is_quasinorm_def, force);
    27   by (unfold is_quasinorm_def, force);
    27 lemma quasinorm_ge_zero [intro!!]:
    29 lemma quasinorm_ge_zero [intro!!]:
    28   "[| is_quasinorm V norm; x:V |] ==> 0r <= norm x";
    30   "[| is_quasinorm V norm; x:V |] ==> 0r <= norm x";
    29   by (unfold is_quasinorm_def, force);
    31   by (unfold is_quasinorm_def, force);
    30 
    32 
    31 lemma quasinorm_mult_distrib: 
    33 lemma quasinorm_mult_distrib: 
    32   "[| is_quasinorm V norm; x:V |] ==> norm (a [*] x) = (rabs a) * (norm x)";
    34   "[| is_quasinorm V norm; x:V |] 
       
    35   ==> norm (a [*] x) = (rabs a) * (norm x)";
    33   by (unfold is_quasinorm_def, force);
    36   by (unfold is_quasinorm_def, force);
    34 
    37 
    35 lemma quasinorm_triangle_ineq: 
    38 lemma quasinorm_triangle_ineq: 
    36   "[| is_quasinorm V norm; x:V; y:V |] ==> norm (x [+] y) <= norm x + norm y";
    39   "[| is_quasinorm V norm; x:V; y:V |] 
       
    40   ==> norm (x [+] y) <= norm x + norm y";
    37   by (unfold is_quasinorm_def, force);
    41   by (unfold is_quasinorm_def, force);
    38 
    42 
    39 lemma quasinorm_diff_triangle_ineq: 
    43 lemma quasinorm_diff_triangle_ineq: 
    40   "[| is_quasinorm V norm; x:V; y:V; is_vectorspace V |] ==> norm (x [-] y) <= norm x + norm y";
    44   "[| is_quasinorm V norm; x:V; y:V; is_vectorspace V |] 
       
    45   ==> norm (x [-] y) <= norm x + norm y";
    41 proof -;
    46 proof -;
    42   assume "is_quasinorm V norm" "x:V" "y:V" "is_vectorspace V";
    47   assume "is_quasinorm V norm" "x:V" "y:V" "is_vectorspace V";
    43   have "norm (x [-] y) = norm (x [+] - 1r [*] y)";  by (simp add: diff_def negate_def);
    48   have "norm (x [-] y) = norm (x [+] - 1r [*] y)";  
    44   also; have "... <= norm x + norm  (- 1r [*] y)"; by (simp! add: quasinorm_triangle_ineq);
    49     by (simp add: diff_def negate_def);
    45   also; have "norm (- 1r [*] y) = rabs (- 1r) * norm y"; by (rule quasinorm_mult_distrib);
    50   also; have "... <= norm x + norm  (- 1r [*] y)"; 
       
    51     by (simp! add: quasinorm_triangle_ineq);
       
    52   also; have "norm (- 1r [*] y) = rabs (- 1r) * norm y"; 
       
    53     by (rule quasinorm_mult_distrib);
    46   also; have "rabs (- 1r) = 1r"; by (rule rabs_minus_one);
    54   also; have "rabs (- 1r) = 1r"; by (rule rabs_minus_one);
    47   finally; show "norm (x [-] y) <= norm x + norm y"; by simp;
    55   finally; show "norm (x [-] y) <= norm x + norm y"; by simp;
    48 qed;
    56 qed;
    49 
    57 
    50 lemma quasinorm_minus: 
    58 lemma quasinorm_minus: 
    51   "[| is_quasinorm V norm; x:V; is_vectorspace V |] ==> norm ([-] x) = norm x";
    59   "[| is_quasinorm V norm; x:V; is_vectorspace V |] 
       
    60   ==> norm ([-] x) = norm x";
    52 proof -;
    61 proof -;
    53   assume "is_quasinorm V norm" "x:V" "is_vectorspace V";
    62   assume "is_quasinorm V norm" "x:V" "is_vectorspace V";
    54   have "norm ([-] x) = norm (-1r [*] x)"; by (unfold negate_def) force;
    63   have "norm ([-] x) = norm (-1r [*] x)"; by (unfold negate_def) force;
    55   also; have "... = rabs (-1r) * norm x"; by (rule quasinorm_mult_distrib);
    64   also; have "... = rabs (-1r) * norm x"; 
       
    65     by (rule quasinorm_mult_distrib);
    56   also; have "rabs (- 1r) = 1r"; by (rule rabs_minus_one);
    66   also; have "rabs (- 1r) = 1r"; by (rule rabs_minus_one);
    57   finally; show "norm ([-] x) = norm x"; by simp;
    67   finally; show "norm ([-] x) = norm x"; by simp;
    58 qed;
    68 qed;
    59 
    69 
    60 
    70 
    61 subsection {* norm *};
    71 
       
    72 subsection {* Norms *};
       
    73 
    62 
    74 
    63 constdefs
    75 constdefs
    64   is_norm :: "['a set, 'a => real] => bool"
    76   is_norm :: "['a set, 'a => real] => bool"
    65   "is_norm V norm == ALL x: V.  is_quasinorm V norm 
    77   "is_norm V norm == ALL x: V.  is_quasinorm V norm 
    66       & (norm x = 0r) = (x = <0>)";
    78       & (norm x = 0r) = (x = <0>)";
    67 
    79 
    68 lemma is_normI [intro]: 
    80 lemma is_normI [intro]: 
    69   "ALL x: V.  is_quasinorm V norm  & (norm x = 0r) = (x = <0>) ==> is_norm V norm";
    81   "ALL x: V.  is_quasinorm V norm  & (norm x = 0r) = (x = <0>) 
       
    82   ==> is_norm V norm";
    70   by (unfold is_norm_def, force);
    83   by (unfold is_norm_def, force);
    71 
    84 
    72 lemma norm_is_quasinorm [intro!!]: "[| is_norm V norm; x:V |] ==> is_quasinorm V norm";
    85 lemma norm_is_quasinorm [intro!!]: 
       
    86   "[| is_norm V norm; x:V |] ==> is_quasinorm V norm";
    73   by (unfold is_norm_def, force);
    87   by (unfold is_norm_def, force);
    74 
    88 
    75 lemma norm_zero_iff: "[| is_norm V norm; x:V |] ==> (norm x = 0r) = (x = <0>)";
    89 lemma norm_zero_iff: 
       
    90   "[| is_norm V norm; x:V |] ==> (norm x = 0r) = (x = <0>)";
    76   by (unfold is_norm_def, force);
    91   by (unfold is_norm_def, force);
    77 
    92 
    78 lemma norm_ge_zero [intro!!]:
    93 lemma norm_ge_zero [intro!!]:
    79   "[|is_norm V norm; x:V |] ==> 0r <= norm x";
    94   "[|is_norm V norm; x:V |] ==> 0r <= norm x";
    80   by (unfold is_norm_def is_quasinorm_def, force);
    95   by (unfold is_norm_def is_quasinorm_def, force);
    81 
    96 
    82 
    97 
    83 subsection {* normed vector space *};
    98 subsection {* Normed vector spaces *};
       
    99 
    84 
   100 
    85 constdefs
   101 constdefs
    86   is_normed_vectorspace :: "['a set, 'a => real] => bool"
   102   is_normed_vectorspace :: "['a set, 'a => real] => bool"
    87   "is_normed_vectorspace V norm ==
   103   "is_normed_vectorspace V norm ==
    88       is_vectorspace V &
   104       is_vectorspace V &
    89       is_norm V norm";
   105       is_norm V norm";
    90 
   106 
    91 lemma normed_vsI [intro]: 
   107 lemma normed_vsI [intro]: 
    92   "[| is_vectorspace V; is_norm V norm |] ==> is_normed_vectorspace V norm";
   108   "[| is_vectorspace V; is_norm V norm |] 
       
   109   ==> is_normed_vectorspace V norm";
    93   by (unfold is_normed_vectorspace_def) blast; 
   110   by (unfold is_normed_vectorspace_def) blast; 
    94 
   111 
    95 lemma normed_vs_vs [intro!!]: "is_normed_vectorspace V norm ==> is_vectorspace V";
   112 lemma normed_vs_vs [intro!!]: 
       
   113   "is_normed_vectorspace V norm ==> is_vectorspace V";
    96   by (unfold is_normed_vectorspace_def) force;
   114   by (unfold is_normed_vectorspace_def) force;
    97 
   115 
    98 lemma normed_vs_norm [intro!!]: "is_normed_vectorspace V norm ==> is_norm V norm";
   116 lemma normed_vs_norm [intro!!]: 
       
   117   "is_normed_vectorspace V norm ==> is_norm V norm";
    99   by (unfold is_normed_vectorspace_def, elim conjE);
   118   by (unfold is_normed_vectorspace_def, elim conjE);
   100 
   119 
   101 lemma normed_vs_norm_ge_zero [intro!!]: "[| is_normed_vectorspace V norm; x:V |] ==> 0r <= norm x";
   120 lemma normed_vs_norm_ge_zero [intro!!]: 
       
   121   "[| is_normed_vectorspace V norm; x:V |] ==> 0r <= norm x";
   102   by (unfold is_normed_vectorspace_def, rule, elim conjE);
   122   by (unfold is_normed_vectorspace_def, rule, elim conjE);
   103 
   123 
   104 lemma normed_vs_norm_gt_zero [intro!!]: 
   124 lemma normed_vs_norm_gt_zero [intro!!]: 
   105   "[| is_normed_vectorspace V norm; x:V; x ~= <0> |] ==> 0r < norm x";
   125   "[| is_normed_vectorspace V norm; x:V; x ~= <0> |] ==> 0r < norm x";
   106 proof (unfold is_normed_vectorspace_def, elim conjE);
   126 proof (unfold is_normed_vectorspace_def, elim conjE);
   115   qed (rule sym);
   135   qed (rule sym);
   116   finally; show "0r < norm x"; .;
   136   finally; show "0r < norm x"; .;
   117 qed;
   137 qed;
   118 
   138 
   119 lemma normed_vs_norm_mult_distrib [intro!!]: 
   139 lemma normed_vs_norm_mult_distrib [intro!!]: 
   120   "[| is_normed_vectorspace V norm; x:V |] ==> norm (a [*] x) = (rabs a) * (norm x)";
   140   "[| is_normed_vectorspace V norm; x:V |] 
   121   by (rule quasinorm_mult_distrib, rule norm_is_quasinorm, rule normed_vs_norm);
   141   ==> norm (a [*] x) = (rabs a) * (norm x)";
       
   142   by (rule quasinorm_mult_distrib, rule norm_is_quasinorm, 
       
   143       rule normed_vs_norm);
   122 
   144 
   123 lemma normed_vs_norm_triangle_ineq [intro!!]: 
   145 lemma normed_vs_norm_triangle_ineq [intro!!]: 
   124   "[| is_normed_vectorspace V norm; x:V; y:V |] ==> norm (x [+] y) <= norm x + norm y";
   146   "[| is_normed_vectorspace V norm; x:V; y:V |] 
   125   by (rule quasinorm_triangle_ineq, rule norm_is_quasinorm, rule normed_vs_norm);
   147   ==> norm (x [+] y) <= norm x + norm y";
       
   148   by (rule quasinorm_triangle_ineq, rule norm_is_quasinorm, 
       
   149      rule normed_vs_norm);
   126 
   150 
   127 lemma subspace_normed_vs [intro!!]: 
   151 lemma subspace_normed_vs [intro!!]: 
   128   "[| is_subspace F E; is_vectorspace E; is_normed_vectorspace E norm |] 
   152   "[| is_subspace F E; is_vectorspace E; is_normed_vectorspace E norm |] 
   129    ==> is_normed_vectorspace F norm";
   153    ==> is_normed_vectorspace F norm";
   130 proof (rule normed_vsI);
   154 proof (rule normed_vsI);
   131   assume "is_subspace F E" "is_vectorspace E" "is_normed_vectorspace E norm";
   155   assume "is_subspace F E" "is_vectorspace E" 
       
   156          "is_normed_vectorspace E norm";
   132   show "is_vectorspace F"; ..;
   157   show "is_vectorspace F"; ..;
   133   show "is_norm F norm"; 
   158   show "is_norm F norm"; 
   134   proof (intro is_normI ballI conjI);
   159   proof (intro is_normI ballI conjI);
   135     show "is_quasinorm F norm"; 
   160     show "is_quasinorm F norm"; 
   136     proof;
   161     proof;