src/HOL/Real/HahnBanach/HahnBanachExtLemmas.thy
changeset 10687 c186279eecea
parent 10606 e3229a37d53f
child 11701 3d51fbf81c17
equal deleted inserted replaced
10686:60c795d6bd9e 10687:c186279eecea
     5 
     5 
     6 header {* Extending non-maximal functions *}
     6 header {* Extending non-maximal functions *}
     7 
     7 
     8 theory HahnBanachExtLemmas = FunctionNorm:
     8 theory HahnBanachExtLemmas = FunctionNorm:
     9 
     9 
    10 text{* In this section the following context is presumed.
    10 text {*
    11 Let $E$ be a real vector space with a 
    11   In this section the following context is presumed.  Let @{text E} be
    12 seminorm $q$ on $E$. $F$ is a subspace of $E$ and $f$ a linear 
    12   a real vector space with a seminorm @{text q} on @{text E}. @{text
    13 function on $F$. We consider a subspace $H$ of $E$ that is a 
    13   F} is a subspace of @{text E} and @{text f} a linear function on
    14 superspace of $F$ and a linear form $h$ on $H$. $H$ is a not equal 
    14   @{text F}. We consider a subspace @{text H} of @{text E} that is a
    15 to $E$ and $x_0$ is an element in $E \backslash H$.
    15   superspace of @{text F} and a linear form @{text h} on @{text
    16 $H$ is extended to the direct sum  $H' = H + \idt{lin}\ap x_0$, so for
    16   H}. @{text H} is a not equal to @{text E} and @{text "x\<^sub>0"} is
    17 any $x\in H'$ the decomposition of $x = y + a \mult x$ 
    17   an element in @{text "E - H"}.  @{text H} is extended to the direct
    18 with $y\in H$ is unique. $h'$ is defined on $H'$ by  
    18   sum @{text "H' = H + lin x\<^sub>0"}, so for any @{text "x \<in> H'"}
    19 $h'\ap x = h\ap y + a \cdot \xi$ for a certain $\xi$.
    19   the decomposition of @{text "x = y + a \<cdot> x"} with @{text "y \<in> H"} is
    20 
    20   unique. @{text h'} is defined on @{text H'} by
    21 Subsequently we show some properties of this extension $h'$ of $h$.
    21   @{text "h' x = h y + a \<cdot> \<xi>"} for a certain @{text \<xi>}.
    22 *} 
    22 
    23 
    23   Subsequently we show some properties of this extension @{text h'} of
    24 
    24   @{text h}.
    25 text {* This lemma will be used to show the existence of a linear
    25 *}
    26 extension of $f$ (see page \pageref{ex-xi-use}). 
    26 
    27 It is a consequence
    27 text {*
    28 of the completeness of $\bbbR$. To show 
    28   This lemma will be used to show the existence of a linear extension
    29 \begin{matharray}{l}
    29   of @{text f} (see page \pageref{ex-xi-use}). It is a consequence of
    30 \Ex{\xi}{\All {y\in F}{a\ap y \leq \xi \land \xi \leq b\ap y}}
    30   the completeness of @{text \<real>}. To show
    31 \end{matharray} 
    31   \begin{center}
    32 it suffices to show that 
    32   \begin{tabular}{l}
    33 \begin{matharray}{l} \All
    33   @{text "\<exists>\<xi>. \<forall>y \<in> F. a y \<le> \<xi> \<and> \<xi> \<le> b y"}
    34 {u\in F}{\All {v\in F}{a\ap u \leq b \ap v}} 
    34   \end{tabular}
    35 \end{matharray} *}
    35   \end{center}
    36 
    36   \noindent it suffices to show that
    37 lemma ex_xi: 
    37   \begin{center}
    38   "[| is_vectorspace F; !! u v. [| u \<in> F; v \<in> F |] ==> a u <= b v |]
    38   \begin{tabular}{l}
    39   ==> \<exists>xi::real. \<forall>y \<in> F. a y <= xi \<and> xi <= b y" 
    39   @{text "\<forall>u \<in> F. \<forall>v \<in> F. a u \<le> b v"}
       
    40   \end{tabular}
       
    41   \end{center}
       
    42 *}
       
    43 
       
    44 lemma ex_xi:
       
    45   "is_vectorspace F \<Longrightarrow> (\<And>u v. u \<in> F \<Longrightarrow> v \<in> F \<Longrightarrow> a u \<le> b v)
       
    46   \<Longrightarrow> \<exists>xi::real. \<forall>y \<in> F. a y \<le> xi \<and> xi \<le> b y"
    40 proof -
    47 proof -
    41   assume vs: "is_vectorspace F"
    48   assume vs: "is_vectorspace F"
    42   assume r: "(!! u v. [| u \<in> F; v \<in> F |] ==> a u <= (b v::real))"
    49   assume r: "(\<And>u v. u \<in> F \<Longrightarrow> v \<in> F \<Longrightarrow> a u \<le> (b v::real))"
    43 
    50 
    44   txt {* From the completeness of the reals follows:
    51   txt {* From the completeness of the reals follows:
    45   The set $S = \{a\: u\dt\: u\in F\}$ has a supremum, if
    52   The set @{text "S = {a u. u \<in> F}"} has a supremum, if
    46   it is non-empty and has an upper bound. *}
    53   it is non-empty and has an upper bound. *}
    47 
    54 
    48   let ?S = "{a u :: real | u. u \<in> F}"
    55   let ?S = "{a u :: real | u. u \<in> F}"
    49 
    56 
    50   have "\<exists>xi. isLub UNIV ?S xi"  
    57   have "\<exists>xi. isLub UNIV ?S xi"
    51   proof (rule reals_complete)
    58   proof (rule reals_complete)
    52   
    59 
    53     txt {* The set $S$ is non-empty, since $a\ap\zero \in S$: *}
    60     txt {* The set @{text S} is non-empty, since @{text "a 0 \<in> S"}: *}
    54 
    61 
    55     from vs have "a 0 \<in> ?S" by force
    62     from vs have "a 0 \<in> ?S" by blast
    56     thus "\<exists>X. X \<in> ?S" ..
    63     thus "\<exists>X. X \<in> ?S" ..
    57 
    64 
    58     txt {* $b\ap \zero$ is an upper bound of $S$: *}
    65     txt {* @{text "b 0"} is an upper bound of @{text S}: *}
    59 
    66 
    60     show "\<exists>Y. isUb UNIV ?S Y" 
    67     show "\<exists>Y. isUb UNIV ?S Y"
    61     proof 
    68     proof
    62       show "isUb UNIV ?S (b 0)"
    69       show "isUb UNIV ?S (b 0)"
    63       proof (intro isUbI setleI ballI)
    70       proof (intro isUbI setleI ballI)
    64         show "b 0 \<in> UNIV" ..
    71         show "b 0 \<in> UNIV" ..
    65       next
    72       next
    66 
    73 
    67         txt {* Every element $y\in S$ is less than $b\ap \zero$: *}
    74         txt {* Every element @{text "y \<in> S"} is less than @{text "b 0"}: *}
    68 
    75 
    69         fix y assume y: "y \<in> ?S" 
    76         fix y assume y: "y \<in> ?S"
    70         from y have "\<exists>u \<in> F. y = a u" by fast
    77         from y have "\<exists>u \<in> F. y = a u" by fast
    71         thus "y <= b 0" 
    78         thus "y \<le> b 0"
    72         proof
    79         proof
    73           fix u assume "u \<in> F" 
    80           fix u assume "u \<in> F"
    74           assume "y = a u"
    81           assume "y = a u"
    75           also have "a u <= b 0" by (rule r) (simp!)+
    82           also have "a u \<le> b 0" by (rule r) (simp!)+
    76           finally show ?thesis .
    83           finally show ?thesis .
    77         qed
    84         qed
    78       qed
    85       qed
    79     qed
    86     qed
    80   qed
    87   qed
    81 
    88 
    82   thus "\<exists>xi. \<forall>y \<in> F. a y <= xi \<and> xi <= b y" 
    89   thus "\<exists>xi. \<forall>y \<in> F. a y \<le> xi \<and> xi \<le> b y"
    83   proof (elim exE)
    90   proof (elim exE)
    84     fix xi assume "isLub UNIV ?S xi" 
    91     fix xi assume "isLub UNIV ?S xi"
    85     show ?thesis
    92     show ?thesis
    86     proof (intro exI conjI ballI) 
    93     proof (intro exI conjI ballI)
    87    
    94 
    88       txt {* For all $y\in F$ holds $a\ap y \leq \xi$: *}
    95       txt {* For all @{text "y \<in> F"} holds @{text "a y \<le> \<xi>"}: *}
    89      
    96 
    90       fix y assume y: "y \<in> F"
    97       fix y assume y: "y \<in> F"
    91       show "a y <= xi"    
    98       show "a y \<le> xi"
    92       proof (rule isUbD)  
    99       proof (rule isUbD)
    93         show "isUb UNIV ?S xi" ..
   100         show "isUb UNIV ?S xi" ..
    94       qed (force!)
   101       qed (blast!)
    95     next
   102     next
    96 
   103 
    97       txt {* For all $y\in F$ holds $\xi\leq b\ap y$: *}
   104       txt {* For all @{text "y \<in> F"} holds @{text "\<xi> \<le> b y"}: *}
    98 
   105 
    99       fix y assume "y \<in> F"
   106       fix y assume "y \<in> F"
   100       show "xi <= b y"  
   107       show "xi \<le> b y"
   101       proof (intro isLub_le_isUb isUbI setleI)
   108       proof (intro isLub_le_isUb isUbI setleI)
   102         show "b y \<in> UNIV" ..
   109         show "b y \<in> UNIV" ..
   103         show "\<forall>ya \<in> ?S. ya <= b y" 
   110         show "\<forall>ya \<in> ?S. ya \<le> b y"
   104         proof
   111         proof
   105           fix au assume au: "au \<in> ?S "
   112           fix au assume au: "au \<in> ?S "
   106           hence "\<exists>u \<in> F. au = a u" by fast
   113           hence "\<exists>u \<in> F. au = a u" by fast
   107           thus "au <= b y"
   114           thus "au \<le> b y"
   108           proof
   115           proof
   109             fix u assume "u \<in> F" assume "au = a u"  
   116             fix u assume "u \<in> F" assume "au = a u"
   110             also have "... <= b y" by (rule r)
   117             also have "... \<le> b y" by (rule r)
   111             finally show ?thesis .
   118             finally show ?thesis .
   112           qed
   119           qed
   113         qed
   120         qed
   114       qed 
   121       qed
   115     qed
   122     qed
   116   qed
   123   qed
   117 qed
   124 qed
   118 
   125 
   119 text{* \medskip The function $h'$ is defined as a
   126 text {*
   120 $h'\ap x = h\ap y + a\cdot \xi$ where $x = y + a\mult \xi$
   127   \medskip The function @{text h'} is defined as a
   121 is a linear extension of $h$ to $H'$. *}
   128   @{text "h' x = h y + a \<cdot> \<xi>"} where @{text "x = y + a \<cdot> \<xi>"} is a
   122 
   129   linear extension of @{text h} to @{text H'}. *}
   123 lemma h'_lf: 
   130 
   124   "[| h' == (\<lambda>x. let (y, a) = SOME (y, a). x = y + a \<cdot> x0 \<and> y \<in> H 
   131 lemma h'_lf:
   125                 in h y + a * xi);
   132   "h' \<equiv> \<lambda>x. let (y, a) = SOME (y, a). x = y + a \<cdot> x0 \<and> y \<in> H in h y + a * xi
   126   H' == H + lin x0; is_subspace H E; is_linearform H h; x0 \<notin> H; 
   133   \<Longrightarrow> H' \<equiv> H + lin x0 \<Longrightarrow> is_subspace H E \<Longrightarrow> is_linearform H h \<Longrightarrow> x0 \<notin> H
   127   x0 \<in> E; x0 \<noteq> 0; is_vectorspace E |]
   134   \<Longrightarrow> x0 \<in> E \<Longrightarrow> x0 \<noteq> 0 \<Longrightarrow> is_vectorspace E
   128   ==> is_linearform H' h'"
   135   \<Longrightarrow> is_linearform H' h'"
   129 proof -
   136 proof -
   130   assume h'_def: 
   137   assume h'_def:
   131     "h' == (\<lambda>x. let (y, a) = SOME (y, a). x = y + a \<cdot> x0 \<and> y \<in> H 
   138     "h' \<equiv> (\<lambda>x. let (y, a) = SOME (y, a). x = y + a \<cdot> x0 \<and> y \<in> H
   132                in h y + a * xi)"
   139                in h y + a * xi)"
   133     and H'_def: "H' == H + lin x0" 
   140     and H'_def: "H' \<equiv> H + lin x0"
   134     and vs: "is_subspace H E" "is_linearform H h" "x0 \<notin> H"
   141     and vs: "is_subspace H E"  "is_linearform H h"  "x0 \<notin> H"
   135       "x0 \<noteq> 0" "x0 \<in> E" "is_vectorspace E"
   142       "x0 \<noteq> 0"  "x0 \<in> E"  "is_vectorspace E"
   136 
   143 
   137   have h': "is_vectorspace H'" 
   144   have h': "is_vectorspace H'"
   138   proof (unfold H'_def, rule vs_sum_vs)
   145   proof (unfold H'_def, rule vs_sum_vs)
   139     show "is_subspace (lin x0) E" ..
   146     show "is_subspace (lin x0) E" ..
   140   qed 
   147   qed
   141 
   148 
   142   show ?thesis
   149   show ?thesis
   143   proof
   150   proof
   144     fix x1 x2 assume x1: "x1 \<in> H'" and x2: "x2 \<in> H'" 
   151     fix x1 x2 assume x1: "x1 \<in> H'" and x2: "x2 \<in> H'"
   145 
   152 
   146     txt{* We now have to show that $h'$ is additive, i.~e.\
   153     txt {* We now have to show that @{text h'} is additive, i.~e.\
   147     $h' \ap (x_1\plus x_2) = h'\ap x_1 + h'\ap x_2$
   154       @{text "h' (x\<^sub>1 + x\<^sub>2) = h' x\<^sub>1 + h' x\<^sub>2"} for
   148     for $x_1, x_2\in H$. *} 
   155       @{text "x\<^sub>1, x\<^sub>2 \<in> H"}. *}
   149 
   156 
   150     have x1x2: "x1 + x2 \<in> H'" 
   157     have x1x2: "x1 + x2 \<in> H'"
   151       by (rule vs_add_closed, rule h') 
   158       by (rule vs_add_closed, rule h')
   152     from x1 
   159     from x1
   153     have ex_x1: "\<exists>y1 a1. x1 = y1 + a1 \<cdot> x0  \<and> y1 \<in> H" 
   160     have ex_x1: "\<exists>y1 a1. x1 = y1 + a1 \<cdot> x0  \<and> y1 \<in> H"
   154       by (unfold H'_def vs_sum_def lin_def) fast
   161       by (unfold H'_def vs_sum_def lin_def) fast
   155     from x2 
   162     from x2
   156     have ex_x2: "\<exists>y2 a2. x2 = y2 + a2 \<cdot> x0 \<and> y2 \<in> H" 
   163     have ex_x2: "\<exists>y2 a2. x2 = y2 + a2 \<cdot> x0 \<and> y2 \<in> H"
   157       by (unfold H'_def vs_sum_def lin_def) fast
   164       by (unfold H'_def vs_sum_def lin_def) fast
   158     from x1x2 
   165     from x1x2
   159     have ex_x1x2: "\<exists>y a. x1 + x2 = y + a \<cdot> x0 \<and> y \<in> H"
   166     have ex_x1x2: "\<exists>y a. x1 + x2 = y + a \<cdot> x0 \<and> y \<in> H"
   160       by (unfold H'_def vs_sum_def lin_def) fast
   167       by (unfold H'_def vs_sum_def lin_def) fast
   161 
   168 
   162     from ex_x1 ex_x2 ex_x1x2
   169     from ex_x1 ex_x2 ex_x1x2
   163     show "h' (x1 + x2) = h' x1 + h' x2"
   170     show "h' (x1 + x2) = h' x1 + h' x2"
   164     proof (elim exE conjE)
   171     proof (elim exE conjE)
   165       fix y1 y2 y a1 a2 a
   172       fix y1 y2 y a1 a2 a
   166       assume y1: "x1 = y1 + a1 \<cdot> x0"     and y1': "y1 \<in> H"
   173       assume y1: "x1 = y1 + a1 \<cdot> x0"     and y1': "y1 \<in> H"
   167          and y2: "x2 = y2 + a2 \<cdot> x0"     and y2': "y2 \<in> H" 
   174          and y2: "x2 = y2 + a2 \<cdot> x0"     and y2': "y2 \<in> H"
   168          and y: "x1 + x2 = y + a \<cdot> x0"   and y':  "y  \<in> H" 
   175          and y: "x1 + x2 = y + a \<cdot> x0"   and y':  "y  \<in> H"
   169       txt {* \label{decomp-H-use}*}
   176       txt {* \label{decomp-H-use}*}
   170       have ya: "y1 + y2 = y \<and> a1 + a2 = a" 
   177       have ya: "y1 + y2 = y \<and> a1 + a2 = a"
   171       proof (rule decomp_H')
   178       proof (rule decomp_H')
   172         show "y1 + y2 + (a1 + a2) \<cdot> x0 = y + a \<cdot> x0" 
   179         show "y1 + y2 + (a1 + a2) \<cdot> x0 = y + a \<cdot> x0"
   173           by (simp! add: vs_add_mult_distrib2 [of E])
   180           by (simp! add: vs_add_mult_distrib2 [of E])
   174         show "y1 + y2 \<in> H" ..
   181         show "y1 + y2 \<in> H" ..
   175       qed
   182       qed
   176 
   183 
   177       have "h' (x1 + x2) = h y + a * xi"
   184       have "h' (x1 + x2) = h y + a * xi"
   178 	by (rule h'_definite)
   185         by (rule h'_definite)
   179       also have "... = h (y1 + y2) + (a1 + a2) * xi" 
   186       also have "... = h (y1 + y2) + (a1 + a2) * xi"
   180         by (simp add: ya)
   187         by (simp add: ya)
   181       also from vs y1' y2' 
   188       also from vs y1' y2'
   182       have "... = h y1 + h y2 + a1 * xi + a2 * xi" 
   189       have "... = h y1 + h y2 + a1 * xi + a2 * xi"
   183 	by (simp add: linearform_add [of H] 
   190         by (simp add: linearform_add [of H]
   184                       real_add_mult_distrib)
   191                       real_add_mult_distrib)
   185       also have "... = (h y1 + a1 * xi) + (h y2 + a2 * xi)" 
   192       also have "... = (h y1 + a1 * xi) + (h y2 + a2 * xi)"
   186         by simp
   193         by simp
   187       also have "h y1 + a1 * xi = h' x1"
   194       also have "h y1 + a1 * xi = h' x1"
   188         by (rule h'_definite [symmetric])
   195         by (rule h'_definite [symmetric])
   189       also have "h y2 + a2 * xi = h' x2" 
   196       also have "h y2 + a2 * xi = h' x2"
   190         by (rule h'_definite [symmetric])
   197         by (rule h'_definite [symmetric])
   191       finally show ?thesis .
   198       finally show ?thesis .
   192     qed
   199     qed
   193  
   200 
   194     txt{* We further have to show that $h'$ is multiplicative, 
   201     txt {* We further have to show that @{text h'} is multiplicative,
   195     i.~e.\ $h'\ap (c \mult x_1) = c \cdot h'\ap x_1$
   202     i.~e.\ @{text "h' (c \<cdot> x\<^sub>1) = c \<cdot> h' x\<^sub>1"} for @{text "x \<in> H"}
   196     for $x\in H$ and $c\in \bbbR$. 
   203     and @{text "c \<in> \<real>"}. *}
   197     *} 
   204 
   198 
   205   next
   199   next  
   206     fix c x1 assume x1: "x1 \<in> H'"
   200     fix c x1 assume x1: "x1 \<in> H'"    
       
   201     have ax1: "c \<cdot> x1 \<in> H'"
   207     have ax1: "c \<cdot> x1 \<in> H'"
   202       by (rule vs_mult_closed, rule h')
   208       by (rule vs_mult_closed, rule h')
   203     from x1 
   209     from x1
   204     have ex_x: "!! x. x\<in> H' ==> \<exists>y a. x = y + a \<cdot> x0 \<and> y \<in> H"
   210     have ex_x: "\<And>x. x\<in> H' \<Longrightarrow> \<exists>y a. x = y + a \<cdot> x0 \<and> y \<in> H"
   205       by (unfold H'_def vs_sum_def lin_def) fast
   211       by (unfold H'_def vs_sum_def lin_def) fast
   206 
   212 
   207     from x1 have ex_x1: "\<exists>y1 a1. x1 = y1 + a1 \<cdot> x0 \<and> y1 \<in> H"
   213     from x1 have ex_x1: "\<exists>y1 a1. x1 = y1 + a1 \<cdot> x0 \<and> y1 \<in> H"
   208       by (unfold H'_def vs_sum_def lin_def) fast
   214       by (unfold H'_def vs_sum_def lin_def) fast
   209     with ex_x [of "c \<cdot> x1", OF ax1]
   215     with ex_x [of "c \<cdot> x1", OF ax1]
   210     show "h' (c \<cdot> x1) = c * (h' x1)"  
   216     show "h' (c \<cdot> x1) = c * (h' x1)"
   211     proof (elim exE conjE)
   217     proof (elim exE conjE)
   212       fix y1 y a1 a 
   218       fix y1 y a1 a
   213       assume y1: "x1 = y1 + a1 \<cdot> x0"     and y1': "y1 \<in> H"
   219       assume y1: "x1 = y1 + a1 \<cdot> x0"     and y1': "y1 \<in> H"
   214         and y: "c \<cdot> x1 = y  + a \<cdot> x0"    and y': "y \<in> H" 
   220         and y: "c \<cdot> x1 = y  + a \<cdot> x0"    and y': "y \<in> H"
   215 
   221 
   216       have ya: "c \<cdot> y1 = y \<and> c * a1 = a" 
   222       have ya: "c \<cdot> y1 = y \<and> c * a1 = a"
   217       proof (rule decomp_H') 
   223       proof (rule decomp_H')
   218 	show "c \<cdot> y1 + (c * a1) \<cdot> x0 = y + a \<cdot> x0" 
   224         show "c \<cdot> y1 + (c * a1) \<cdot> x0 = y + a \<cdot> x0"
   219           by (simp! add: vs_add_mult_distrib1)
   225           by (simp! add: vs_add_mult_distrib1)
   220         show "c \<cdot> y1 \<in> H" ..
   226         show "c \<cdot> y1 \<in> H" ..
   221       qed
   227       qed
   222 
   228 
   223       have "h' (c \<cdot> x1) = h y + a * xi" 
   229       have "h' (c \<cdot> x1) = h y + a * xi"
   224 	by (rule h'_definite)
   230         by (rule h'_definite)
   225       also have "... = h (c \<cdot> y1) + (c * a1) * xi"
   231       also have "... = h (c \<cdot> y1) + (c * a1) * xi"
   226         by (simp add: ya)
   232         by (simp add: ya)
   227       also from vs y1' have "... = c * h y1 + c * a1 * xi" 
   233       also from vs y1' have "... = c * h y1 + c * a1 * xi"
   228 	by (simp add: linearform_mult [of H])
   234         by (simp add: linearform_mult [of H])
   229       also from vs y1' have "... = c * (h y1 + a1 * xi)" 
   235       also from vs y1' have "... = c * (h y1 + a1 * xi)"
   230 	by (simp add: real_add_mult_distrib2 real_mult_assoc)
   236         by (simp add: real_add_mult_distrib2 real_mult_assoc)
   231       also have "h y1 + a1 * xi = h' x1" 
   237       also have "h y1 + a1 * xi = h' x1"
   232         by (rule h'_definite [symmetric])
   238         by (rule h'_definite [symmetric])
   233       finally show ?thesis .
   239       finally show ?thesis .
   234     qed
   240     qed
   235   qed
   241   qed
   236 qed
   242 qed
   237 
   243 
   238 text{* \medskip The linear extension $h'$ of $h$
   244 text {* \medskip The linear extension @{text h'} of @{text h}
   239 is bounded by the seminorm $p$. *}
   245 is bounded by the seminorm @{text p}. *}
   240 
   246 
   241 lemma h'_norm_pres:
   247 lemma h'_norm_pres:
   242   "[| h' == (\<lambda>x. let (y, a) = SOME (y, a). x = y + a \<cdot> x0 \<and> y \<in> H 
   248   "h' \<equiv> \<lambda>x. let (y, a) = SOME (y, a). x = y + a \<cdot> x0 \<and> y \<in> H in h y + a * xi
   243                  in h y + a * xi);
   249   \<Longrightarrow> H' \<equiv> H + lin x0 \<Longrightarrow> x0 \<notin> H \<Longrightarrow> x0 \<in> E \<Longrightarrow> x0 \<noteq> 0 \<Longrightarrow> is_vectorspace E
   244   H' == H + lin x0; x0 \<notin> H; x0 \<in> E; x0 \<noteq> 0; is_vectorspace E; 
   250   \<Longrightarrow> is_subspace H E \<Longrightarrow> is_seminorm E p \<Longrightarrow> is_linearform H h
   245   is_subspace H E; is_seminorm E p; is_linearform H h; 
   251   \<Longrightarrow> \<forall>y \<in> H. h y \<le> p y
   246   \<forall>y \<in> H. h y <= p y; 
   252   \<Longrightarrow> \<forall>y \<in> H. - p (y + x0) - h y \<le> xi \<and> xi \<le> p (y + x0) - h y
   247   \<forall>y \<in> H. - p (y + x0) - h y <= xi \<and> xi <= p (y + x0) - h y |]
   253   \<Longrightarrow> \<forall>x \<in> H'. h' x \<le> p x"
   248    ==> \<forall>x \<in> H'. h' x <= p x" 
   254 proof
   249 proof 
   255   assume h'_def:
   250   assume h'_def: 
   256     "h' \<equiv> (\<lambda>x. let (y, a) = SOME (y, a). x = y + a \<cdot> x0 \<and> y \<in> H
   251     "h' == (\<lambda>x. let (y, a) = SOME (y, a). x = y + a \<cdot> x0 \<and> y \<in> H 
       
   252                in (h y) + a * xi)"
   257                in (h y) + a * xi)"
   253     and H'_def: "H' == H + lin x0" 
   258     and H'_def: "H' \<equiv> H + lin x0"
   254     and vs: "x0 \<notin> H" "x0 \<in> E" "x0 \<noteq> 0" "is_vectorspace E" 
   259     and vs: "x0 \<notin> H"  "x0 \<in> E"  "x0 \<noteq> 0"  "is_vectorspace E"
   255             "is_subspace H E" "is_seminorm E p" "is_linearform H h" 
   260             "is_subspace H E"  "is_seminorm E p"  "is_linearform H h"
   256     and a: "\<forall>y \<in> H. h y <= p y"
   261     and a: "\<forall>y \<in> H. h y \<le> p y"
   257   presume a1: "\<forall>ya \<in> H. - p (ya + x0) - h ya <= xi"
   262   presume a1: "\<forall>ya \<in> H. - p (ya + x0) - h ya \<le> xi"
   258   presume a2: "\<forall>ya \<in> H. xi <= p (ya + x0) - h ya"
   263   presume a2: "\<forall>ya \<in> H. xi \<le> p (ya + x0) - h ya"
   259   fix x assume "x \<in> H'" 
   264   fix x assume "x \<in> H'"
   260   have ex_x: 
   265   have ex_x:
   261     "!! x. x \<in> H' ==> \<exists>y a. x = y + a \<cdot> x0 \<and> y \<in> H"
   266     "\<And>x. x \<in> H' \<Longrightarrow> \<exists>y a. x = y + a \<cdot> x0 \<and> y \<in> H"
   262     by (unfold H'_def vs_sum_def lin_def) fast
   267     by (unfold H'_def vs_sum_def lin_def) fast
   263   have "\<exists>y a. x = y + a \<cdot> x0 \<and> y \<in> H"
   268   have "\<exists>y a. x = y + a \<cdot> x0 \<and> y \<in> H"
   264     by (rule ex_x)
   269     by (rule ex_x)
   265   thus "h' x <= p x"
   270   thus "h' x \<le> p x"
   266   proof (elim exE conjE)
   271   proof (elim exE conjE)
   267     fix y a assume x: "x = y + a \<cdot> x0" and y: "y \<in> H"
   272     fix y a assume x: "x = y + a \<cdot> x0" and y: "y \<in> H"
   268     have "h' x = h y + a * xi"
   273     have "h' x = h y + a * xi"
   269       by (rule h'_definite)
   274       by (rule h'_definite)
   270 
   275 
   271     txt{* Now we show  
   276     txt {* Now we show @{text "h y + a \<cdot> \<xi> \<le> p (y + a \<cdot> x\<^sub>0)"}
   272     $h\ap y + a \cdot \xi\leq  p\ap (y\plus a \mult x_0)$ 
   277     by case analysis on @{text a}. *}
   273     by case analysis on $a$. *}
   278 
   274 
   279     also have "... \<le> p (y + a \<cdot> x0)"
   275     also have "... <= p (y + a \<cdot> x0)"
       
   276     proof (rule linorder_cases)
   280     proof (rule linorder_cases)
   277 
   281 
   278       assume z: "a = #0" 
   282       assume z: "a = #0"
   279       with vs y a show ?thesis by simp
   283       with vs y a show ?thesis by simp
   280 
   284 
   281     txt {* In the case $a < 0$, we use $a_1$ with $\idt{ya}$ 
   285     txt {* In the case @{text "a < 0"}, we use @{text "a\<^sub>1"}
   282     taken as $y/a$: *}
   286     with @{text ya} taken as @{text "y / a"}: *}
   283 
   287 
   284     next
   288     next
   285       assume lz: "a < #0" hence nz: "a \<noteq> #0" by simp
   289       assume lz: "a < #0" hence nz: "a \<noteq> #0" by simp
   286       from a1 
   290       from a1
   287       have "- p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y) <= xi"
   291       have "- p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y) \<le> xi"
   288         by (rule bspec) (simp!)
   292         by (rule bspec) (simp!)
   289 
   293 
   290       txt {* The thesis for this case now follows by a short  
   294       txt {* The thesis for this case now follows by a short
   291       calculation. *}      
   295       calculation. *}
   292       hence "a * xi <= a * (- p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y))"
   296       hence "a * xi \<le> a * (- p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y))"
   293         by (rule real_mult_less_le_anti [OF lz])
   297         by (rule real_mult_less_le_anti [OF lz])
   294       also 
   298       also
   295       have "... = - a * (p (inverse a \<cdot> y + x0)) - a * (h (inverse a \<cdot> y))"
   299       have "... = - a * (p (inverse a \<cdot> y + x0)) - a * (h (inverse a \<cdot> y))"
   296         by (rule real_mult_diff_distrib)
   300         by (rule real_mult_diff_distrib)
   297       also from lz vs y 
   301       also from lz vs y
   298       have "- a * (p (inverse a \<cdot> y + x0)) = p (a \<cdot> (inverse a \<cdot> y + x0))"
   302       have "- a * (p (inverse a \<cdot> y + x0)) = p (a \<cdot> (inverse a \<cdot> y + x0))"
   299         by (simp add: seminorm_abs_homogenous abs_minus_eqI2)
   303         by (simp add: seminorm_abs_homogenous abs_minus_eqI2)
   300       also from nz vs y have "... = p (y + a \<cdot> x0)"
   304       also from nz vs y have "... = p (y + a \<cdot> x0)"
   301         by (simp add: vs_add_mult_distrib1)
   305         by (simp add: vs_add_mult_distrib1)
   302       also from nz vs y have "a * (h (inverse a \<cdot> y)) =  h y"
   306       also from nz vs y have "a * (h (inverse a \<cdot> y)) =  h y"
   303         by (simp add: linearform_mult [symmetric])
   307         by (simp add: linearform_mult [symmetric])
   304       finally have "a * xi <= p (y + a \<cdot> x0) - h y" .
   308       finally have "a * xi \<le> p (y + a \<cdot> x0) - h y" .
   305 
   309 
   306       hence "h y + a * xi <= h y + p (y + a \<cdot> x0) - h y"
   310       hence "h y + a * xi \<le> h y + p (y + a \<cdot> x0) - h y"
   307         by (simp add: real_add_left_cancel_le)
   311         by (simp add: real_add_left_cancel_le)
   308       thus ?thesis by simp
   312       thus ?thesis by simp
   309 
   313 
   310       txt {* In the case $a > 0$, we use $a_2$ with $\idt{ya}$ 
   314       txt {* In the case @{text "a > 0"}, we use @{text "a\<^sub>2"}
   311       taken as $y/a$: *}
   315         with @{text ya} taken as @{text "y / a"}: *}
   312 
   316 
   313     next 
   317     next
   314       assume gz: "#0 < a" hence nz: "a \<noteq> #0" by simp
   318       assume gz: "#0 < a" hence nz: "a \<noteq> #0" by simp
   315       from a2 have "xi <= p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y)"
   319       from a2 have "xi \<le> p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y)"
   316         by (rule bspec) (simp!)
   320         by (rule bspec) (simp!)
   317 
   321 
   318       txt {* The thesis for this case follows by a short
   322       txt {* The thesis for this case follows by a short
   319       calculation: *}
   323       calculation: *}
   320 
   324 
   321       with gz 
   325       with gz
   322       have "a * xi <= a * (p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y))"
   326       have "a * xi \<le> a * (p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y))"
   323         by (rule real_mult_less_le_mono)
   327         by (rule real_mult_less_le_mono)
   324       also have "... = a * p (inverse a \<cdot> y + x0) - a * h (inverse a \<cdot> y)"
   328       also have "... = a * p (inverse a \<cdot> y + x0) - a * h (inverse a \<cdot> y)"
   325         by (rule real_mult_diff_distrib2) 
   329         by (rule real_mult_diff_distrib2)
   326       also from gz vs y 
   330       also from gz vs y
   327       have "a * p (inverse a \<cdot> y + x0) = p (a \<cdot> (inverse a \<cdot> y + x0))"
   331       have "a * p (inverse a \<cdot> y + x0) = p (a \<cdot> (inverse a \<cdot> y + x0))"
   328         by (simp add: seminorm_abs_homogenous abs_eqI2)
   332         by (simp add: seminorm_abs_homogenous abs_eqI2)
   329       also from nz vs y have "... = p (y + a \<cdot> x0)"
   333       also from nz vs y have "... = p (y + a \<cdot> x0)"
   330         by (simp add: vs_add_mult_distrib1)
   334         by (simp add: vs_add_mult_distrib1)
   331       also from nz vs y have "a * h (inverse a \<cdot> y) = h y"
   335       also from nz vs y have "a * h (inverse a \<cdot> y) = h y"
   332         by (simp add: linearform_mult [symmetric]) 
   336         by (simp add: linearform_mult [symmetric])
   333       finally have "a * xi <= p (y + a \<cdot> x0) - h y" .
   337       finally have "a * xi \<le> p (y + a \<cdot> x0) - h y" .
   334  
   338 
   335       hence "h y + a * xi <= h y + (p (y + a \<cdot> x0) - h y)"
   339       hence "h y + a * xi \<le> h y + (p (y + a \<cdot> x0) - h y)"
   336         by (simp add: real_add_left_cancel_le)
   340         by (simp add: real_add_left_cancel_le)
   337       thus ?thesis by simp
   341       thus ?thesis by simp
   338     qed
   342     qed
   339     also from x have "... = p x" by simp
   343     also from x have "... = p x" by simp
   340     finally show ?thesis .
   344     finally show ?thesis .
   341   qed
   345   qed
   342 qed blast+ 
   346 qed blast+
   343 
   347 
   344 end
   348 end