src/HOL/Real/HahnBanach/VectorSpace.thy
author wenzelm
Fri, 08 Mar 2002 16:24:06 +0100
changeset 13049 ce180e5b7fa0
parent 12114 a8e860c86252
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/VectorSpace.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
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
     6
header {* Vector spaces *}
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
     7
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
     8
theory VectorSpace = Bounds + Aux:
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
     9
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
    10
subsection {* Signature *}
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    11
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    12
text {*
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    13
  For the definition of real vector spaces a type @{typ 'a} of the
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    14
  sort @{text "{plus, minus, zero}"} is considered, on which a real
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    15
  scalar multiplication @{text \<cdot>} is declared.
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    16
*}
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    17
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    18
consts
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    19
  prod  :: "real \<Rightarrow> 'a::{plus, minus, zero} \<Rightarrow> 'a"     (infixr "'(*')" 70)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    20
12114
a8e860c86252 eliminated old "symbols" syntax, use "xsymbols" instead;
wenzelm
parents: 12018
diff changeset
    21
syntax (xsymbols)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    22
  prod  :: "real \<Rightarrow> 'a \<Rightarrow> 'a"                          (infixr "\<cdot>" 70)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    23
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    24
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
    25
subsection {* Vector space laws *}
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    26
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    27
text {*
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    28
  A \emph{vector space} is a non-empty set @{text V} of elements from
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    29
  @{typ 'a} with the following vector space laws: The set @{text V} is
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    30
  closed under addition and scalar multiplication, addition is
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    31
  associative and commutative; @{text "- x"} is the inverse of @{text
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    32
  x} w.~r.~t.~addition and @{text 0} is the neutral element of
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    33
  addition.  Addition and multiplication are distributive; scalar
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
    34
  multiplication is associative and the real number @{text "1"} is
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    35
  the neutral element of scalar multiplication.
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
    36
*}
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    37
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    38
constdefs
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    39
  is_vectorspace :: "('a::{plus, minus, zero}) set \<Rightarrow> bool"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    40
  "is_vectorspace V \<equiv> V \<noteq> {}
9503
wenzelm
parents: 9408
diff changeset
    41
   \<and> (\<forall>x \<in> V. \<forall>y \<in> V. \<forall>z \<in> V. \<forall>a b.
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    42
        x + y \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    43
      \<and> a \<cdot> x \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    44
      \<and> (x + y) + z = x + (y + z)
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    45
      \<and> x + y = y + x
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    46
      \<and> x - x = 0
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    47
      \<and> 0 + x = x
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    48
      \<and> a \<cdot> (x + y) = a \<cdot> x + a \<cdot> y
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    49
      \<and> (a + b) \<cdot> x = a \<cdot> x + b \<cdot> x
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    50
      \<and> (a * b) \<cdot> x = a \<cdot> b \<cdot> x
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
    51
      \<and> 1 \<cdot> x = x
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
    52
      \<and> - x = (- 1) \<cdot> x
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    53
      \<and> x - y = x + - y)"
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    54
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    55
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    56
text {* \medskip The corresponding introduction rule is:*}
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    57
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    58
lemma vsI [intro]:
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    59
  "0 \<in> V \<Longrightarrow>
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    60
  \<forall>x \<in> V. \<forall>y \<in> V. x + y \<in> V \<Longrightarrow>
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    61
  \<forall>x \<in> V. \<forall>a. a \<cdot> x \<in> V \<Longrightarrow>
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    62
  \<forall>x \<in> V. \<forall>y \<in> V. \<forall>z \<in> V. (x + y) + z = x + (y + z) \<Longrightarrow>
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    63
  \<forall>x \<in> V. \<forall>y \<in> V. x + y = y + x \<Longrightarrow>
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    64
  \<forall>x \<in> V. x - x = 0 \<Longrightarrow>
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    65
  \<forall>x \<in> V. 0 + x = x \<Longrightarrow>
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    66
  \<forall>x \<in> V. \<forall>y \<in> V. \<forall>a. a \<cdot> (x + y) = a \<cdot> x + a \<cdot> y \<Longrightarrow>
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    67
  \<forall>x \<in> V. \<forall>a b. (a + b) \<cdot> x = a \<cdot> x + b \<cdot> x \<Longrightarrow>
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    68
  \<forall>x \<in> V. \<forall>a b. (a * b) \<cdot> x = a \<cdot> b \<cdot> x \<Longrightarrow>
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
    69
  \<forall>x \<in> V. 1 \<cdot> x = x \<Longrightarrow>
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
    70
  \<forall>x \<in> V. - x = (- 1) \<cdot> x \<Longrightarrow>
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    71
  \<forall>x \<in> V. \<forall>y \<in> V. x - y = x + - y \<Longrightarrow> is_vectorspace V"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    72
  by (unfold is_vectorspace_def) auto
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    73
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    74
text {* \medskip The corresponding destruction rules are: *}
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    75
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    76
lemma negate_eq1:
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
    77
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> - x = (- 1) \<cdot> x"
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    78
  by (unfold is_vectorspace_def) simp
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    79
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    80
lemma diff_eq1:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    81
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> x - y = x + - y"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
    82
  by (unfold is_vectorspace_def) simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    83
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    84
lemma negate_eq2:
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
    85
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> (- 1) \<cdot> x = - x"
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    86
  by (unfold is_vectorspace_def) simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    87
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    88
lemma negate_eq2a:
11704
3c50a2cd6f00 * sane numerals (stage 2): plain "num" syntax (removed "#");
wenzelm
parents: 11701
diff changeset
    89
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> -1 \<cdot> x = - x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
    90
  by (unfold is_vectorspace_def) simp
9013
9dd0274f76af Updated files to remove 0r and 1r from theorems in descendant theories
fleuriot
parents: 8703
diff changeset
    91
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    92
lemma diff_eq2:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    93
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> x + - y = x - y"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    94
  by (unfold is_vectorspace_def) simp
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    95
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    96
lemma vs_not_empty [intro?]: "is_vectorspace V \<Longrightarrow> (V \<noteq> {})"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
    97
  by (unfold is_vectorspace_def) simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
    98
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
    99
lemma vs_add_closed [simp, intro?]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   100
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> x + y \<in> V"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   101
  by (unfold is_vectorspace_def) simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   102
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   103
lemma vs_mult_closed [simp, intro?]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   104
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> a \<cdot> x \<in> V"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   105
  by (unfold is_vectorspace_def) simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   106
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   107
lemma vs_diff_closed [simp, intro?]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   108
 "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> x - y \<in> V"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   109
  by (simp add: diff_eq1 negate_eq1)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   110
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   111
lemma vs_neg_closed  [simp, intro?]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   112
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> - x \<in> V"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   113
  by (simp add: negate_eq1)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   114
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   115
lemma vs_add_assoc [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   116
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> z \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   117
   \<Longrightarrow> (x + y) + z = x + (y + z)"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   118
  by (unfold is_vectorspace_def) blast
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   119
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   120
lemma vs_add_commute [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   121
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> y + x = x + y"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   122
  by (unfold is_vectorspace_def) blast
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   123
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   124
lemma vs_add_left_commute [simp]:
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   125
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> z \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   126
  \<Longrightarrow> x + (y + z) = y + (x + z)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   127
proof -
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   128
  assume "is_vectorspace V"  "x \<in> V"  "y \<in> V"  "z \<in> V"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   129
  hence "x + (y + z) = (x + y) + z"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   130
    by (simp only: vs_add_assoc)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   131
  also have "... = (y + x) + z" by (simp! only: vs_add_commute)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   132
  also have "... = y + (x + z)" by (simp! only: vs_add_assoc)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   133
  finally show ?thesis .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   134
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   135
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   136
theorems vs_add_ac = vs_add_assoc vs_add_commute vs_add_left_commute
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   137
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   138
lemma vs_diff_self [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   139
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> x - x = 0"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   140
  by (unfold is_vectorspace_def) simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   141
7978
1b99ee57d131 final update by Gertrud Bauer;
wenzelm
parents: 7927
diff changeset
   142
text {* The existence of the zero element of a vector space
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   143
follows from the non-emptiness of carrier set. *}
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   144
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   145
lemma zero_in_vs [simp, intro]: "is_vectorspace V \<Longrightarrow> 0 \<in> V"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   146
proof -
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   147
  assume "is_vectorspace V"
9503
wenzelm
parents: 9408
diff changeset
   148
  have "V \<noteq> {}" ..
11472
wenzelm
parents: 10687
diff changeset
   149
  then obtain x where "x \<in> V" by blast
wenzelm
parents: 10687
diff changeset
   150
  have "0 = x - x" by (simp!)
wenzelm
parents: 10687
diff changeset
   151
  also have "... \<in> V" by (simp! only: vs_diff_closed)
wenzelm
parents: 10687
diff changeset
   152
  finally show ?thesis .
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   153
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   154
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   155
lemma vs_add_zero_left [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   156
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow>  0 + x = x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   157
  by (unfold is_vectorspace_def) simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   158
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   159
lemma vs_add_zero_right [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   160
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow>  x + 0 = x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   161
proof -
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   162
  assume "is_vectorspace V"  "x \<in> V"
9374
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   163
  hence "x + 0 = 0 + x" by simp
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   164
  also have "... = x" by (simp!)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   165
  finally show ?thesis .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   166
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   167
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   168
lemma vs_add_mult_distrib1:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   169
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   170
  \<Longrightarrow> a \<cdot> (x + y) = a \<cdot> x + a \<cdot> y"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   171
  by (unfold is_vectorspace_def) simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   172
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   173
lemma vs_add_mult_distrib2:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   174
  "is_vectorspace V \<Longrightarrow> x \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   175
  \<Longrightarrow> (a + b) \<cdot> x = a \<cdot> x + b \<cdot> x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   176
  by (unfold is_vectorspace_def) simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   177
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   178
lemma vs_mult_assoc:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   179
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> (a * b) \<cdot> x = a \<cdot> (b \<cdot> x)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   180
  by (unfold is_vectorspace_def) simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   181
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   182
lemma vs_mult_assoc2 [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   183
 "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> a \<cdot> b \<cdot> x = (a * b) \<cdot> x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   184
  by (simp only: vs_mult_assoc)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   185
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   186
lemma vs_mult_1 [simp]:
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
   187
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> 1 \<cdot> x = x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   188
  by (unfold is_vectorspace_def) simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   189
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   190
lemma vs_diff_mult_distrib1:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   191
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   192
  \<Longrightarrow> a \<cdot> (x - y) = a \<cdot> x - a \<cdot> y"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   193
  by (simp add: diff_eq1 negate_eq1 vs_add_mult_distrib1)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   194
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   195
lemma vs_diff_mult_distrib2:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   196
  "is_vectorspace V \<Longrightarrow> x \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   197
  \<Longrightarrow> (a - b) \<cdot> x = a \<cdot> x - (b \<cdot> x)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   198
proof -
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   199
  assume "is_vectorspace V"  "x \<in> V"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   200
  have " (a - b) \<cdot> x = (a + - b) \<cdot> x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   201
    by (unfold real_diff_def, simp)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   202
  also have "... = a \<cdot> x + (- b) \<cdot> x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   203
    by (rule vs_add_mult_distrib2)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   204
  also have "... = a \<cdot> x + - (b \<cdot> x)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   205
    by (simp! add: negate_eq1)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   206
  also have "... = a \<cdot> x - (b \<cdot> x)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   207
    by (simp! add: diff_eq1)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   208
  finally show ?thesis .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   209
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   210
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   211
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   212
text {* \medskip Further derived laws: *}
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   213
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   214
lemma vs_mult_zero_left [simp]:
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
   215
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> 0 \<cdot> x = 0"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   216
proof -
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   217
  assume "is_vectorspace V"  "x \<in> V"
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
   218
  have  "0 \<cdot> x = (1 - 1) \<cdot> x" by simp
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
   219
  also have "... = (1 + - 1) \<cdot> x" by simp
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
   220
  also have "... =  1 \<cdot> x + (- 1) \<cdot> x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   221
    by (rule vs_add_mult_distrib2)
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
   222
  also have "... = x + (- 1) \<cdot> x" by (simp!)
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   223
  also have "... = x + - x" by (simp! add: negate_eq2a)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   224
  also have "... = x - x" by (simp! add: diff_eq2)
9374
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   225
  also have "... = 0" by (simp!)
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   226
  finally show ?thesis .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   227
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   228
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   229
lemma vs_mult_zero_right [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   230
  "is_vectorspace (V:: 'a::{plus, minus, zero} set)
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   231
  \<Longrightarrow> a \<cdot> 0 = (0::'a)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   232
proof -
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   233
  assume "is_vectorspace V"
9503
wenzelm
parents: 9408
diff changeset
   234
  have "a \<cdot> 0 = a \<cdot> (0 - (0::'a))" by (simp!)
wenzelm
parents: 9408
diff changeset
   235
  also have "... =  a \<cdot> 0 - a \<cdot> 0"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   236
     by (rule vs_diff_mult_distrib1) (simp!)+
9374
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   237
  also have "... = 0" by (simp!)
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   238
  finally show ?thesis .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   239
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   240
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   241
lemma vs_minus_mult_cancel [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   242
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> (- a) \<cdot> - x = a \<cdot> x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   243
  by (simp add: negate_eq1)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   244
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   245
lemma vs_add_minus_left_eq_diff:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   246
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> - x + y = y - x"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   247
proof -
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   248
  assume "is_vectorspace V"  "x \<in> V"  "y \<in> V"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   249
  hence "- x + y = y + - x"
9379
21cfeae6659d tuded presentation;
bauerg
parents: 9374
diff changeset
   250
    by (simp add: vs_add_commute)
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   251
  also have "... = y - x" by (simp! add: diff_eq1)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   252
  finally show ?thesis .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   253
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   254
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   255
lemma vs_add_minus [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   256
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> x + - x = 0"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   257
  by (simp! add: diff_eq2)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   258
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   259
lemma vs_add_minus_left [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   260
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> - x + x = 0"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   261
  by (simp! add: diff_eq2)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   262
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   263
lemma vs_minus_minus [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   264
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> - (- x) = x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   265
  by (simp add: negate_eq1)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   266
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   267
lemma vs_minus_zero [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   268
  "is_vectorspace (V::'a::{plus, minus, zero} set) \<Longrightarrow> - (0::'a) = 0"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   269
  by (simp add: negate_eq1)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   270
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   271
lemma vs_minus_zero_iff [simp]:
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   272
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> (- x = 0) = (x = 0)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   273
  (concl is "?L = ?R")
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   274
proof -
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   275
  assume "is_vectorspace V"  "x \<in> V"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   276
  show "?L = ?R"
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   277
  proof
9379
21cfeae6659d tuded presentation;
bauerg
parents: 9374
diff changeset
   278
    have "x = - (- x)" by (simp! add: vs_minus_minus)
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   279
    also assume ?L
9374
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   280
    also have "- ... = 0" by (rule vs_minus_zero)
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   281
    finally show ?R .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   282
  qed (simp!)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   283
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   284
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   285
lemma vs_add_minus_cancel [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   286
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> x + (- x + y) = y"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   287
  by (simp add: vs_add_assoc [symmetric] del: vs_add_commute)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   288
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   289
lemma vs_minus_add_cancel [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   290
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> - x + (x + y) = y"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   291
  by (simp add: vs_add_assoc [symmetric] del: vs_add_commute)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   292
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   293
lemma vs_minus_add_distrib [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   294
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   295
  \<Longrightarrow> - (x + y) = - x + - y"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   296
  by (simp add: negate_eq1 vs_add_mult_distrib1)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   297
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   298
lemma vs_diff_zero [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   299
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> x - 0 = x"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   300
  by (simp add: diff_eq1)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   301
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   302
lemma vs_diff_zero_right [simp]:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   303
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> 0 - x = - x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   304
  by (simp add:diff_eq1)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   305
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   306
lemma vs_add_left_cancel:
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   307
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> z \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   308
   \<Longrightarrow> (x + y = x + z) = (y = z)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   309
  (concl is "?L = ?R")
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   310
proof
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   311
  assume "is_vectorspace V"  "x \<in> V"  "y \<in> V"  "z \<in> V"
9374
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   312
  have "y = 0 + y" by (simp!)
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   313
  also have "... = - x + x + y" by (simp!)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   314
  also have "... = - x + (x + y)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   315
    by (simp! only: vs_add_assoc vs_neg_closed)
9379
21cfeae6659d tuded presentation;
bauerg
parents: 9374
diff changeset
   316
  also assume "x + y = x + z"
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   317
  also have "- x + (x + z) = - x + x + z"
9623
3ade112482af renamed 'RS' to 'THEN';
wenzelm
parents: 9503
diff changeset
   318
    by (simp! only: vs_add_assoc [symmetric] vs_neg_closed)
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   319
  also have "... = z" by (simp!)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   320
  finally show ?R .
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   321
qed blast
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   322
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   323
lemma vs_add_right_cancel:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   324
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> z \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   325
  \<Longrightarrow> (y + x = z + x) = (y = z)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   326
  by (simp only: vs_add_commute vs_add_left_cancel)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   327
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   328
lemma vs_add_assoc_cong:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   329
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> x' \<in> V \<Longrightarrow> y' \<in> V \<Longrightarrow> z \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   330
  \<Longrightarrow> x + y = x' + y' \<Longrightarrow> x + (y + z) = x' + (y' + z)"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   331
  by (simp only: vs_add_assoc [symmetric])
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   332
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   333
lemma vs_mult_left_commute:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   334
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> z \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   335
  \<Longrightarrow> x \<cdot> y \<cdot> z = y \<cdot> x \<cdot> z"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   336
  by (simp add: real_mult_commute)
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   337
9374
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   338
lemma vs_mult_zero_uniq:
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   339
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> x \<noteq> 0 \<Longrightarrow> a \<cdot> x = 0 \<Longrightarrow> a = 0"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   340
proof (rule classical)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   341
  assume "is_vectorspace V"  "x \<in> V"  "a \<cdot> x = 0"  "x \<noteq> 0"
10683
32871d7fbb0a corrected errors;
bauerg
parents: 10606
diff changeset
   342
  assume "a \<noteq> 0"
10606
e3229a37d53f converted rinv to inverse;
bauerg
parents: 9623
diff changeset
   343
  have "x = (inverse a * a) \<cdot> x" by (simp!)
e3229a37d53f converted rinv to inverse;
bauerg
parents: 9623
diff changeset
   344
  also have "... = inverse a \<cdot> (a \<cdot> x)" by (rule vs_mult_assoc)
e3229a37d53f converted rinv to inverse;
bauerg
parents: 9623
diff changeset
   345
  also have "... = inverse a \<cdot> 0" by (simp!)
9374
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   346
  also have "... = 0" by (simp!)
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   347
  finally have "x = 0" .
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   348
  thus "a = 0" by contradiction
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   349
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   350
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   351
lemma vs_mult_left_cancel:
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
   352
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> a \<noteq> 0 \<Longrightarrow>
9503
wenzelm
parents: 9408
diff changeset
   353
  (a \<cdot> x = a \<cdot> y) = (x = y)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   354
  (concl is "?L = ?R")
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   355
proof
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
   356
  assume "is_vectorspace V"  "x \<in> V"  "y \<in> V"  "a \<noteq> 0"
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11704
diff changeset
   357
  have "x = 1 \<cdot> x" by (simp!)
10606
e3229a37d53f converted rinv to inverse;
bauerg
parents: 9623
diff changeset
   358
  also have "... = (inverse a * a) \<cdot> x" by (simp!)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   359
  also have "... = inverse a \<cdot> (a \<cdot> x)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   360
    by (simp! only: vs_mult_assoc)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   361
  also assume ?L
10606
e3229a37d53f converted rinv to inverse;
bauerg
parents: 9623
diff changeset
   362
  also have "inverse a \<cdot> ... = y" by (simp!)
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   363
  finally show ?R .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   364
qed simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   365
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   366
lemma vs_mult_right_cancel: (*** forward ***)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   367
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> x \<noteq> 0
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   368
  \<Longrightarrow> (a \<cdot> x = b \<cdot> x) = (a = b)" (concl is "?L = ?R")
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   369
proof
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   370
  assume v: "is_vectorspace V"  "x \<in> V"  "x \<noteq> 0"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   371
  have "(a - b) \<cdot> x = a \<cdot> x - b \<cdot> x"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   372
    by (simp! add: vs_diff_mult_distrib2)
9503
wenzelm
parents: 9408
diff changeset
   373
  also assume ?L hence "a \<cdot> x - b \<cdot> x = 0" by (simp!)
10683
32871d7fbb0a corrected errors;
bauerg
parents: 10606
diff changeset
   374
  finally have "(a - b) \<cdot> x = 0" .
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   375
  from v this have "a - b = 0" by (rule vs_mult_zero_uniq)
10683
32871d7fbb0a corrected errors;
bauerg
parents: 10606
diff changeset
   376
  thus "a = b" by simp
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   377
qed simp
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   378
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   379
lemma vs_eq_diff_eq:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   380
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> z \<in> V \<Longrightarrow>
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   381
  (x = z - y) = (x + y = z)"
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   382
  (concl is "?L = ?R" )
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   383
proof -
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   384
  assume vs: "is_vectorspace V"  "x \<in> V"  "y \<in> V"  "z \<in> V"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   385
  show "?L = ?R"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   386
  proof
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   387
    assume ?L
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   388
    hence "x + y = z - y + y" by simp
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   389
    also have "... = z + - y + y" by (simp! add: diff_eq1)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   390
    also have "... = z + (- y + y)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   391
      by (rule vs_add_assoc) (simp!)+
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   392
    also from vs have "... = z + 0"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   393
      by (simp only: vs_add_minus_left)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   394
    also from vs have "... = z" by (simp only: vs_add_zero_right)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   395
    finally show ?R .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   396
  next
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   397
    assume ?R
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   398
    hence "z - y = (x + y) - y" by simp
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   399
    also from vs have "... = x + y + - y"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   400
      by (simp add: diff_eq1)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   401
    also have "... = x + (y + - y)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   402
      by (rule vs_add_assoc) (simp!)+
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   403
    also have "... = x" by (simp!)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   404
    finally show ?L by (rule sym)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   405
  qed
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   406
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   407
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   408
lemma vs_add_minus_eq_minus:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   409
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> x + y = 0 \<Longrightarrow> x = - y"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   410
proof -
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   411
  assume "is_vectorspace V"  "x \<in> V"  "y \<in> V"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   412
  have "x = (- y + y) + x" by (simp!)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   413
  also have "... = - y + (x + y)" by (simp!)
9374
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   414
  also assume "x + y = 0"
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   415
  also have "- y + 0 = - y" by (simp!)
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   416
  finally show "x = - y" .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   417
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   418
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   419
lemma vs_add_minus_eq:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   420
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> x - y = 0 \<Longrightarrow> x = y"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   421
proof -
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   422
  assume "is_vectorspace V"  "x \<in> V"  "y \<in> V"  "x - y = 0"
9374
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   423
  assume "x - y = 0"
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   424
  hence e: "x + - y = 0" by (simp! add: diff_eq1)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   425
  with _ _ _ have "x = - (- y)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   426
    by (rule vs_add_minus_eq_minus) (simp!)+
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   427
  thus "x = y" by (simp!)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   428
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   429
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   430
lemma vs_add_diff_swap:
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   431
  "is_vectorspace V \<Longrightarrow> a \<in> V \<Longrightarrow> b \<in> V \<Longrightarrow> c \<in> V \<Longrightarrow> d \<in> V \<Longrightarrow> a + b = c + d
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   432
  \<Longrightarrow> a - c = d - b"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   433
proof -
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   434
  assume vs: "is_vectorspace V"  "a \<in> V"  "b \<in> V"  "c \<in> V"  "d \<in> V"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   435
    and eq: "a + b = c + d"
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   436
  have "- c + (a + b) = - c + (c + d)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   437
    by (simp! add: vs_add_left_cancel)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   438
  also have "... = d" by (rule vs_minus_add_cancel)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   439
  finally have eq: "- c + (a + b) = d" .
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   440
  from vs have "a - c = (- c + (a + b)) + - b"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   441
    by (simp add: vs_add_ac diff_eq1)
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   442
  also from eq have "...  = d + - b"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   443
    by (simp! add: vs_add_right_cancel)
9374
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   444
  also have "... = d - b" by (simp! add: diff_eq2)
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   445
  finally show "a - c = d - b" .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   446
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   447
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   448
lemma vs_add_cancel_21:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   449
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> z \<in> V \<Longrightarrow> u \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   450
  \<Longrightarrow> (x + (y + z) = y + u) = ((x + z) = u)"
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   451
  (concl is "?L = ?R")
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   452
proof -
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   453
  assume "is_vectorspace V"  "x \<in> V"  "y \<in> V"  "z \<in> V"  "u \<in> V"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   454
  show "?L = ?R"
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   455
  proof
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   456
    have "x + z = - y + y + (x + z)" by (simp!)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   457
    also have "... = - y + (y + (x + z))"
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   458
      by (rule vs_add_assoc) (simp!)+
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   459
    also have "y + (x + z) = x + (y + z)" by (simp!)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   460
    also assume ?L
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   461
    also have "- y + (y + u) = u" by (simp!)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   462
    finally show ?R .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   463
  qed (simp! only: vs_add_left_commute [of V x])
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   464
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   465
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   466
lemma vs_add_cancel_end:
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   467
  "is_vectorspace V \<Longrightarrow> x \<in> V \<Longrightarrow> y \<in> V \<Longrightarrow> z \<in> V
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   468
  \<Longrightarrow> (x + (y + z) = y) = (x = - z)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   469
  (concl is "?L = ?R" )
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   470
proof -
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   471
  assume "is_vectorspace V"  "x \<in> V"  "y \<in> V"  "z \<in> V"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   472
  show "?L = ?R"
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   473
  proof
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   474
    assume l: ?L
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   475
    have "x + z = 0"
9623
3ade112482af renamed 'RS' to 'THEN';
wenzelm
parents: 9503
diff changeset
   476
    proof (rule vs_add_left_cancel [THEN iffD1])
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   477
      have "y + (x + z) = x + (y + z)" by (simp!)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   478
      also note l
9374
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   479
      also have "y = y + 0" by (simp!)
153853af318b - xsymbols for
bauerg
parents: 9035
diff changeset
   480
      finally show "y + (x + z) = y + 0" .
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   481
    qed (simp!)+
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   482
    thus "x = - z" by (simp! add: vs_add_minus_eq_minus)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   483
  next
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   484
    assume r: ?R
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   485
    hence "x + (y + z) = - z + (y + z)" by simp
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   486
    also have "... = y + (- z + z)"
9035
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   487
      by (simp! only: vs_add_left_commute)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   488
    also have "... = y"  by (simp!)
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   489
    finally show ?L .
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   490
  qed
371f023d3dbd removed explicit terminator (";");
wenzelm
parents: 9013
diff changeset
   491
qed
7917
5e5b9813cce7 HahnBanach update by Gertrud Bauer;
wenzelm
parents:
diff changeset
   492
10687
c186279eecea tuned HOL/Real/HahnBanach;
wenzelm
parents: 10683
diff changeset
   493
end