708 by (induct rule: infinite_finite_induct) (auto simp: of_rat_mult) |
708 by (induct rule: infinite_finite_induct) (auto simp: of_rat_mult) |
709 |
709 |
710 lemma nonzero_of_rat_inverse: "a \<noteq> 0 \<Longrightarrow> of_rat (inverse a) = inverse (of_rat a)" |
710 lemma nonzero_of_rat_inverse: "a \<noteq> 0 \<Longrightarrow> of_rat (inverse a) = inverse (of_rat a)" |
711 by (rule inverse_unique [symmetric]) (simp add: of_rat_mult [symmetric]) |
711 by (rule inverse_unique [symmetric]) (simp add: of_rat_mult [symmetric]) |
712 |
712 |
713 lemma of_rat_inverse: "(of_rat (inverse a) :: 'a::{field_char_0,field}) = inverse (of_rat a)" |
713 lemma of_rat_inverse: "(of_rat (inverse a) :: 'a::field_char_0) = inverse (of_rat a)" |
714 by (cases "a = 0") (simp_all add: nonzero_of_rat_inverse) |
714 by (cases "a = 0") (simp_all add: nonzero_of_rat_inverse) |
715 |
715 |
716 lemma nonzero_of_rat_divide: "b \<noteq> 0 \<Longrightarrow> of_rat (a / b) = of_rat a / of_rat b" |
716 lemma nonzero_of_rat_divide: "b \<noteq> 0 \<Longrightarrow> of_rat (a / b) = of_rat a / of_rat b" |
717 by (simp add: divide_inverse of_rat_mult nonzero_of_rat_inverse) |
717 by (simp add: divide_inverse of_rat_mult nonzero_of_rat_inverse) |
718 |
718 |
719 lemma of_rat_divide: "(of_rat (a / b) :: 'a::{field_char_0,field}) = of_rat a / of_rat b" |
719 lemma of_rat_divide: "(of_rat (a / b) :: 'a::field_char_0) = of_rat a / of_rat b" |
720 by (cases "b = 0") (simp_all add: nonzero_of_rat_divide) |
720 by (cases "b = 0") (simp_all add: nonzero_of_rat_divide) |
721 |
721 |
722 lemma of_rat_power: "(of_rat (a ^ n) :: 'a::field_char_0) = of_rat a ^ n" |
722 lemma of_rat_power: "(of_rat (a ^ n) :: 'a::field_char_0) = of_rat a ^ n" |
723 by (induct n) (simp_all add: of_rat_mult) |
723 by (induct n) (simp_all add: of_rat_mult) |
724 |
724 |
867 apply (auto simp add: Rats_def) |
867 apply (auto simp add: Rats_def) |
868 apply (rule range_eqI) |
868 apply (rule range_eqI) |
869 apply (rule of_rat_mult [symmetric]) |
869 apply (rule of_rat_mult [symmetric]) |
870 done |
870 done |
871 |
871 |
872 lemma nonzero_Rats_inverse: "a \<in> \<rat> \<Longrightarrow> a \<noteq> 0 \<Longrightarrow> inverse a \<in> \<rat>" |
872 lemma Rats_inverse [simp]: "a \<in> \<rat> \<Longrightarrow> inverse a \<in> \<rat>" |
873 for a :: "'a::field_char_0" |
873 for a :: "'a::field_char_0" |
874 apply (auto simp add: Rats_def) |
|
875 apply (rule range_eqI) |
|
876 apply (erule nonzero_of_rat_inverse [symmetric]) |
|
877 done |
|
878 |
|
879 lemma Rats_inverse [simp]: "a \<in> \<rat> \<Longrightarrow> inverse a \<in> \<rat>" |
|
880 for a :: "'a::{field_char_0,field}" |
|
881 apply (auto simp add: Rats_def) |
874 apply (auto simp add: Rats_def) |
882 apply (rule range_eqI) |
875 apply (rule range_eqI) |
883 apply (rule of_rat_inverse [symmetric]) |
876 apply (rule of_rat_inverse [symmetric]) |
884 done |
877 done |
885 |
878 |
886 lemma nonzero_Rats_divide: "a \<in> \<rat> \<Longrightarrow> b \<in> \<rat> \<Longrightarrow> b \<noteq> 0 \<Longrightarrow> a / b \<in> \<rat>" |
879 lemma Rats_divide [simp]: "a \<in> \<rat> \<Longrightarrow> b \<in> \<rat> \<Longrightarrow> a / b \<in> \<rat>" |
887 for a b :: "'a::field_char_0" |
880 for a b :: "'a::field_char_0" |
888 apply (auto simp add: Rats_def) |
|
889 apply (rule range_eqI) |
|
890 apply (erule nonzero_of_rat_divide [symmetric]) |
|
891 done |
|
892 |
|
893 lemma Rats_divide [simp]: "a \<in> \<rat> \<Longrightarrow> b \<in> \<rat> \<Longrightarrow> a / b \<in> \<rat>" |
|
894 for a b :: "'a::{field_char_0, field}" |
|
895 apply (auto simp add: Rats_def) |
881 apply (auto simp add: Rats_def) |
896 apply (rule range_eqI) |
882 apply (rule range_eqI) |
897 apply (rule of_rat_divide [symmetric]) |
883 apply (rule of_rat_divide [symmetric]) |
898 done |
884 done |
899 |
885 |