equal
deleted
inserted
replaced
60 |
60 |
61 subsection{*Comparisons On Numerals*} |
61 subsection{*Comparisons On Numerals*} |
62 |
62 |
63 lemma eq_real_number_of [simp]: |
63 lemma eq_real_number_of [simp]: |
64 "((number_of v :: real) = number_of v') = |
64 "((number_of v :: real) = number_of v') = |
65 iszero (number_of (bin_add v (bin_minus v')))" |
65 iszero (number_of (bin_add v (bin_minus v')) :: int)" |
66 by (simp only: real_number_of_def real_of_int_inject eq_number_of_eq) |
66 by (simp only: real_number_of_def real_of_int_inject eq_number_of_eq) |
67 |
67 |
68 text{*@{term neg} is used in rewrite rules for binary comparisons*} |
68 text{*@{term neg} is used in rewrite rules for binary comparisons*} |
69 lemma less_real_number_of [simp]: |
69 lemma less_real_number_of [simp]: |
70 "((number_of v :: real) < number_of v') = |
70 "((number_of v :: real) < number_of v') = |
71 neg (number_of (bin_add v (bin_minus v')))" |
71 neg (number_of (bin_add v (bin_minus v')) :: int)" |
72 by (simp only: real_number_of_def real_of_int_less_iff less_number_of_eq_neg) |
72 by (simp only: real_number_of_def real_of_int_less_iff less_number_of_eq_neg) |
73 |
73 |
74 |
74 |
75 text{*New versions of existing theorems involving 0, 1*} |
75 text{*New versions of existing theorems involving 0, 1*} |
76 |
76 |
132 comparisons. A complication in this proof is that both @{term real} and @{term |
132 comparisons. A complication in this proof is that both @{term real} and @{term |
133 number_of} are polymorphic, so that it's difficult to know what types subterms |
133 number_of} are polymorphic, so that it's difficult to know what types subterms |
134 have. *} |
134 have. *} |
135 lemma real_of_nat_number_of [simp]: |
135 lemma real_of_nat_number_of [simp]: |
136 "real (number_of v :: nat) = |
136 "real (number_of v :: nat) = |
137 (if neg (number_of v) then 0 |
137 (if neg (number_of v :: int) then 0 |
138 else (number_of v :: real))" |
138 else (number_of v :: real))" |
139 proof cases |
139 proof cases |
140 assume "neg (number_of v)" thus ?thesis by simp |
140 assume "neg (number_of v :: int)" thus ?thesis by simp |
141 next |
141 next |
142 assume neg: "~ neg (number_of v)" |
142 assume neg: "~ neg (number_of v :: int)" |
143 thus ?thesis |
143 thus ?thesis |
144 by (simp only: nat_number_of_def real_of_nat_real_of_int [OF neg], simp) |
144 by (simp only: nat_number_of_def real_of_nat_real_of_int [OF neg], simp) |
145 qed |
145 qed |
146 |
146 |
147 declare real_numeral_0_eq_0 [simp] real_numeral_1_eq_1 [simp] |
147 declare real_numeral_0_eq_0 [simp] real_numeral_1_eq_1 [simp] |
220 |
220 |
221 subsection{*Absolute Value Function for the Reals*} |
221 subsection{*Absolute Value Function for the Reals*} |
222 |
222 |
223 lemma abs_nat_number_of [simp]: |
223 lemma abs_nat_number_of [simp]: |
224 "abs (number_of v :: real) = |
224 "abs (number_of v :: real) = |
225 (if neg (number_of v) then number_of (bin_minus v) |
225 (if neg (number_of v :: int) then number_of (bin_minus v) |
226 else number_of v)" |
226 else number_of v)" |
227 by (simp add: real_abs_def bin_arith_simps minus_real_number_of |
227 by (simp add: real_abs_def bin_arith_simps minus_real_number_of |
228 less_real_number_of real_of_int_le_iff) |
228 less_real_number_of real_of_int_le_iff) |
229 |
229 |
230 text{*FIXME: these should go!*} |
230 text{*FIXME: these should go!*} |