src/HOL/Real/HahnBanach/HahnBanachExtLemmas.thy
changeset 27612 d3eb431db035
parent 27611 2c01c0bdb385
child 29234 60f7fb56f8cd
equal deleted inserted replaced
27611:2c01c0bdb385 27612:d3eb431db035
     3     Author:     Gertrud Bauer, TU Munich
     3     Author:     Gertrud Bauer, TU Munich
     4 *)
     4 *)
     5 
     5 
     6 header {* Extending non-maximal functions *}
     6 header {* Extending non-maximal functions *}
     7 
     7 
     8 theory HahnBanachExtLemmas imports FunctionNorm begin
     8 theory HahnBanachExtLemmas
       
     9 imports FunctionNorm
       
    10 begin
     9 
    11 
    10 text {*
    12 text {*
    11   In this section the following context is presumed.  Let @{text E} be
    13   In this section the following context is presumed.  Let @{text E} be
    12   a real vector space with a seminorm @{text q} on @{text E}. @{text
    14   a real vector space with a seminorm @{text q} on @{text E}. @{text
    13   F} is a subspace of @{text E} and @{text f} a linear function on
    15   F} is a subspace of @{text E} and @{text f} a linear function on
    96   assumes E: "vectorspace E"
    98   assumes E: "vectorspace E"
    97   shows "linearform H' h'"
    99   shows "linearform H' h'"
    98 proof -
   100 proof -
    99   interpret linearform [H h] by fact
   101   interpret linearform [H h] by fact
   100   interpret vectorspace [E] by fact
   102   interpret vectorspace [E] by fact
   101   show ?thesis proof
   103   show ?thesis
       
   104   proof
   102     note E = `vectorspace E`
   105     note E = `vectorspace E`
   103     have H': "vectorspace H'"
   106     have H': "vectorspace H'"
   104     proof (unfold H'_def)
   107     proof (unfold H'_def)
   105       from `x0 \<in> E`
   108       from `x0 \<in> E`
   106       have "lin x0 \<unlhd> E" ..
   109       have "lin x0 \<unlhd> E" ..
   114           by (rule vectorspace.add_closed)
   117           by (rule vectorspace.add_closed)
   115 	with x1 x2 obtain y y1 y2 a a1 a2 where
   118 	with x1 x2 obtain y y1 y2 a a1 a2 where
   116           x1x2: "x1 + x2 = y + a \<cdot> x0" and y: "y \<in> H"
   119           x1x2: "x1 + x2 = y + a \<cdot> x0" and y: "y \<in> H"
   117           and x1_rep: "x1 = y1 + a1 \<cdot> x0" and y1: "y1 \<in> H"
   120           and x1_rep: "x1 = y1 + a1 \<cdot> x0" and y1: "y1 \<in> H"
   118           and x2_rep: "x2 = y2 + a2 \<cdot> x0" and y2: "y2 \<in> H"
   121           and x2_rep: "x2 = y2 + a2 \<cdot> x0" and y2: "y2 \<in> H"
   119           by (unfold H'_def sum_def lin_def) blast
   122           unfolding H'_def sum_def lin_def by blast
   120 	
   123 	
   121 	have ya: "y1 + y2 = y \<and> a1 + a2 = a" using E HE _ y x0
   124 	have ya: "y1 + y2 = y \<and> a1 + a2 = a" using E HE _ y x0
   122 	proof (rule decomp_H') txt_raw {* \label{decomp-H-use} *}
   125 	proof (rule decomp_H') txt_raw {* \label{decomp-H-use} *}
   123           from HE y1 y2 show "y1 + y2 \<in> H"
   126           from HE y1 y2 show "y1 + y2 \<in> H"
   124             by (rule subspace.add_closed)
   127             by (rule subspace.add_closed)
   152       show "h' (c \<cdot> x1) = c * (h' x1)"
   155       show "h' (c \<cdot> x1) = c * (h' x1)"
   153       proof -
   156       proof -
   154 	from H' x1 have ax1: "c \<cdot> x1 \<in> H'"
   157 	from H' x1 have ax1: "c \<cdot> x1 \<in> H'"
   155           by (rule vectorspace.mult_closed)
   158           by (rule vectorspace.mult_closed)
   156 	with x1 obtain y a y1 a1 where
   159 	with x1 obtain y a y1 a1 where
   157           cx1_rep: "c \<cdot> x1 = y + a \<cdot> x0" and y: "y \<in> H"
   160             cx1_rep: "c \<cdot> x1 = y + a \<cdot> x0" and y: "y \<in> H"
   158           and x1_rep: "x1 = y1 + a1 \<cdot> x0" and y1: "y1 \<in> H"
   161           and x1_rep: "x1 = y1 + a1 \<cdot> x0" and y1: "y1 \<in> H"
   159           by (unfold H'_def sum_def lin_def) blast
   162           unfolding H'_def sum_def lin_def by blast
   160 	
   163 	
   161 	have ya: "c \<cdot> y1 = y \<and> c * a1 = a" using E HE _ y x0
   164 	have ya: "c \<cdot> y1 = y \<and> c * a1 = a" using E HE _ y x0
   162 	proof (rule decomp_H')
   165 	proof (rule decomp_H')
   163           from HE y1 show "c \<cdot> y1 \<in> H"
   166           from HE y1 show "c \<cdot> y1 \<in> H"
   164             by (rule subspace.mult_closed)
   167             by (rule subspace.mult_closed)
   202 proof -
   205 proof -
   203   interpret vectorspace [E] by fact
   206   interpret vectorspace [E] by fact
   204   interpret subspace [H E] by fact
   207   interpret subspace [H E] by fact
   205   interpret seminorm [E p] by fact
   208   interpret seminorm [E p] by fact
   206   interpret linearform [H h] by fact
   209   interpret linearform [H h] by fact
   207   show ?thesis proof
   210   show ?thesis
       
   211   proof
   208     fix x assume x': "x \<in> H'"
   212     fix x assume x': "x \<in> H'"
   209     show "h' x \<le> p x"
   213     show "h' x \<le> p x"
   210     proof -
   214     proof -
   211       from a' have a1: "\<forall>ya \<in> H. - p (ya + x0) - h ya \<le> xi"
   215       from a' have a1: "\<forall>ya \<in> H. - p (ya + x0) - h ya \<le> xi"
   212 	and a2: "\<forall>ya \<in> H. xi \<le> p (ya + x0) - h ya" by auto
   216 	and a2: "\<forall>ya \<in> H. xi \<le> p (ya + x0) - h ya" by auto
   213       from x' obtain y a where
   217       from x' obtain y a where
   214         x_rep: "x = y + a \<cdot> x0" and y: "y \<in> H"
   218           x_rep: "x = y + a \<cdot> x0" and y: "y \<in> H"
   215 	by (unfold H'_def sum_def lin_def) blast
   219 	unfolding H'_def sum_def lin_def by blast
   216       from y have y': "y \<in> E" ..
   220       from y have y': "y \<in> E" ..
   217       from y have ay: "inverse a \<cdot> y \<in> H" by simp
   221       from y have ay: "inverse a \<cdot> y \<in> H" by simp
   218       
   222       
   219       from h'_def x_rep E HE y x0 have "h' x = h y + a * xi"
   223       from h'_def x_rep E HE y x0 have "h' x = h y + a * xi"
   220 	by (rule h'_definite)
   224 	by (rule h'_definite)
   226 	also from x0 y' z have "p y = p (y + a \<cdot> x0)" by simp
   230 	also from x0 y' z have "p y = p (y + a \<cdot> x0)" by simp
   227 	finally show ?thesis .
   231 	finally show ?thesis .
   228       next
   232       next
   229 	txt {* In the case @{text "a < 0"}, we use @{text "a\<^sub>1"}
   233 	txt {* In the case @{text "a < 0"}, we use @{text "a\<^sub>1"}
   230           with @{text ya} taken as @{text "y / a"}: *}
   234           with @{text ya} taken as @{text "y / a"}: *}
   231 	assume lz: "a < 0" hence nz: "a \<noteq> 0" by simp
   235 	assume lz: "a < 0" then have nz: "a \<noteq> 0" by simp
   232 	from a1 ay
   236 	from a1 ay
   233 	have "- p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y) \<le> xi" ..
   237 	have "- p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y) \<le> xi" ..
   234 	with lz have "a * xi \<le>
   238 	with lz have "a * xi \<le>
   235           a * (- p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y))"
   239           a * (- p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y))"
   236           by (simp add: mult_left_mono_neg order_less_imp_le)
   240           by (simp add: mult_left_mono_neg order_less_imp_le)
   248 	finally have "a * xi \<le> p (y + a \<cdot> x0) - h y" .
   252 	finally have "a * xi \<le> p (y + a \<cdot> x0) - h y" .
   249 	then show ?thesis by simp
   253 	then show ?thesis by simp
   250       next
   254       next
   251 	txt {* In the case @{text "a > 0"}, we use @{text "a\<^sub>2"}
   255 	txt {* In the case @{text "a > 0"}, we use @{text "a\<^sub>2"}
   252           with @{text ya} taken as @{text "y / a"}: *}
   256           with @{text ya} taken as @{text "y / a"}: *}
   253 	assume gz: "0 < a" hence nz: "a \<noteq> 0" by simp
   257 	assume gz: "0 < a" then have nz: "a \<noteq> 0" by simp
   254 	from a2 ay
   258 	from a2 ay
   255 	have "xi \<le> p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y)" ..
   259 	have "xi \<le> p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y)" ..
   256 	with gz have "a * xi \<le>
   260 	with gz have "a * xi \<le>
   257           a * (p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y))"
   261           a * (p (inverse a \<cdot> y + x0) - h (inverse a \<cdot> y))"
   258           by simp
   262           by simp
   259 	also have "... = a * p (inverse a \<cdot> y + x0) - a * h (inverse a \<cdot> y)"
   263 	also have "\<dots> = a * p (inverse a \<cdot> y + x0) - a * h (inverse a \<cdot> y)"
   260 	  by (simp add: right_diff_distrib)
   264 	  by (simp add: right_diff_distrib)
   261 	also from gz x0 y'
   265 	also from gz x0 y'
   262 	have "a * p (inverse a \<cdot> y + x0) = p (a \<cdot> (inverse a \<cdot> y + x0))"
   266 	have "a * p (inverse a \<cdot> y + x0) = p (a \<cdot> (inverse a \<cdot> y + x0))"
   263           by (simp add: abs_homogenous)
   267           by (simp add: abs_homogenous)
   264 	also from nz x0 y' have "\<dots> = p (y + a \<cdot> x0)"
   268 	also from nz x0 y' have "\<dots> = p (y + a \<cdot> x0)"