equal
deleted
inserted
replaced
791 apply (rule add_less_mono1 [THEN less_trans], assumption+) |
791 apply (rule add_less_mono1 [THEN less_trans], assumption+) |
792 apply (induct j) |
792 apply (induct j) |
793 apply simp_all |
793 apply simp_all |
794 done |
794 done |
795 |
795 |
796 text \<open>Deleted \<open>less_natE\<close>; use \<open>less_imp_Suc_add RS exE\<close>\<close> |
|
797 lemma less_imp_Suc_add: "m < n \<Longrightarrow> \<exists>k. n = Suc (m + k)" |
796 lemma less_imp_Suc_add: "m < n \<Longrightarrow> \<exists>k. n = Suc (m + k)" |
798 proof (induct n) |
797 proof (induct n) |
799 case 0 |
798 case 0 |
800 then show ?case by simp |
799 then show ?case by simp |
801 next |
800 next |
806 qed |
805 qed |
807 |
806 |
808 lemma le_Suc_ex: "k \<le> l \<Longrightarrow> (\<exists>n. l = k + n)" |
807 lemma le_Suc_ex: "k \<le> l \<Longrightarrow> (\<exists>n. l = k + n)" |
809 for k l :: nat |
808 for k l :: nat |
810 by (auto simp: less_Suc_eq_le[symmetric] dest: less_imp_Suc_add) |
809 by (auto simp: less_Suc_eq_le[symmetric] dest: less_imp_Suc_add) |
|
810 |
|
811 lemma less_natE: |
|
812 assumes \<open>m < n\<close> |
|
813 obtains q where \<open>n = Suc (m + q)\<close> |
|
814 using assms by (auto dest: less_imp_Suc_add intro: that) |
811 |
815 |
812 text \<open>strict, in 1st argument; proof is by induction on \<open>k > 0\<close>\<close> |
816 text \<open>strict, in 1st argument; proof is by induction on \<open>k > 0\<close>\<close> |
813 lemma mult_less_mono2: |
817 lemma mult_less_mono2: |
814 fixes i j :: nat |
818 fixes i j :: nat |
815 assumes "i < j" and "0 < k" |
819 assumes "i < j" and "0 < k" |