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