1 theory RealArith0 = RealBin |
1 theory RealArith0 = RealBin |
2 files "real_arith0.ML": |
2 files "real_arith0.ML": |
3 |
3 |
4 setup real_arith_setup |
4 setup real_arith_setup |
5 |
5 |
6 subsection{*Assorted facts that need binary literals and the arithmetic decision procedure*} |
6 subsection{*Facts that need the Arithmetic Decision Procedure*} |
7 |
7 |
8 lemma real_diff_minus_eq: "x - - y = x + (y::real)" |
8 lemma real_diff_minus_eq: "x - - y = x + (y::real)" |
9 by simp |
9 by simp |
10 declare real_diff_minus_eq [simp] |
10 declare real_diff_minus_eq [simp] |
11 |
11 |
12 (** Division and inverse **) |
12 (** Division and inverse **) |
13 |
13 |
14 lemma real_0_divide: "0/x = (0::real)" |
14 lemma real_inverse_eq_divide: "inverse (x::real) = 1/x" |
15 by (simp add: real_divide_def) |
15 by (rule Ring_and_Field.inverse_eq_divide) |
16 declare real_0_divide [simp] |
|
17 |
16 |
18 lemma real_0_less_inverse_iff: "((0::real) < inverse x) = (0 < x)" |
17 text{*Needed in this non-standard form by Hyperreal/Transcendental*} |
19 apply (case_tac "x=0") |
18 lemma real_0_le_divide_iff: |
20 apply (auto dest: real_inverse_less_0 simp add: linorder_neq_iff real_inverse_gt_0) |
19 "((0::real) <= x/y) = ((x <= 0 | 0 <= y) & (0 <= x | y <= 0))" |
21 done |
|
22 declare real_0_less_inverse_iff [simp] |
|
23 |
|
24 lemma real_inverse_less_0_iff: "(inverse x < (0::real)) = (x < 0)" |
|
25 apply (case_tac "x=0") |
|
26 apply (auto dest: real_inverse_less_0 simp add: linorder_neq_iff real_inverse_gt_0) |
|
27 done |
|
28 declare real_inverse_less_0_iff [simp] |
|
29 |
|
30 lemma real_0_le_inverse_iff: "((0::real) <= inverse x) = (0 <= x)" |
|
31 by (simp add: linorder_not_less [symmetric]) |
|
32 declare real_0_le_inverse_iff [simp] |
|
33 |
|
34 lemma real_inverse_le_0_iff: "(inverse x <= (0::real)) = (x <= 0)" |
|
35 by (simp add: linorder_not_less [symmetric]) |
|
36 declare real_inverse_le_0_iff [simp] |
|
37 |
|
38 lemma real_inverse_eq_divide: "inverse (x::real) = 1/x" |
|
39 by (simp add: real_divide_def) |
|
40 |
|
41 lemma real_0_less_divide_iff: "((0::real) < x/y) = (0 < x & 0 < y | x < 0 & y < 0)" |
|
42 by (simp add: real_divide_def real_0_less_mult_iff) |
|
43 declare real_0_less_divide_iff [of "number_of w", standard, simp] |
|
44 |
|
45 lemma real_divide_less_0_iff: "(x/y < (0::real)) = (0 < x & y < 0 | x < 0 & 0 < y)" |
|
46 by (simp add: real_divide_def real_mult_less_0_iff) |
|
47 declare real_divide_less_0_iff [of "number_of w", standard, simp] |
|
48 |
|
49 lemma real_0_le_divide_iff: "((0::real) <= x/y) = ((x <= 0 | 0 <= y) & (0 <= x | y <= 0))" |
|
50 by (simp add: real_divide_def real_0_le_mult_iff, auto) |
20 by (simp add: real_divide_def real_0_le_mult_iff, auto) |
51 declare real_0_le_divide_iff [of "number_of w", standard, simp] |
|
52 |
|
53 lemma real_divide_le_0_iff: "(x/y <= (0::real)) = ((x <= 0 | y <= 0) & (0 <= x | 0 <= y))" |
|
54 by (simp add: real_divide_def real_mult_le_0_iff, auto) |
|
55 declare real_divide_le_0_iff [of "number_of w", standard, simp] |
|
56 |
|
57 lemma real_inverse_zero_iff: "(inverse(x::real) = 0) = (x = 0)" |
|
58 by (rule Ring_and_Field.inverse_nonzero_iff_nonzero) |
|
59 |
|
60 lemma real_divide_eq_0_iff: "(x/y = 0) = (x=0 | y=(0::real))" |
|
61 by (auto simp add: real_divide_def) |
|
62 declare real_divide_eq_0_iff [simp] |
|
63 |
|
64 lemma real_divide_self_eq: "h ~= (0::real) ==> h/h = 1" |
|
65 by (rule Ring_and_Field.divide_self) |
|
66 |
|
67 |
21 |
68 |
22 |
69 (**** Factor cancellation theorems for "real" ****) |
23 (**** Factor cancellation theorems for "real" ****) |
70 |
24 |
71 (** Cancellation laws for k*m < k*n and m*k < n*k, also for <= and =, |
25 (** Cancellation laws for k*m < k*n and m*k < n*k, also for <= and =, |
72 but not (yet?) for k*m < n*k. **) |
26 but not (yet?) for k*m < n*k. **) |
73 |
|
74 lemma real_minus_less_minus: "(-y < -x) = ((x::real) < y)" |
|
75 by (rule Ring_and_Field.neg_less_iff_less) |
|
76 |
|
77 lemma real_mult_less_mono1_neg: "[| i<j; k < (0::real) |] ==> j*k < i*k" |
|
78 by (rule Ring_and_Field.mult_strict_right_mono_neg) |
|
79 |
|
80 lemma real_mult_less_mono2_neg: "[| i<j; k < (0::real) |] ==> k*j < k*i" |
|
81 by (rule Ring_and_Field.mult_strict_left_mono_neg) |
|
82 |
|
83 lemma real_mult_le_mono1_neg: "[| i <= j; k <= (0::real) |] ==> j*k <= i*k" |
|
84 by (rule Ring_and_Field.mult_right_mono_neg) |
|
85 |
|
86 lemma real_mult_le_mono2_neg: "[| i <= j; k <= (0::real) |] ==> k*j <= k*i" |
|
87 by (rule Ring_and_Field.mult_left_mono_neg) |
|
88 |
27 |
89 lemma real_mult_less_cancel2: |
28 lemma real_mult_less_cancel2: |
90 "(m*k < n*k) = (((0::real) < k & m<n) | (k < 0 & n<m))" |
29 "(m*k < n*k) = (((0::real) < k & m<n) | (k < 0 & n<m))" |
91 by (rule Ring_and_Field.mult_less_cancel_right) |
30 by (rule Ring_and_Field.mult_less_cancel_right) |
92 |
31 |