src/HOL/Real/PReal.thy
changeset 14378 69c4d5997669
parent 14377 f454b3004f8f
child 14387 e96d5c42c4b0
equal deleted inserted replaced
14377:f454b3004f8f 14378:69c4d5997669
   698 
   698 
   699 lemma Gleason9_34_exists:
   699 lemma Gleason9_34_exists:
   700   assumes A: "A \<in> preal"
   700   assumes A: "A \<in> preal"
   701       and "\<forall>x\<in>A. x + u \<in> A"
   701       and "\<forall>x\<in>A. x + u \<in> A"
   702       and "0 \<le> z"
   702       and "0 \<le> z"
   703      shows "\<exists>b\<in>A. b + (rat z) * u \<in> A"
   703      shows "\<exists>b\<in>A. b + (of_int z) * u \<in> A"
   704 proof (cases z rule: int_cases)
   704 proof (cases z rule: int_cases)
   705   case (nonneg n)
   705   case (nonneg n)
   706   show ?thesis
   706   show ?thesis
   707   proof (simp add: prems, induct n)
   707   proof (simp add: prems, induct n)
   708     case 0
   708     case 0
   709       from preal_nonempty [OF A]
   709       from preal_nonempty [OF A]
   710       show ?case  by force 
   710       show ?case  by force 
   711     case (Suc k)
   711     case (Suc k)
   712       from this obtain b where "b \<in> A" "b + rat (int k) * u \<in> A" ..
   712       from this obtain b where "b \<in> A" "b + of_int (int k) * u \<in> A" ..
   713       hence "b + rat (int k)*u + u \<in> A" by (simp add: prems)
   713       hence "b + of_int (int k)*u + u \<in> A" by (simp add: prems)
   714       thus ?case by (force simp add: left_distrib add_ac prems) 
   714       thus ?case by (force simp add: left_distrib add_ac prems) 
   715   qed
   715   qed
   716 next
   716 next
   717   case (neg n)
   717   case (neg n)
   718   with prems show ?thesis by simp
   718   with prems show ?thesis by simp
   719 qed
   719 qed
   720 
       
   721 
   720 
   722 lemma Gleason9_34_contra:
   721 lemma Gleason9_34_contra:
   723   assumes A: "A \<in> preal"
   722   assumes A: "A \<in> preal"
   724     shows "[|\<forall>x\<in>A. x + u \<in> A; 0 < u; 0 < y; y \<notin> A|] ==> False"
   723     shows "[|\<forall>x\<in>A. x + u \<in> A; 0 < u; 0 < y; y \<notin> A|] ==> False"
   725 proof (induct u, induct y)
   724 proof (induct u, induct y)
   734   have cpos [simp]: "0 < c" 
   733   have cpos [simp]: "0 < c" 
   735     by (simp add: zero_less_Fract_iff [OF dpos, symmetric] upos) 
   734     by (simp add: zero_less_Fract_iff [OF dpos, symmetric] upos) 
   736   have apos [simp]: "0 < a" 
   735   have apos [simp]: "0 < a" 
   737     by (simp add: zero_less_Fract_iff [OF bpos, symmetric] ypos) 
   736     by (simp add: zero_less_Fract_iff [OF bpos, symmetric] ypos) 
   738   let ?k = "a*d"
   737   let ?k = "a*d"
   739   have frle: "Fract a b \<le> rat ?k * (Fract c d)" 
   738   have frle: "Fract a b \<le> Fract ?k 1 * (Fract c d)" 
   740   proof -
   739   proof -
   741     have "?thesis = ((a * d * b * d) \<le> c * b * (a * d * b * d))"
   740     have "?thesis = ((a * d * b * d) \<le> c * b * (a * d * b * d))"
   742       by (simp add: rat_def mult_rat le_rat order_less_imp_not_eq2 mult_ac) 
   741       by (simp add: mult_rat le_rat order_less_imp_not_eq2 mult_ac) 
   743     moreover
   742     moreover
   744     have "(1 * (a * d * b * d)) \<le> c * b * (a * d * b * d)"
   743     have "(1 * (a * d * b * d)) \<le> c * b * (a * d * b * d)"
   745       by (rule mult_mono, 
   744       by (rule mult_mono, 
   746           simp_all add: int_one_le_iff_zero_less zero_less_mult_iff 
   745           simp_all add: int_one_le_iff_zero_less zero_less_mult_iff 
   747                         order_less_imp_le)
   746                         order_less_imp_le)
   749     show ?thesis by simp
   748     show ?thesis by simp
   750   qed
   749   qed
   751   have k: "0 \<le> ?k" by (simp add: order_less_imp_le zero_less_mult_iff)  
   750   have k: "0 \<le> ?k" by (simp add: order_less_imp_le zero_less_mult_iff)  
   752   from Gleason9_34_exists [OF A closed k]
   751   from Gleason9_34_exists [OF A closed k]
   753   obtain z where z: "z \<in> A" 
   752   obtain z where z: "z \<in> A" 
   754              and mem: "z + rat ?k * Fract c d \<in> A" ..
   753              and mem: "z + of_int ?k * Fract c d \<in> A" ..
   755   have less: "z + rat ?k * Fract c d < Fract a b"
   754   have less: "z + of_int ?k * Fract c d < Fract a b"
   756     by (rule not_in_preal_ub [OF A notin mem ypos])
   755     by (rule not_in_preal_ub [OF A notin mem ypos])
   757   have "0<z" by (rule preal_imp_pos [OF A z])
   756   have "0<z" by (rule preal_imp_pos [OF A z])
   758   with frle and less show False by arith 
   757   with frle and less show False by (simp add: Fract_of_int_eq) 
   759 qed
   758 qed
   760 
   759 
   761 
   760 
   762 lemma Gleason9_34:
   761 lemma Gleason9_34:
   763   assumes A: "A \<in> preal"
   762   assumes A: "A \<in> preal"