author | paulson |
Sun, 07 Dec 2003 16:30:06 +0100 | |
changeset 14284 | f1abe67c448a |
parent 14277 | ad66687ece6e |
child 14288 | d149e3cbdb39 |
permissions | -rw-r--r-- |
10722 | 1 |
theory RealArith0 = RealBin |
2 |
files "real_arith0.ML": |
|
3 |
||
14284
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
4 |
(*FIXME: move results further down to Ring_and_Field*) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
5 |
|
10722 | 6 |
setup real_arith_setup |
7 |
||
14277
ad66687ece6e
more field division lemmas transferred from Real to Ring_and_Field
paulson
parents:
14275
diff
changeset
|
8 |
subsection{*Facts that need the Arithmetic Decision Procedure*} |
14275
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
9 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
10 |
lemma real_diff_minus_eq: "x - - y = x + (y::real)" |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
11 |
by simp |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
12 |
declare real_diff_minus_eq [simp] |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
13 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
14 |
(** Division and inverse **) |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
15 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
16 |
lemma real_inverse_eq_divide: "inverse (x::real) = 1/x" |
14277
ad66687ece6e
more field division lemmas transferred from Real to Ring_and_Field
paulson
parents:
14275
diff
changeset
|
17 |
by (rule Ring_and_Field.inverse_eq_divide) |
14275
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
18 |
|
14277
ad66687ece6e
more field division lemmas transferred from Real to Ring_and_Field
paulson
parents:
14275
diff
changeset
|
19 |
text{*Needed in this non-standard form by Hyperreal/Transcendental*} |
ad66687ece6e
more field division lemmas transferred from Real to Ring_and_Field
paulson
parents:
14275
diff
changeset
|
20 |
lemma real_0_le_divide_iff: |
ad66687ece6e
more field division lemmas transferred from Real to Ring_and_Field
paulson
parents:
14275
diff
changeset
|
21 |
"((0::real) <= x/y) = ((x <= 0 | 0 <= y) & (0 <= x | y <= 0))" |
14275
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
22 |
by (simp add: real_divide_def real_0_le_mult_iff, auto) |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
23 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
24 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
25 |
(**** Factor cancellation theorems for "real" ****) |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
26 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
27 |
(** Cancellation laws for k*m < k*n and m*k < n*k, also for <= and =, |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
28 |
but not (yet?) for k*m < n*k. **) |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
29 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
30 |
lemma real_mult_less_cancel2: |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
31 |
"(m*k < n*k) = (((0::real) < k & m<n) | (k < 0 & n<m))" |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
32 |
by (rule Ring_and_Field.mult_less_cancel_right) |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
33 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
34 |
lemma real_mult_le_cancel2: |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
35 |
"(m*k <= n*k) = (((0::real) < k --> m<=n) & (k < 0 --> n<=m))" |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
36 |
by (rule Ring_and_Field.mult_le_cancel_right) |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
37 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
38 |
lemma real_mult_less_cancel1: |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
39 |
"(k*m < k*n) = (((0::real) < k & m<n) | (k < 0 & n<m))" |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
40 |
by (rule Ring_and_Field.mult_less_cancel_left) |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
41 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
42 |
lemma real_mult_le_cancel1: |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
43 |
"!!k::real. (k*m <= k*n) = ((0 < k --> m<=n) & (k < 0 --> n<=m))" |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
44 |
by (rule Ring_and_Field.mult_le_cancel_left) |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
45 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
46 |
lemma real_mult_eq_cancel1: "!!k::real. (k*m = k*n) = (k = 0 | m=n)" |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
47 |
by (rule Ring_and_Field.mult_cancel_left) |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
48 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
49 |
lemma real_mult_eq_cancel2: "!!k::real. (m*k = n*k) = (k = 0 | m=n)" |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
50 |
by (rule Ring_and_Field.mult_cancel_right) |
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
51 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
52 |
lemma real_mult_div_cancel1: "!!k::real. k~=0 ==> (k*m) / (k*n) = (m/n)" |
14277
ad66687ece6e
more field division lemmas transferred from Real to Ring_and_Field
paulson
parents:
14275
diff
changeset
|
53 |
by (rule Ring_and_Field.mult_divide_cancel_left) |
14275
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
54 |
|
14277
ad66687ece6e
more field division lemmas transferred from Real to Ring_and_Field
paulson
parents:
14275
diff
changeset
|
55 |
lemma real_mult_div_cancel_disj: |
ad66687ece6e
more field division lemmas transferred from Real to Ring_and_Field
paulson
parents:
14275
diff
changeset
|
56 |
"(k*m) / (k*n) = (if k = (0::real) then 0 else m/n)" |
ad66687ece6e
more field division lemmas transferred from Real to Ring_and_Field
paulson
parents:
14275
diff
changeset
|
57 |
by (rule Ring_and_Field.mult_divide_cancel_eq_if) |
14275
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
58 |
|
14284
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
59 |
subsection{* Simprules combining x+y and 0: ARE THEY NEEDED?*} |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
60 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
61 |
lemma real_add_minus_iff [simp]: "(x + - a = (0::real)) = (x=a)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
62 |
by arith |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
63 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
64 |
lemma real_add_eq_0_iff [iff]: "(x+y = (0::real)) = (y = -x)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
65 |
by auto |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
66 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
67 |
lemma real_add_less_0_iff [iff]: "(x+y < (0::real)) = (y < -x)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
68 |
by auto |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
69 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
70 |
lemma real_0_less_add_iff [iff]: "((0::real) < x+y) = (-x < y)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
71 |
by auto |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
72 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
73 |
lemma real_add_le_0_iff [iff]: "(x+y \<le> (0::real)) = (y \<le> -x)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
74 |
by auto |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
75 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
76 |
lemma real_0_le_add_iff [iff]: "((0::real) \<le> x+y) = (-x \<le> y)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
77 |
by auto |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
78 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
79 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
80 |
(** Simprules combining x-y and 0; see also real_less_iff_diff_less_0, etc., |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
81 |
in RealBin |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
82 |
**) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
83 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
84 |
lemma real_0_less_diff_iff [iff]: "((0::real) < x-y) = (y < x)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
85 |
by auto |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
86 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
87 |
lemma real_0_le_diff_iff [iff]: "((0::real) \<le> x-y) = (y \<le> x)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
88 |
by auto |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
89 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
90 |
(* |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
91 |
FIXME: we should have this, as for type int, but many proofs would break. |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
92 |
It replaces x+-y by x-y. |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
93 |
Addsimps [symmetric real_diff_def] |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
94 |
*) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
95 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
96 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
97 |
(*FIXME: move most of these to Ring_and_Field*) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
98 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
99 |
subsection{*Simplification of Inequalities Involving Literal Divisors*} |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
100 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
101 |
lemma pos_real_le_divide_eq: "0<z ==> ((x::real) \<le> y/z) = (x*z \<le> y)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
102 |
apply (subgoal_tac " (x*z \<le> y) = (x*z \<le> (y/z) *z) ") |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
103 |
prefer 2 apply (simp add: real_divide_def real_mult_assoc) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
104 |
apply (erule ssubst) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
105 |
apply (subst real_mult_le_cancel2, simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
106 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
107 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
108 |
lemma neg_real_le_divide_eq: "z<0 ==> ((x::real) \<le> y/z) = (y \<le> x*z)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
109 |
apply (subgoal_tac " (y \<le> x*z) = ((y/z) *z \<le> x*z) ") |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
110 |
prefer 2 apply (simp add: real_divide_def real_mult_assoc) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
111 |
apply (erule ssubst) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
112 |
apply (subst real_mult_le_cancel2, simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
113 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
114 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
115 |
lemma real_le_divide_eq: |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
116 |
"((x::real) \<le> y/z) = (if 0<z then x*z \<le> y |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
117 |
else if z<0 then y \<le> x*z |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
118 |
else x\<le>0)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
119 |
apply (case_tac "z=0", simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
120 |
apply (simp add: pos_real_le_divide_eq neg_real_le_divide_eq) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
121 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
122 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
123 |
declare real_le_divide_eq [of _ _ "number_of w", standard, simp] |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
124 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
125 |
lemma pos_real_divide_le_eq: "0<z ==> (y/z \<le> (x::real)) = (y \<le> x*z)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
126 |
apply (subgoal_tac " (y \<le> x*z) = ((y/z) *z \<le> x*z) ") |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
127 |
prefer 2 apply (simp add: real_divide_def real_mult_assoc) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
128 |
apply (erule ssubst) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
129 |
apply (subst real_mult_le_cancel2, simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
130 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
131 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
132 |
lemma neg_real_divide_le_eq: "z<0 ==> (y/z \<le> (x::real)) = (x*z \<le> y)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
133 |
apply (subgoal_tac " (x*z \<le> y) = (x*z \<le> (y/z) *z) ") |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
134 |
prefer 2 apply (simp add: real_divide_def real_mult_assoc) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
135 |
apply (erule ssubst) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
136 |
apply (subst real_mult_le_cancel2, simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
137 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
138 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
139 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
140 |
lemma real_divide_le_eq: |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
141 |
"(y/z \<le> (x::real)) = (if 0<z then y \<le> x*z |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
142 |
else if z<0 then x*z \<le> y |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
143 |
else 0 \<le> x)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
144 |
apply (case_tac "z=0", simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
145 |
apply (simp add: pos_real_divide_le_eq neg_real_divide_le_eq) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
146 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
147 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
148 |
declare real_divide_le_eq [of _ "number_of w", standard, simp] |
14275
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
149 |
|
031a5a051bb4
Converting more of the "real" development to Isar scripts
paulson
parents:
10722
diff
changeset
|
150 |
|
14284
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
151 |
lemma pos_real_less_divide_eq: "0<z ==> ((x::real) < y/z) = (x*z < y)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
152 |
apply (subgoal_tac " (x*z < y) = (x*z < (y/z) *z) ") |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
153 |
prefer 2 apply (simp add: real_divide_def real_mult_assoc) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
154 |
apply (erule ssubst) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
155 |
apply (subst real_mult_less_cancel2, simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
156 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
157 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
158 |
lemma neg_real_less_divide_eq: "z<0 ==> ((x::real) < y/z) = (y < x*z)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
159 |
apply (subgoal_tac " (y < x*z) = ((y/z) *z < x*z) ") |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
160 |
prefer 2 apply (simp add: real_divide_def real_mult_assoc) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
161 |
apply (erule ssubst) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
162 |
apply (subst real_mult_less_cancel2, simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
163 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
164 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
165 |
lemma real_less_divide_eq: |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
166 |
"((x::real) < y/z) = (if 0<z then x*z < y |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
167 |
else if z<0 then y < x*z |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
168 |
else x<0)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
169 |
apply (case_tac "z=0", simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
170 |
apply (simp add: pos_real_less_divide_eq neg_real_less_divide_eq) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
171 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
172 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
173 |
declare real_less_divide_eq [of _ _ "number_of w", standard, simp] |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
174 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
175 |
lemma pos_real_divide_less_eq: "0<z ==> (y/z < (x::real)) = (y < x*z)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
176 |
apply (subgoal_tac " (y < x*z) = ((y/z) *z < x*z) ") |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
177 |
prefer 2 apply (simp add: real_divide_def real_mult_assoc) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
178 |
apply (erule ssubst) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
179 |
apply (subst real_mult_less_cancel2, simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
180 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
181 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
182 |
lemma neg_real_divide_less_eq: "z<0 ==> (y/z < (x::real)) = (x*z < y)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
183 |
apply (subgoal_tac " (x*z < y) = (x*z < (y/z) *z) ") |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
184 |
prefer 2 apply (simp add: real_divide_def real_mult_assoc) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
185 |
apply (erule ssubst) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
186 |
apply (subst real_mult_less_cancel2, simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
187 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
188 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
189 |
lemma real_divide_less_eq: |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
190 |
"(y/z < (x::real)) = (if 0<z then y < x*z |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
191 |
else if z<0 then x*z < y |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
192 |
else 0 < x)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
193 |
apply (case_tac "z=0", simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
194 |
apply (simp add: pos_real_divide_less_eq neg_real_divide_less_eq) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
195 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
196 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
197 |
declare real_divide_less_eq [of _ "number_of w", standard, simp] |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
198 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
199 |
lemma nonzero_real_eq_divide_eq: "z\<noteq>0 ==> ((x::real) = y/z) = (x*z = y)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
200 |
apply (subgoal_tac " (x*z = y) = (x*z = (y/z) *z) ") |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
201 |
prefer 2 apply (simp add: real_divide_def real_mult_assoc) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
202 |
apply (erule ssubst) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
203 |
apply (subst real_mult_eq_cancel2, simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
204 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
205 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
206 |
lemma real_eq_divide_eq: |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
207 |
"((x::real) = y/z) = (if z\<noteq>0 then x*z = y else x=0)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
208 |
by (simp add: nonzero_real_eq_divide_eq) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
209 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
210 |
declare real_eq_divide_eq [of _ _ "number_of w", standard, simp] |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
211 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
212 |
lemma nonzero_real_divide_eq_eq: "z\<noteq>0 ==> (y/z = (x::real)) = (y = x*z)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
213 |
apply (subgoal_tac " (y = x*z) = ((y/z) *z = x*z) ") |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
214 |
prefer 2 apply (simp add: real_divide_def real_mult_assoc) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
215 |
apply (erule ssubst) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
216 |
apply (subst real_mult_eq_cancel2, simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
217 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
218 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
219 |
lemma real_divide_eq_eq: |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
220 |
"(y/z = (x::real)) = (if z\<noteq>0 then y = x*z else x=0)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
221 |
by (simp add: nonzero_real_divide_eq_eq) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
222 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
223 |
declare real_divide_eq_eq [of _ "number_of w", standard, simp] |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
224 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
225 |
lemma real_divide_eq_cancel2: "(m/k = n/k) = (k = 0 | m = (n::real))" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
226 |
apply (case_tac "k=0", simp) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
227 |
apply (simp add:divide_inverse) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
228 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
229 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
230 |
lemma real_divide_eq_cancel1: "(k/m = k/n) = (k = 0 | m = (n::real))" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
231 |
by (force simp add: real_divide_eq_eq real_eq_divide_eq) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
232 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
233 |
lemma real_inverse_less_iff: |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
234 |
"[| 0 < r; 0 < x|] ==> (inverse x < inverse (r::real)) = (r < x)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
235 |
by (rule Ring_and_Field.inverse_less_iff_less) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
236 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
237 |
lemma real_inverse_le_iff: |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
238 |
"[| 0 < r; 0 < x|] ==> (inverse x \<le> inverse r) = (r \<le> (x::real))" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
239 |
by (rule Ring_and_Field.inverse_le_iff_le) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
240 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
241 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
242 |
(** Division by 1, -1 **) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
243 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
244 |
lemma real_divide_1: "(x::real)/1 = x" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
245 |
by (simp add: real_divide_def) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
246 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
247 |
lemma real_divide_minus1 [simp]: "x/-1 = -(x::real)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
248 |
by simp |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
249 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
250 |
lemma real_minus1_divide [simp]: "-1/(x::real) = - (1/x)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
251 |
by (simp add: real_divide_def real_minus_inverse) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
252 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
253 |
lemma real_lbound_gt_zero: |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
254 |
"[| (0::real) < d1; 0 < d2 |] ==> \<exists>e. 0 < e & e < d1 & e < d2" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
255 |
apply (rule_tac x = " (min d1 d2) /2" in exI) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
256 |
apply (simp add: min_def) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
257 |
done |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
258 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
259 |
(*** Density of the Reals ***) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
260 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
261 |
lemma real_less_half_sum: "x < y ==> x < (x+y) / (2::real)" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
262 |
by auto |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
263 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
264 |
lemma real_gt_half_sum: "x < y ==> (x+y)/(2::real) < y" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
265 |
by auto |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
266 |
|
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
267 |
lemma real_dense: "x < y ==> \<exists>r::real. x < r & r < y" |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
268 |
by (blast intro!: real_less_half_sum real_gt_half_sum) |
f1abe67c448a
re-organisation of Real/RealArith0.ML; more `Isar scripts
paulson
parents:
14277
diff
changeset
|
269 |
|
10722 | 270 |
end |