src/HOL/Hahn_Banach/Hahn_Banach.thy
changeset 46867 0883804b67bb
parent 44190 fe5504984937
child 47445 69e96e5500df
equal deleted inserted replaced
46866:b190913c3c41 46867:0883804b67bb
   354   fixes V and norm ("\<parallel>_\<parallel>")
   354   fixes V and norm ("\<parallel>_\<parallel>")
   355   fixes B defines "\<And>V f. B V f \<equiv> {0} \<union> {\<bar>f x\<bar> / \<parallel>x\<parallel> | x. x \<noteq> 0 \<and> x \<in> V}"
   355   fixes B defines "\<And>V f. B V f \<equiv> {0} \<union> {\<bar>f x\<bar> / \<parallel>x\<parallel> | x. x \<noteq> 0 \<and> x \<in> V}"
   356   fixes fn_norm ("\<parallel>_\<parallel>\<hyphen>_" [0, 1000] 999)
   356   fixes fn_norm ("\<parallel>_\<parallel>\<hyphen>_" [0, 1000] 999)
   357   defines "\<And>V f. \<parallel>f\<parallel>\<hyphen>V \<equiv> \<Squnion>(B V f)"
   357   defines "\<And>V f. \<parallel>f\<parallel>\<hyphen>V \<equiv> \<Squnion>(B V f)"
   358   assumes E_norm: "normed_vectorspace E norm" and FE: "subspace F E"
   358   assumes E_norm: "normed_vectorspace E norm" and FE: "subspace F E"
   359     and linearform: "linearform F f" and "continuous F norm f"
   359     and linearform: "linearform F f" and "continuous F f norm"
   360   shows "\<exists>g. linearform E g
   360   shows "\<exists>g. linearform E g
   361      \<and> continuous E norm g
   361      \<and> continuous E g norm
   362      \<and> (\<forall>x \<in> F. g x = f x)
   362      \<and> (\<forall>x \<in> F. g x = f x)
   363      \<and> \<parallel>g\<parallel>\<hyphen>E = \<parallel>f\<parallel>\<hyphen>F"
   363      \<and> \<parallel>g\<parallel>\<hyphen>E = \<parallel>f\<parallel>\<hyphen>F"
   364 proof -
   364 proof -
   365   interpret normed_vectorspace E norm by fact
   365   interpret normed_vectorspace E norm by fact
   366   interpret normed_vectorspace_with_fn_norm E norm B fn_norm
   366   interpret normed_vectorspace_with_fn_norm E norm B fn_norm
   367     by (auto simp: B_def fn_norm_def) intro_locales
   367     by (auto simp: B_def fn_norm_def) intro_locales
   368   interpret subspace F E by fact
   368   interpret subspace F E by fact
   369   interpret linearform F f by fact
   369   interpret linearform F f by fact
   370   interpret continuous F norm f by fact
   370   interpret continuous F f norm by fact
   371   have E: "vectorspace E" by intro_locales
   371   have E: "vectorspace E" by intro_locales
   372   have F: "vectorspace F" by rule intro_locales
   372   have F: "vectorspace F" by rule intro_locales
   373   have F_norm: "normed_vectorspace F norm"
   373   have F_norm: "normed_vectorspace F norm"
   374     using FE E_norm by (rule subspace_normed_vs)
   374     using FE E_norm by (rule subspace_normed_vs)
   375   have ge_zero: "0 \<le> \<parallel>f\<parallel>\<hyphen>F"
   375   have ge_zero: "0 \<le> \<parallel>f\<parallel>\<hyphen>F"
   376     by (rule normed_vectorspace_with_fn_norm.fn_norm_ge_zero
   376     by (rule normed_vectorspace_with_fn_norm.fn_norm_ge_zero
   377       [OF normed_vectorspace_with_fn_norm.intro,
   377       [OF normed_vectorspace_with_fn_norm.intro,
   378        OF F_norm `continuous F norm f` , folded B_def fn_norm_def])
   378        OF F_norm `continuous F f norm` , folded B_def fn_norm_def])
   379   txt {* We define a function @{text p} on @{text E} as follows:
   379   txt {* We define a function @{text p} on @{text E} as follows:
   380     @{text "p x = \<parallel>f\<parallel> \<cdot> \<parallel>x\<parallel>"} *}
   380     @{text "p x = \<parallel>f\<parallel> \<cdot> \<parallel>x\<parallel>"} *}
   381   def p \<equiv> "\<lambda>x. \<parallel>f\<parallel>\<hyphen>F * \<parallel>x\<parallel>"
   381   def p \<equiv> "\<lambda>x. \<parallel>f\<parallel>\<hyphen>F * \<parallel>x\<parallel>"
   382 
   382 
   383   txt {* @{text p} is a seminorm on @{text E}: *}
   383   txt {* @{text p} is a seminorm on @{text E}: *}
   420   txt {* @{text f} is bounded by @{text p}. *}
   420   txt {* @{text f} is bounded by @{text p}. *}
   421 
   421 
   422   have "\<forall>x \<in> F. \<bar>f x\<bar> \<le> p x"
   422   have "\<forall>x \<in> F. \<bar>f x\<bar> \<le> p x"
   423   proof
   423   proof
   424     fix x assume "x \<in> F"
   424     fix x assume "x \<in> F"
   425     with `continuous F norm f` and linearform
   425     with `continuous F f norm` and linearform
   426     show "\<bar>f x\<bar> \<le> p x"
   426     show "\<bar>f x\<bar> \<le> p x"
   427       unfolding p_def by (rule normed_vectorspace_with_fn_norm.fn_norm_le_cong
   427       unfolding p_def by (rule normed_vectorspace_with_fn_norm.fn_norm_le_cong
   428         [OF normed_vectorspace_with_fn_norm.intro,
   428         [OF normed_vectorspace_with_fn_norm.intro,
   429          OF F_norm, folded B_def fn_norm_def])
   429          OF F_norm, folded B_def fn_norm_def])
   430   qed
   430   qed
   440     and b: "\<forall>x \<in> E. \<bar>g x\<bar> \<le> p x"
   440     and b: "\<forall>x \<in> E. \<bar>g x\<bar> \<le> p x"
   441     by (rule abs_Hahn_Banach [elim_format]) iprover
   441     by (rule abs_Hahn_Banach [elim_format]) iprover
   442 
   442 
   443   txt {* We furthermore have to show that @{text g} is also continuous: *}
   443   txt {* We furthermore have to show that @{text g} is also continuous: *}
   444 
   444 
   445   have g_cont: "continuous E norm g" using linearformE
   445   have g_cont: "continuous E g norm" using linearformE
   446   proof
   446   proof
   447     fix x assume "x \<in> E"
   447     fix x assume "x \<in> E"
   448     with b show "\<bar>g x\<bar> \<le> \<parallel>f\<parallel>\<hyphen>F * \<parallel>x\<parallel>"
   448     with b show "\<bar>g x\<bar> \<le> \<parallel>f\<parallel>\<hyphen>F * \<parallel>x\<parallel>"
   449       by (simp only: p_def)
   449       by (simp only: p_def)
   450   qed
   450   qed
   498         finally show "\<bar>f x\<bar> \<le> \<parallel>g\<parallel>\<hyphen>E * \<parallel>x\<parallel>" .
   498         finally show "\<bar>f x\<bar> \<le> \<parallel>g\<parallel>\<hyphen>E * \<parallel>x\<parallel>" .
   499       qed
   499       qed
   500       show "0 \<le> \<parallel>g\<parallel>\<hyphen>E"
   500       show "0 \<le> \<parallel>g\<parallel>\<hyphen>E"
   501         using g_cont
   501         using g_cont
   502         by (rule fn_norm_ge_zero [of g, folded B_def fn_norm_def])
   502         by (rule fn_norm_ge_zero [of g, folded B_def fn_norm_def])
   503       show "continuous F norm f" by fact
   503       show "continuous F f norm" by fact
   504     qed
   504     qed
   505   qed
   505   qed
   506   with linearformE a g_cont show ?thesis by blast
   506   with linearformE a g_cont show ?thesis by blast
   507 qed
   507 qed
   508 
   508