src/HOL/Complex/ex/MIR.thy
changeset 27567 e3fe9a327c63
parent 27556 292098f2efdf
child 28264 e1dae766c108
equal deleted inserted replaced
27566:6b20092af078 27567:e3fe9a327c63
   759   from prems have th:"zgcd c ?g > 1" by simp
   759   from prems have th:"zgcd c ?g > 1" by simp
   760   from zgcd_gt1[OF th] numgcdh_pos[OF mp, where t="t"]
   760   from zgcd_gt1[OF th] numgcdh_pos[OF mp, where t="t"]
   761   have "(abs c > 1 \<and> ?g > 1) \<or> (abs c = 0 \<and> ?g > 1) \<or> (abs c > 1 \<and> ?g = 0)" by simp
   761   have "(abs c > 1 \<and> ?g > 1) \<or> (abs c = 0 \<and> ?g > 1) \<or> (abs c > 1 \<and> ?g = 0)" by simp
   762   moreover {assume "abs c > 1" and gp: "?g > 1" with prems
   762   moreover {assume "abs c > 1" and gp: "?g > 1" with prems
   763     have th: "dvdnumcoeff t ?g" by simp
   763     have th: "dvdnumcoeff t ?g" by simp
   764     have th': "zgcd c ?g dvd ?g" by (simp add:zgcd_dvd2)
   764     have th': "zgcd c ?g dvd ?g" by (simp add:zgcd_zdvd2)
   765     from dvdnumcoeff_trans[OF th' th] have ?case by (simp add: zgcd_dvd1)}
   765     from dvdnumcoeff_trans[OF th' th] have ?case by (simp add: zgcd_zdvd1)}
   766   moreover {assume "abs c = 0 \<and> ?g > 1"
   766   moreover {assume "abs c = 0 \<and> ?g > 1"
   767     with prems have th: "dvdnumcoeff t ?g" by simp
   767     with prems have th: "dvdnumcoeff t ?g" by simp
   768     have th': "zgcd c ?g dvd ?g" by (simp add:zgcd_dvd2)
   768     have th': "zgcd c ?g dvd ?g" by (simp add:zgcd_zdvd2)
   769     from dvdnumcoeff_trans[OF th' th] have ?case by (simp add: zgcd_dvd1)
   769     from dvdnumcoeff_trans[OF th' th] have ?case by (simp add: zgcd_zdvd1)
   770     hence ?case by simp }
   770     hence ?case by simp }
   771   moreover {assume "abs c > 1" and g0:"?g = 0" 
   771   moreover {assume "abs c > 1" and g0:"?g = 0" 
   772     from numgcdh0[OF g0] have "m=0". with prems   have ?case by simp }
   772     from numgcdh0[OF g0] have "m=0". with prems   have ?case by simp }
   773   ultimately show ?case by blast
   773   ultimately show ?case by blast
   774 next
   774 next
   777   from prems have th:"zgcd c ?g > 1" by simp
   777   from prems have th:"zgcd c ?g > 1" by simp
   778   from zgcd_gt1[OF th] numgcdh_pos[OF mp, where t="t"]
   778   from zgcd_gt1[OF th] numgcdh_pos[OF mp, where t="t"]
   779   have "(abs c > 1 \<and> ?g > 1) \<or> (abs c = 0 \<and> ?g > 1) \<or> (abs c > 1 \<and> ?g = 0)" by simp
   779   have "(abs c > 1 \<and> ?g > 1) \<or> (abs c = 0 \<and> ?g > 1) \<or> (abs c > 1 \<and> ?g = 0)" by simp
   780   moreover {assume "abs c > 1" and gp: "?g > 1" with prems
   780   moreover {assume "abs c > 1" and gp: "?g > 1" with prems
   781     have th: "dvdnumcoeff t ?g" by simp
   781     have th: "dvdnumcoeff t ?g" by simp
   782     have th': "zgcd c ?g dvd ?g" by (simp add:zgcd_dvd2)
   782     have th': "zgcd c ?g dvd ?g" by (simp add:zgcd_zdvd2)
   783     from dvdnumcoeff_trans[OF th' th] have ?case by (simp add: zgcd_dvd1)}
   783     from dvdnumcoeff_trans[OF th' th] have ?case by (simp add: zgcd_zdvd1)}
   784   moreover {assume "abs c = 0 \<and> ?g > 1"
   784   moreover {assume "abs c = 0 \<and> ?g > 1"
   785     with prems have th: "dvdnumcoeff t ?g" by simp
   785     with prems have th: "dvdnumcoeff t ?g" by simp
   786     have th': "zgcd c ?g dvd ?g" by (simp add:zgcd_dvd2)
   786     have th': "zgcd c ?g dvd ?g" by (simp add:zgcd_zdvd2)
   787     from dvdnumcoeff_trans[OF th' th] have ?case by (simp add: zgcd_dvd1)
   787     from dvdnumcoeff_trans[OF th' th] have ?case by (simp add: zgcd_zdvd1)
   788     hence ?case by simp }
   788     hence ?case by simp }
   789   moreover {assume "abs c > 1" and g0:"?g = 0" 
   789   moreover {assume "abs c > 1" and g0:"?g = 0" 
   790     from numgcdh0[OF g0] have "m=0". with prems   have ?case by simp }
   790     from numgcdh0[OF g0] have "m=0". with prems   have ?case by simp }
   791   ultimately show ?case by blast
   791   ultimately show ?case by blast
   792 qed(auto simp add: zgcd_dvd1)
   792 qed(auto simp add: zgcd_zdvd1)
   793 
   793 
   794 lemma dvdnumcoeff_aux2:
   794 lemma dvdnumcoeff_aux2:
   795   assumes "numgcd t > 1" shows "dvdnumcoeff t (numgcd t) \<and> numgcd t > 0"
   795   assumes "numgcd t > 1" shows "dvdnumcoeff t (numgcd t) \<and> numgcd t > 0"
   796   using prems 
   796   using prems 
   797 proof (simp add: numgcd_def)
   797 proof (simp add: numgcd_def)
  1065       moreover {assume "?g'=1" hence ?thesis by (simp add: Let_def simp_num_pair_def)}
  1065       moreover {assume "?g'=1" hence ?thesis by (simp add: Let_def simp_num_pair_def)}
  1066       moreover {assume g'1:"?g'>1"
  1066       moreover {assume g'1:"?g'>1"
  1067 	from dvdnumcoeff_aux2[OF g1] have th1:"dvdnumcoeff ?t' ?g" ..
  1067 	from dvdnumcoeff_aux2[OF g1] have th1:"dvdnumcoeff ?t' ?g" ..
  1068 	let ?tt = "reducecoeffh ?t' ?g'"
  1068 	let ?tt = "reducecoeffh ?t' ?g'"
  1069 	let ?t = "Inum bs ?tt"
  1069 	let ?t = "Inum bs ?tt"
  1070 	have gpdg: "?g' dvd ?g" by (simp add: zgcd_dvd2)
  1070 	have gpdg: "?g' dvd ?g" by (simp add: zgcd_zdvd2)
  1071 	have gpdd: "?g' dvd n" by (simp add: zgcd_dvd1) 
  1071 	have gpdd: "?g' dvd n" by (simp add: zgcd_zdvd1) 
  1072 	have gpdgp: "?g' dvd ?g'" by simp
  1072 	have gpdgp: "?g' dvd ?g'" by simp
  1073 	from reducecoeffh[OF dvdnumcoeff_trans[OF gpdg th1] g'p] 
  1073 	from reducecoeffh[OF dvdnumcoeff_trans[OF gpdg th1] g'p] 
  1074 	have th2:"real ?g' * ?t = Inum bs ?t'" by simp
  1074 	have th2:"real ?g' * ?t = Inum bs ?t'" by simp
  1075 	from prems have "?lhs = ?t / real (n div ?g')" by (simp add: simp_num_pair_def Let_def)
  1075 	from prems have "?lhs = ?t / real (n div ?g')" by (simp add: simp_num_pair_def Let_def)
  1076 	also have "\<dots> = (real ?g' * ?t) / (real ?g' * (real (n div ?g')))" by simp
  1076 	also have "\<dots> = (real ?g' * ?t) / (real ?g' * (real (n div ?g')))" by simp
  1099       hence g'p: "?g' > 0" using zgcd_pos[where i="n" and j="numgcd ?t'"] by arith
  1099       hence g'p: "?g' > 0" using zgcd_pos[where i="n" and j="numgcd ?t'"] by arith
  1100       hence "?g'= 1 \<or> ?g' > 1" by arith
  1100       hence "?g'= 1 \<or> ?g' > 1" by arith
  1101       moreover {assume "?g'=1" hence ?thesis using prems 
  1101       moreover {assume "?g'=1" hence ?thesis using prems 
  1102 	  by (auto simp add: Let_def simp_num_pair_def)}
  1102 	  by (auto simp add: Let_def simp_num_pair_def)}
  1103       moreover {assume g'1:"?g'>1"
  1103       moreover {assume g'1:"?g'>1"
  1104 	have gpdg: "?g' dvd ?g" by (simp add: zgcd_dvd2)
  1104 	have gpdg: "?g' dvd ?g" by (simp add: zgcd_zdvd2)
  1105 	have gpdd: "?g' dvd n" by (simp add: zgcd_dvd1) 
  1105 	have gpdd: "?g' dvd n" by (simp add: zgcd_zdvd1) 
  1106 	have gpdgp: "?g' dvd ?g'" by simp
  1106 	have gpdgp: "?g' dvd ?g'" by simp
  1107 	from zdvd_imp_le[OF gpdd np] have g'n: "?g' \<le> n" .
  1107 	from zdvd_imp_le[OF gpdd np] have g'n: "?g' \<le> n" .
  1108 	from zdiv_mono1[OF g'n g'p, simplified zdiv_self[OF gp0]]
  1108 	from zdiv_mono1[OF g'n g'p, simplified zdiv_self[OF gp0]]
  1109 	have "n div ?g' >0" by simp
  1109 	have "n div ?g' >0" by simp
  1110 	hence ?thesis using prems 
  1110 	hence ?thesis using prems 
  1238     moreover {assume "?g'=1" hence ?thesis by (simp add: Let_def simpdvd_def)}
  1238     moreover {assume "?g'=1" hence ?thesis by (simp add: Let_def simpdvd_def)}
  1239     moreover {assume g'1:"?g'>1"
  1239     moreover {assume g'1:"?g'>1"
  1240       from dvdnumcoeff_aux2[OF g1] have th1:"dvdnumcoeff t ?g" ..
  1240       from dvdnumcoeff_aux2[OF g1] have th1:"dvdnumcoeff t ?g" ..
  1241       let ?tt = "reducecoeffh t ?g'"
  1241       let ?tt = "reducecoeffh t ?g'"
  1242       let ?t = "Inum bs ?tt"
  1242       let ?t = "Inum bs ?tt"
  1243       have gpdg: "?g' dvd ?g" by (simp add: zgcd_dvd2)
  1243       have gpdg: "?g' dvd ?g" by (simp add: zgcd_zdvd2)
  1244       have gpdd: "?g' dvd d" by (simp add: zgcd_dvd1) 
  1244       have gpdd: "?g' dvd d" by (simp add: zgcd_zdvd1) 
  1245       have gpdgp: "?g' dvd ?g'" by simp
  1245       have gpdgp: "?g' dvd ?g'" by simp
  1246       from reducecoeffh[OF dvdnumcoeff_trans[OF gpdg th1] g'p] 
  1246       from reducecoeffh[OF dvdnumcoeff_trans[OF gpdg th1] g'p] 
  1247       have th2:"real ?g' * ?t = Inum bs t" by simp
  1247       have th2:"real ?g' * ?t = Inum bs t" by simp
  1248       from prems have "Ifm bs (Dvd (fst (simpdvd d t)) (snd(simpdvd d t))) = Ifm bs (Dvd (d div ?g') ?tt)"
  1248       from prems have "Ifm bs (Dvd (fst (simpdvd d t)) (snd(simpdvd d t))) = Ifm bs (Dvd (d div ?g') ?tt)"
  1249 	by (simp add: simpdvd_def Let_def)
  1249 	by (simp add: simpdvd_def Let_def)
  4171 
  4171 
  4172 lemma bound0at_l : "\<lbrakk>isatom p ; bound0 p\<rbrakk> \<Longrightarrow> isrlfm p"
  4172 lemma bound0at_l : "\<lbrakk>isatom p ; bound0 p\<rbrakk> \<Longrightarrow> isrlfm p"
  4173   by (induct p rule: isrlfm.induct, auto)
  4173   by (induct p rule: isrlfm.induct, auto)
  4174 lemma zgcd_le1: assumes ip: "0 < i" shows "zgcd i j \<le> i"
  4174 lemma zgcd_le1: assumes ip: "0 < i" shows "zgcd i j \<le> i"
  4175 proof-
  4175 proof-
  4176   from zgcd_dvd1 have th: "zgcd i j dvd i" by blast
  4176   from zgcd_zdvd1 have th: "zgcd i j dvd i" by blast
  4177   from zdvd_imp_le[OF th ip] show ?thesis .
  4177   from zdvd_imp_le[OF th ip] show ?thesis .
  4178 qed
  4178 qed
  4179 
  4179 
  4180 
  4180 
  4181 lemma simpfm_rl: "isrlfm p \<Longrightarrow> isrlfm (simpfm p)"
  4181 lemma simpfm_rl: "isrlfm p \<Longrightarrow> isrlfm (simpfm p)"