src/HOL/Real/RealArith.thy
changeset 14378 69c4d5997669
parent 14369 c50188fe6366
equal deleted inserted replaced
14377:f454b3004f8f 14378:69c4d5997669
    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!*}