src/HOL/Real/HahnBanach/LinearSpace.thy
author paulson
Mon, 11 Oct 1999 10:50:41 +0200
changeset 7823 742715638a01
parent 7808 fd019ac3485f
permissions -rw-r--r--
new thm vimage_INT; deleted redundant UN_vimage
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
     1
(*  Title:      HOL/Real/HahnBanach/LinearSpace.thy
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
     2
    ID:         $Id$
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
     3
    Author:     Gertrud Bauer, TU Munich
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
     4
*)
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
     5
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
     6
header {* Linear Spaces *};
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
     7
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
     8
theory LinearSpace = Bounds + Aux:;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
     9
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    10
subsection {* Signature *};
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    11
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    12
consts
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    13
  sum	:: "['a, 'a] => 'a"                              (infixl "[+]" 65)
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    14
  prod  :: "[real, 'a] => 'a"                            (infixr "[*]" 70) 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    15
  zero  :: 'a                                            ("<0>");
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    16
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    17
constdefs
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    18
  negate :: "'a => 'a"                                   ("[-] _" [100] 100)
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    19
  "[-] x == (- 1r) [*] x"
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    20
  diff :: "'a => 'a => 'a"                               (infixl "[-]" 68)
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    21
  "x [-] y == x [+] [-] y";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    22
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    23
subsection {* Vector space laws *}
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    24
(***
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    25
constdefs
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    26
  is_vectorspace :: "'a set => bool"
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    27
  "is_vectorspace V == V ~= {} 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    28
   & (ALL x: V. ALL a. a [*] x: V)
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    29
   & (ALL x: V. ALL y: V. x [+] y = y [+] x)
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    30
   & (ALL x: V. ALL y: V. ALL z: V. x [+] y [+] z =  x [+] (y [+] z))
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    31
   & (ALL x: V. ALL y: V. x [+] y: V)
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    32
   & (ALL x: V. x [-] x = <0>)
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    33
   & (ALL x: V. <0> [+] x = x)
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    34
   & (ALL x: V. ALL y: V. ALL a. a [*] (x [+] y) = a [*] x [+] a [*] y)
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    35
   & (ALL x: V. ALL a b. (a + b) [*] x = a [*] x [+] b [*] x)
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    36
   & (ALL x: V. ALL a b. (a * b) [*] x = a [*] b [*] x)
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    37
   & (ALL x: V. 1r [*] x = x)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    38
***)
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    39
constdefs
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    40
  is_vectorspace :: "'a set => bool"
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    41
  "is_vectorspace V == V ~= {} 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    42
   & (ALL x:V. ALL y:V. ALL z:V. ALL a b. 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    43
        x [+] y: V 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    44
      & a [*] x: V                         
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    45
      & x [+] y [+] z = x [+] (y [+] z)  
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    46
      & x [+] y = y [+] x             
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    47
      & x [-] x = <0>         
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    48
      & <0> [+] x = x 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    49
      & a [*] (x [+] y) = a [*] x [+] a [*] y
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    50
      & (a + b) [*] x = a [*] x [+] b [*] x
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    51
      & (a * b) [*] x = a [*] b [*] x     
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    52
      & 1r [*] x = x)";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    53
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
    54
lemma vsI [intro]:
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    55
  "[| <0>:V; \
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    56
       ALL x: V. ALL y: V. x [+] y: V;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    57
       ALL x: V. ALL a. a [*] x: V;    
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    58
       ALL x: V. ALL y: V. ALL z: V. x [+] y [+] z =  x [+] (y [+] z);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    59
       ALL x: V. ALL y: V. x [+] y = y [+] x;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    60
       ALL x: V. x [-] x = <0>;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    61
       ALL x: V. <0> [+] x = x;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    62
       ALL x: V. ALL y: V. ALL a. a [*] (x [+] y) = a [*] x [+] a [*] y;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    63
       ALL x: V. ALL a b. (a + b) [*] x = a [*] x [+] b [*] x;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    64
       ALL x: V. ALL a b. (a * b) [*] x = a [*] b [*] x; \
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    65
       ALL x: V. 1r [*] x = x |] ==> is_vectorspace V";
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
    66
proof (unfold is_vectorspace_def, intro conjI ballI allI);
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
    67
  fix x y z; assume "x:V" "y:V" "z:V"; 
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
    68
  assume "ALL x: V. ALL y: V. ALL z: V. x [+] y [+] z =  x [+] (y [+] z)";
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
    69
  thus "x [+] y [+] z =  x [+] (y [+] z)"; by (elim bspec[elimify]);
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
    70
qed force+;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    71
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    72
lemma vs_not_empty [intro !!]: "is_vectorspace V ==> (V ~= {})"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    73
  by (unfold is_vectorspace_def) simp;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    74
 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    75
lemma vs_add_closed [simp, intro!!]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    76
  "[| is_vectorspace V; x: V; y: V|] ==> x [+] y: V"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
    77
  by (unfold is_vectorspace_def) simp;
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
    78
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    79
lemma vs_mult_closed [simp, intro!!]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    80
  "[| is_vectorspace V; x: V |] ==> a [*] x: V"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
    81
  by (unfold is_vectorspace_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    82
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    83
lemma vs_diff_closed [simp, intro!!]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    84
 "[| is_vectorspace V; x: V; y: V|] ==> x [-] y: V";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
    85
  by (unfold diff_def negate_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    86
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    87
lemma vs_neg_closed  [simp, intro!!]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    88
  "[| is_vectorspace V; x: V |] ==>  [-] x: V";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
    89
  by (unfold negate_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    90
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    91
lemma vs_add_assoc [simp]:  
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    92
  "[| is_vectorspace V; x: V; y: V; z: V|]
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    93
   ==> x [+] y [+] z = x [+] (y [+] z)";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    94
  by (unfold is_vectorspace_def) fast;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    95
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    96
lemma vs_add_commute [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
    97
  "[| is_vectorspace V; x:V; y:V |] ==> y [+] x = x [+] y";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
    98
  by (unfold is_vectorspace_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
    99
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   100
lemma vs_add_left_commute [simp]:
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   101
  "[| is_vectorspace V; x:V; y:V; z:V |] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   102
  ==> x [+] (y [+] z) = y [+] (x [+] z)";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   103
proof -;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   104
  assume "is_vectorspace V" "x:V" "y:V" "z:V";
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   105
  hence "x [+] (y [+] z) = (x [+] y) [+] z"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   106
    by (simp only: vs_add_assoc);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   107
  also; have "... = (y [+] x) [+] z"; by (simp! only: vs_add_commute);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   108
  also; have "... = y [+] (x [+] z)"; by (simp! only: vs_add_assoc);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   109
  finally; show ?thesis; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   110
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   111
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   112
theorems vs_add_ac = vs_add_assoc vs_add_commute vs_add_left_commute;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   113
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   114
lemma vs_diff_self [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   115
  "[| is_vectorspace V; x:V |] ==>  x [-] x = <0>"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   116
  by (unfold is_vectorspace_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   117
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   118
lemma zero_in_vs [simp, intro]: "is_vectorspace V ==> <0>:V";
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   119
proof -; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   120
  assume "is_vectorspace V";
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   121
  have "V ~= {}"; ..;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   122
  hence "EX x. x:V"; by force;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   123
  thus ?thesis; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   124
  proof; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   125
    fix x; assume "x:V"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   126
    have "<0> = x [-] x"; by (simp!);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   127
    also; have "... : V"; by (simp! only: vs_diff_closed);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   128
    finally; show ?thesis; .;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   129
  qed;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   130
qed;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   131
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   132
lemma vs_add_zero_left [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   133
  "[| is_vectorspace V; x:V |] ==>  <0> [+] x = x";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   134
  by (unfold is_vectorspace_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   135
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   136
lemma vs_add_zero_right [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   137
  "[| is_vectorspace V; x:V |] ==>  x [+] <0> = x";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   138
proof -;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   139
  assume "is_vectorspace V" "x:V";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   140
  hence "x [+] <0> = <0> [+] x"; by simp;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   141
  also; have "... = x"; by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   142
  finally; show ?thesis; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   143
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   144
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   145
lemma vs_add_mult_distrib1: 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   146
  "[| is_vectorspace V; x:V; y:V |] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   147
  ==> a [*] (x [+] y) = a [*] x [+] a [*] y";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   148
  by (unfold is_vectorspace_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   149
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   150
lemma vs_add_mult_distrib2: 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   151
  "[| is_vectorspace V; x:V |] ==> (a + b) [*] x = a [*] x [+] b [*] x"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   152
  by (unfold is_vectorspace_def) simp;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   153
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   154
lemma vs_mult_assoc: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   155
  "[| is_vectorspace V; x:V |] ==> (a * b) [*] x = a [*] (b [*] x)";   
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   156
  by (unfold is_vectorspace_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   157
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   158
lemma vs_mult_assoc2 [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   159
 "[| is_vectorspace V; x:V |] ==> a [*] b [*] x = (a * b) [*] x";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   160
  by (simp only: vs_mult_assoc);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   161
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   162
lemma vs_mult_1 [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   163
  "[| is_vectorspace V; x:V |] ==> 1r [*] x = x"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   164
  by (unfold is_vectorspace_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   165
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   166
lemma vs_diff_mult_distrib1: 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   167
  "[| is_vectorspace V; x:V; y:V |] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   168
  ==> a [*] (x [-] y) = a [*] x [-] a [*] y";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   169
  by (simp add: diff_def negate_def vs_add_mult_distrib1);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   170
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   171
lemma vs_minus_eq: "[| is_vectorspace V; x:V |] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   172
  ==> - b [*] x = [-] (b [*] x)";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   173
  by (simp add: negate_def);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   174
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   175
lemma vs_diff_mult_distrib2: 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   176
  "[| is_vectorspace V; x:V |] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   177
  ==> (a - b) [*] x = a [*] x [-] (b [*] x)";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   178
proof -;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   179
  assume "is_vectorspace V" "x:V";
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   180
  have " (a - b) [*] x = (a + - b ) [*] x"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   181
    by (unfold real_diff_def, simp);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   182
  also; have "... = a [*] x [+] (- b) [*] x"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   183
    by (rule vs_add_mult_distrib2);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   184
  also; have "... = a [*] x [+] [-] (b [*] x)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   185
    by (simp! add: vs_minus_eq);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   186
  also; have "... = a [*] x [-] (b [*] x)"; by (unfold diff_def, simp);
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   187
  finally; show ?thesis; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   188
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   189
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   190
lemma vs_mult_zero_left [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   191
  "[| is_vectorspace V; x: V|] ==> 0r [*] x = <0>";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   192
proof -;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   193
  assume "is_vectorspace V" "x:V";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   194
  have  "0r [*] x = (1r - 1r) [*] x"; by (simp only: real_diff_self);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   195
  also; have "... = (1r + - 1r) [*] x"; by simp;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   196
  also; have "... =  1r [*] x [+] (- 1r) [*] x"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   197
    by (rule vs_add_mult_distrib2);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   198
  also; have "... = x [+] (- 1r) [*] x"; by (simp!);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   199
  also; have "... = x [+] [-] x"; by (fold negate_def) simp;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   200
  also; have "... = x [-] x"; by (fold diff_def) simp;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   201
  also; have "... = <0>"; by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   202
  finally; show ?thesis; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   203
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   204
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   205
lemma vs_mult_zero_right [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   206
  "[| is_vectorspace (V:: 'a set) |] ==> a [*] <0> = (<0>::'a)";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   207
proof -;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   208
  assume "is_vectorspace V";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   209
  have "a [*] <0> = a [*] (<0> [-] (<0>::'a))"; by (simp!);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   210
  also; have "... =  a [*] <0> [-] a [*] <0>";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   211
     by (rule vs_diff_mult_distrib1) (simp!)+;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   212
  also; have "... = <0>"; by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   213
  finally; show ?thesis; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   214
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   215
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   216
lemma vs_minus_mult_cancel [simp]:  
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   217
  "[| is_vectorspace V; x:V |] ==> (- a) [*] [-] x = a [*] x";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   218
  by (unfold negate_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   219
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   220
lemma vs_add_minus_left_eq_diff: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   221
  "[| is_vectorspace V; x:V; y:V |] ==> [-] x [+] y = y [-] x";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   222
proof -; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   223
  assume "is_vectorspace V" "x:V" "y:V";
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   224
  have "[-] x [+] y = y [+] [-] x"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   225
    by (simp! add: vs_add_commute [RS sym, of V "[-] x"]);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   226
  also; have "... = y [-] x"; by (unfold diff_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   227
  finally; show ?thesis; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   228
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   229
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   230
lemma vs_add_minus [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   231
  "[| is_vectorspace V; x:V|] ==> x [+] [-] x = <0>";
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   232
  by (fold diff_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   233
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   234
lemma vs_add_minus_left [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   235
  "[| is_vectorspace V; x:V |] ==> [-] x [+]  x = <0>";
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   236
  by (fold diff_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   237
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   238
lemma vs_minus_minus [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   239
  "[| is_vectorspace V; x:V|] ==> [-] [-] x = x";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   240
  by (unfold negate_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   241
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   242
lemma vs_minus_zero [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   243
  "[| is_vectorspace (V::'a set)|] ==> [-] (<0>::'a) = <0>"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   244
  by (unfold negate_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   245
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   246
lemma vs_minus_zero_iff [simp]:
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   247
  "[| is_vectorspace V; x:V|] ==> ([-] x = <0>) = (x = <0>)" 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   248
  (concl is "?L = ?R");
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   249
proof -;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   250
  assume vs: "is_vectorspace V" "x:V";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   251
  show "?L = ?R";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   252
  proof;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   253
    assume l: ?L;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   254
    have "x = [-] [-] x"; by (rule vs_minus_minus [RS sym]);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   255
    also; have "... = [-] <0>"; by (simp only: l);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   256
    also; have "... = <0>"; by (rule vs_minus_zero);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   257
    finally; show ?R; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   258
  next;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   259
    assume ?R;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   260
    with vs; show ?L; by simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   261
  qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   262
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   263
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   264
lemma vs_add_minus_cancel [simp]:  
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   265
  "[| is_vectorspace V; x:V; y:V|] ==>  x [+] ([-] x [+] y) = y"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   266
  by (simp add: vs_add_assoc [RS sym] del: vs_add_commute); 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   267
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   268
lemma vs_minus_add_cancel [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   269
  "[| is_vectorspace V; x:V; y:V |] ==>  [-] x [+] (x [+] y) = y"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   270
  by (simp add: vs_add_assoc [RS sym] del: vs_add_commute); 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   271
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   272
lemma vs_minus_add_distrib [simp]:  
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   273
  "[| is_vectorspace V; x:V; y:V|] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   274
  ==> [-] (x [+] y) = [-] x [+] [-] y";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   275
  by (unfold negate_def, simp add: vs_add_mult_distrib1);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   276
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   277
lemma vs_diff_zero [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   278
  "[| is_vectorspace V; x:V |] ==> x [-] <0> = x";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   279
  by (unfold diff_def) simp;  
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   280
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   281
lemma vs_diff_zero_right [simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   282
  "[| is_vectorspace V; x:V |] ==> <0> [-] x = [-] x";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   283
  by (unfold diff_def) simp;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   284
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   285
lemma vs_add_left_cancel:
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   286
  "[| is_vectorspace V; x:V; y:V; z:V|] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   287
   ==> (x [+] y = x [+] z) = (y = z)"  
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   288
  (concl is "?L = ?R");
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   289
proof;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   290
  assume "is_vectorspace V" "x:V" "y:V" "z:V";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   291
  assume l: ?L; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   292
  have "y = <0> [+] y"; by (simp!);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   293
  also; have "... = [-] x [+] x [+] y"; by (simp!);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   294
  also; have "... = [-] x [+] (x [+] y)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   295
    by (simp! only: vs_add_assoc vs_neg_closed);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   296
  also; have "...  = [-] x [+] (x [+] z)"; by (simp only: l);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   297
  also; have "... = [-] x [+] x [+] z"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   298
    by (rule vs_add_assoc [RS sym]) (simp!)+;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   299
  also; have "... = z"; by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   300
  finally; show ?R;.;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   301
next;    
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   302
  assume ?R;
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   303
  thus ?L; by force;
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   304
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   305
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   306
lemma vs_add_right_cancel: 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   307
  "[| is_vectorspace V; x:V; y:V; z:V |] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   308
  ==> (y [+] x = z [+] x) = (y = z)";  
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   309
  by (simp only: vs_add_commute vs_add_left_cancel);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   310
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   311
lemma vs_add_assoc_cong [tag FIXME simp]: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   312
  "[| is_vectorspace V; x:V; y:V; x':V; y':V; z:V |] 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   313
  ==> x [+] y = x' [+] y' ==> x [+] (y [+] z) = x' [+] (y' [+] z)"; 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   314
  by (simp del: vs_add_commute vs_add_assoc add: vs_add_assoc [RS sym]); 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   315
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   316
lemma vs_mult_left_commute: 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   317
  "[| is_vectorspace V; x:V; y:V; z:V |] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   318
  ==> x [*] y [*] z = y [*] x [*] z";  
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   319
  by (simp add: real_mult_commute);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   320
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   321
lemma vs_mult_zero_uniq :
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   322
  "[| is_vectorspace V; x:V; a [*] x = <0>; x ~= <0> |] ==> a = 0r";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   323
proof (rule classical);
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   324
  assume "is_vectorspace V" "x:V" "a [*] x = <0>" "x ~= <0>";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   325
  assume "a ~= 0r";
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   326
  have "x = (rinv a * a) [*] x"; by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   327
  also; have "... = (rinv a) [*] (a [*] x)"; by (rule vs_mult_assoc);
7566
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   328
  also; have "... = (rinv a) [*] <0>"; by (simp!);
c5a3f980a7af accomodate refined facts handling;
wenzelm
parents: 7535
diff changeset
   329
  also; have "... = <0>"; by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   330
  finally; have "x = <0>"; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   331
  thus "a = 0r"; by contradiction; 
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   332
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   333
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   334
lemma vs_mult_left_cancel: 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   335
  "[| is_vectorspace V; x:V; y:V; a ~= 0r |] ==> 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   336
  (a [*] x = a [*] y) = (x = y)"
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   337
  (concl is "?L = ?R");
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   338
proof;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   339
  assume "is_vectorspace V" "x:V" "y:V" "a ~= 0r";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   340
  assume l: ?L;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   341
  have "x = 1r [*] x"; by (simp!);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   342
  also; have "... = (rinv a * a) [*] x"; by (simp!);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   343
  also; have "... = rinv a [*] (a [*] x)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   344
    by (simp! only: vs_mult_assoc);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   345
  also; have "... = rinv a [*] (a [*] y)"; by (simp only: l);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   346
  also; have "... = y"; by (simp!);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   347
  finally; show ?R;.;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   348
next;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   349
  assume ?R;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   350
  thus ?L; by simp;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   351
qed;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   352
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   353
lemma vs_mult_right_cancel: (*** forward ***)
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   354
  "[| is_vectorspace V; x:V; x ~= <0> |] ==>  (a [*] x = b [*] x) = (a = b)"
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   355
  (concl is "?L = ?R");
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   356
proof;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   357
  assume "is_vectorspace V" "x:V" "x ~= <0>";
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   358
  assume l: ?L;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   359
  have "(a - b) [*] x = a [*] x [-] b [*] x"; by (simp! add: vs_diff_mult_distrib2);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   360
  also; from l; have "a [*] x [-] b [*] x = <0>"; by (simp!);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   361
  finally; have "(a - b) [*] x  = <0>"; .; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   362
  hence "a - b = 0r"; by (simp! add:  vs_mult_zero_uniq);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   363
  thus "a = b"; by (rule real_add_minus_eq);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   364
next;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   365
  assume ?R;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   366
  thus ?L; by simp;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   367
qed; (*** backward :
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   368
lemma vs_mult_right_cancel: 
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   369
  "[| is_vectorspace V; x:V; x ~= <0> |] ==>  (a [*] x = b [*] x) = (a = b)"
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   370
  (concl is "?L = ?R");
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   371
proof;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   372
  assume "is_vectorspace V" "x:V" "x ~= <0>";
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   373
  assume l: ?L; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   374
  show "a = b"; 
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   375
  proof (rule real_add_minus_eq);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   376
    show "a - b = 0r"; 
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   377
    proof (rule vs_mult_zero_uniq);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   378
      have "(a - b) [*] x = a [*] x [-] b [*] x"; by (simp! add: vs_diff_mult_distrib2);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   379
      also; from l; have "a [*] x [-] b [*] x = <0>"; by (simp!);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   380
      finally; show "(a - b) [*] x  = <0>"; .; 
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   381
    qed;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   382
  qed;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   383
next;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   384
  assume ?R;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   385
  thus ?L; by simp;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   386
qed;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   387
**)
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   388
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   389
lemma vs_eq_diff_eq: 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   390
  "[| is_vectorspace V; x:V; y:V; z:V |] ==> 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   391
  (x = z [-] y) = (x [+] y = z)"
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   392
   (concl is "?L = ?R" );  
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   393
proof -;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   394
  assume vs: "is_vectorspace V" "x:V" "y:V" "z:V";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   395
  show "?L = ?R";   
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   396
  proof;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   397
    assume l: ?L;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   398
    have "x [+] y = z [-] y [+] y"; by (simp add: l);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   399
    also; have "... = z [+] [-] y [+] y"; by (unfold diff_def) simp;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   400
    also; have "... = z [+] ([-] y [+] y)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   401
      by (rule vs_add_assoc) (simp!)+;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   402
    also; from vs; have "... = z [+] <0>"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   403
      by (simp only: vs_add_minus_left);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   404
    also; from vs; have "... = z"; by (simp only: vs_add_zero_right);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   405
    finally; show ?R;.;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   406
  next;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   407
    assume r: ?R;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   408
    have "z [-] y = (x [+] y) [-] y"; by (simp only: r);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   409
    also; from vs; have "... = x [+] y [+] [-] y"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   410
      by (unfold diff_def) simp;
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   411
    also; have "... = x [+] (y [+] [-] y)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   412
      by (rule vs_add_assoc) (simp!)+;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   413
    also; have "... = x"; by (simp!);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   414
    finally; show ?L; by (rule sym);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   415
  qed;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   416
qed;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   417
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   418
lemma vs_add_minus_eq_minus: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   419
  "[| is_vectorspace V; x:V; y:V; <0> = x [+] y|] ==> y = [-] x"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   420
proof -;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   421
  assume vs: "is_vectorspace V" "x:V" "y:V"; 
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   422
  assume "<0> = x [+] y";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   423
  have "[-] x = [-] x [+] <0>"; by (simp!);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   424
  also; have "... = [-] x [+] (x [+] y)";  by (simp!);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   425
  also; have "... = [-] x [+] x [+] y"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   426
    by (rule vs_add_assoc [RS sym]) (simp!)+;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   427
  also; have "... = (x [+] [-] x) [+] y"; by (simp!);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   428
  also; have "... = y"; by (simp!);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   429
  finally; show ?thesis; by (rule sym);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   430
qed;  
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   431
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   432
lemma vs_add_minus_eq: 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   433
  "[| is_vectorspace V; x:V; y:V; x [-] y = <0> |] ==> x = y"; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   434
proof -;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   435
  assume "is_vectorspace V" "x:V" "y:V" "x [-] y = <0>";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   436
  have "x [+] [-] y = x [-] y"; by (unfold diff_def, simp);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   437
  also; have "... = <0>"; .;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   438
  finally; have e: "<0> = x [+] [-] y"; by (rule sym);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   439
  have "x = [-] [-] x"; by (simp!);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   440
  also; have "[-] x = [-] y"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   441
    by (rule vs_add_minus_eq_minus [RS sym]) (simp! add: e)+;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   442
  also; have "[-] ... = y"; by (simp!); 
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   443
  finally; show "x = y"; .;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   444
qed;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   445
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   446
lemma vs_add_diff_swap:
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   447
  "[| is_vectorspace V; a:V; b:V; c:V; d:V; a [+] b = c [+] d|] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   448
  ==> a [-] c = d [-] b";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   449
proof -; 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   450
  assume vs: "is_vectorspace V" "a:V" "b:V" "c:V" "d:V" 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   451
  and eq: "a [+] b = c [+] d";
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   452
  have "[-] c [+] (a [+] b) = [-] c [+] (c [+] d)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   453
    by (simp! add: vs_add_left_cancel);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   454
  also; have "... = d"; by (rule vs_minus_add_cancel);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   455
  finally; have eq: "[-] c [+] (a [+] b) = d"; .;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   456
  from vs; have "a [-] c = ([-] c [+] (a [+] b)) [+] [-] b"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   457
    by (simp add: vs_add_ac diff_def);
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   458
  also; from eq; have "...  = d [+] [-] b"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   459
    by (simp! add: vs_add_right_cancel);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   460
  also; have "... = d [-] b"; by (simp add : diff_def);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   461
  finally; show "a [-] c = d [-] b"; .;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   462
qed;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   463
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   464
lemma vs_add_cancel_21: 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   465
  "[| is_vectorspace V; x:V; y:V; z:V; u:V|] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   466
  ==> (x [+] (y [+] z) = y [+] u) = ((x [+] z) = u)"
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   467
  (concl is "?L = ?R" ); 
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   468
proof -; 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   469
  assume vs: "is_vectorspace V" "x:V" "y:V""z:V" "u:V";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   470
  show "?L = ?R";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   471
  proof;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   472
    assume l: ?L;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   473
    have "u = <0> [+] u"; by (simp!);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   474
    also; have "... = [-] y [+] y [+] u"; by (simp!);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   475
    also; have "... = [-] y [+] (y [+] u)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   476
      by (rule vs_add_assoc) (simp!)+;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   477
    also; have "... = [-] y [+] (x [+] (y [+] z))"; by (simp only: l);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   478
    also; have "... = [-] y [+] (y [+] (x [+] z))"; by (simp!);
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   479
    also; have "... = [-] y [+] y [+] (x [+] z)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   480
      by (rule vs_add_assoc [RS sym]) (simp!)+;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   481
    also; have "... = (x [+] z)"; by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   482
    finally; show ?R; by (rule sym);
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   483
  next;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   484
    assume r: ?R;
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   485
    have "x [+] (y [+] z) = y [+] (x [+] z)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   486
      by (simp! only: vs_add_left_commute [of V x]);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   487
    also; have "... = y [+] u"; by (simp only: r);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   488
    finally; show ?L; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   489
  qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   490
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   491
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   492
lemma vs_add_cancel_end: 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   493
  "[| is_vectorspace V;  x:V; y:V; z:V |] 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   494
  ==> (x [+] (y [+] z) = y) = (x = [-] z)"
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   495
  (concl is "?L = ?R" );
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   496
proof -;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   497
  assume vs: "is_vectorspace V" "x:V" "y:V" "z:V";
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   498
  show "?L = ?R";
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   499
  proof;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   500
    assume l: ?L;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   501
    have "<0> = x [+] z";
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   502
    proof (rule vs_add_left_cancel [RS iffD1]);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   503
      have "y [+] <0> = y"; by (simp! only: vs_add_zero_right); 
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   504
      also; have "... =  x [+] (y [+] z)"; by (simp only: l); 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   505
      also; have "... = y [+] (x [+] z)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   506
        by (simp! only: vs_add_left_commute); 
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   507
      finally; show "y [+] <0> = y [+] (x [+] z)"; .;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   508
  qed (simp!)+;
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   509
    hence "z = [-] x"; by (simp! only: vs_add_minus_eq_minus);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   510
    then; show ?R; by (simp!); 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   511
  next;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   512
    assume r: ?R;
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   513
    have "x [+] (y [+] z) = [-] z [+] (y [+] z)"; by (simp only: r); 
7808
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   514
    also; have "... = y [+] ([-] z [+] z)"; 
fd019ac3485f update from Gertrud;
wenzelm
parents: 7656
diff changeset
   515
      by (simp! only: vs_add_left_commute);
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   516
    also; have "... = y [+] <0>";  by (simp!);
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   517
    also; have "... = y";  by (simp!);
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   518
    finally; show ?L; .;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   519
  qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   520
qed;
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   521
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   522
lemma it: "[| x = y; x' = y'|] ==> x [+] x' = y [+] y'";
7656
2f18c0ffc348 update from Gertrud;
wenzelm
parents: 7566
diff changeset
   523
  by simp; 
7535
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   524
599d3414b51d The Hahn-Banach theorem for real vectorspaces (Isabelle/Isar)
wenzelm
parents:
diff changeset
   525
end;