# HG changeset patch # User huffman # Date 1219793253 -7200 # Node ID 8312edc51969bc0548de0a594d6eac029ddb1f51 # Parent e93b121074fb75549f221d74def3df533e2d988b add lemmas about Rats similar to those about Reals diff -r e93b121074fb -r 8312edc51969 src/HOL/Real/Rational.thy --- a/src/HOL/Real/Rational.thy Tue Aug 26 23:49:46 2008 +0200 +++ b/src/HOL/Real/Rational.thy Wed Aug 27 01:27:33 2008 +0200 @@ -673,6 +673,7 @@ where "rat_of_int \ of_int" +subsection {* The Set of Rational Numbers *} context field_char_0 begin @@ -686,6 +687,109 @@ end +lemma Rats_of_rat [simp]: "of_rat r \ Rats" +by (simp add: Rats_def) + +lemma Rats_of_int [simp]: "of_int z \ Rats" +by (subst of_rat_of_int_eq [symmetric], rule Rats_of_rat) + +lemma Rats_of_nat [simp]: "of_nat n \ Rats" +by (subst of_rat_of_nat_eq [symmetric], rule Rats_of_rat) + +lemma Rats_number_of [simp]: + "(number_of w::'a::{number_ring,field_char_0}) \ Rats" +by (subst of_rat_number_of_eq [symmetric], rule Rats_of_rat) + +lemma Rats_0 [simp]: "0 \ Rats" +apply (unfold Rats_def) +apply (rule range_eqI) +apply (rule of_rat_0 [symmetric]) +done + +lemma Rats_1 [simp]: "1 \ Rats" +apply (unfold Rats_def) +apply (rule range_eqI) +apply (rule of_rat_1 [symmetric]) +done + +lemma Rats_add [simp]: "\a \ Rats; b \ Rats\ \ a + b \ Rats" +apply (auto simp add: Rats_def) +apply (rule range_eqI) +apply (rule of_rat_add [symmetric]) +done + +lemma Rats_minus [simp]: "a \ Rats \ - a \ Rats" +apply (auto simp add: Rats_def) +apply (rule range_eqI) +apply (rule of_rat_minus [symmetric]) +done + +lemma Rats_diff [simp]: "\a \ Rats; b \ Rats\ \ a - b \ Rats" +apply (auto simp add: Rats_def) +apply (rule range_eqI) +apply (rule of_rat_diff [symmetric]) +done + +lemma Rats_mult [simp]: "\a \ Rats; b \ Rats\ \ a * b \ Rats" +apply (auto simp add: Rats_def) +apply (rule range_eqI) +apply (rule of_rat_mult [symmetric]) +done + +lemma nonzero_Rats_inverse: + fixes a :: "'a::field_char_0" + shows "\a \ Rats; a \ 0\ \ inverse a \ Rats" +apply (auto simp add: Rats_def) +apply (rule range_eqI) +apply (erule nonzero_of_rat_inverse [symmetric]) +done + +lemma Rats_inverse [simp]: + fixes a :: "'a::{field_char_0,division_by_zero}" + shows "a \ Rats \ inverse a \ Rats" +apply (auto simp add: Rats_def) +apply (rule range_eqI) +apply (rule of_rat_inverse [symmetric]) +done + +lemma nonzero_Rats_divide: + fixes a b :: "'a::field_char_0" + shows "\a \ Rats; b \ Rats; b \ 0\ \ a / b \ Rats" +apply (auto simp add: Rats_def) +apply (rule range_eqI) +apply (erule nonzero_of_rat_divide [symmetric]) +done + +lemma Rats_divide [simp]: + fixes a b :: "'a::{field_char_0,division_by_zero}" + shows "\a \ Rats; b \ Rats\ \ a / b \ Rats" +apply (auto simp add: Rats_def) +apply (rule range_eqI) +apply (rule of_rat_divide [symmetric]) +done + +lemma Rats_power [simp]: + fixes a :: "'a::{field_char_0,recpower}" + shows "a \ Rats \ a ^ n \ Rats" +apply (auto simp add: Rats_def) +apply (rule range_eqI) +apply (rule of_rat_power [symmetric]) +done + +lemma Rats_cases [cases set: Rats]: + assumes "q \ \" + obtains (of_rat) r where "q = of_rat r" + unfolding Rats_def +proof - + from `q \ \` have "q \ range of_rat" unfolding Rats_def . + then obtain r where "q = of_rat r" .. + then show thesis .. +qed + +lemma Rats_induct [case_names of_rat, induct set: Rats]: + "q \ \ \ (\r. P (of_rat r)) \ P q" + by (rule Rats_cases) auto + subsection {* Implementation of rational numbers as pairs of integers *}