src/HOL/Rat.thy
changeset 68441 3b11d48a711a
parent 67051 e7e54a0b9197
child 68529 29235951f104
child 68536 e14848001c4c
equal deleted inserted replaced
68440:6826718f732d 68441:3b11d48a711a
   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