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)" |