# HG changeset patch # User haftmann # Date 1664874754 0 # Node ID 4111c94657b4fc5404bf01c18be57750ea789c9f # Parent 6ab4bb7cb8b2cb6d85c564b75fa29cef0aace417 slightly less abusive proof pattern diff -r 6ab4bb7cb8b2 -r 4111c94657b4 src/HOL/Computational_Algebra/Polynomial.thy --- a/src/HOL/Computational_Algebra/Polynomial.thy Sun Oct 02 18:22:49 2022 +0200 +++ b/src/HOL/Computational_Algebra/Polynomial.thy Tue Oct 04 09:12:34 2022 +0000 @@ -3985,9 +3985,9 @@ by simp next case False - then show ?thesis - by (cases y \smult a (x div y)\ \smult a (x mod y)\ \smult a x\ rule: euclidean_relation_polyI) - (simp_all add: dvd_smult_iff degree_mod_less_degree flip: smult_add_right) + show ?thesis + by (rule euclidean_relation_polyI) + (use False in \simp_all add: dvd_smult_iff degree_mod_less_degree flip: smult_add_right\) qed then show ?Q and ?R by simp_all @@ -4006,7 +4006,7 @@ for x y z :: \'a::field poly\ proof - have \((x + y) div z, (x + y) mod z) = (x div z + y div z, x mod z + y mod z)\ - proof (cases z \x div z + y div z\ \x mod z + y mod z\ \x + y\ rule: euclidean_relation_polyI) + proof (induction rule: euclidean_relation_polyI) case by0 then show ?case by simp next @@ -4045,7 +4045,7 @@ and mod_smult_right: \x mod smult a y = (if a = 0 then x else x mod y)\ (is ?R) proof - have \(x div smult a y, x mod smult a y) = (smult (inverse a) (x div y), (if a = 0 then x else x mod y))\ - proof (cases \smult a y\ \smult (inverse a) (x div y)\ \(if a = 0 then x else x mod y)\ x rule: euclidean_relation_polyI) + proof (induction rule: euclidean_relation_polyI) case by0 then show ?case by auto next @@ -4077,7 +4077,7 @@ for x y z :: \'a::field poly\ proof - have \(x div (y * z), x mod (y * z)) = ((x div y) div z, y * (x div y mod z) + x mod y)\ - proof (cases \y * z\ \(x div y) div z\ \y * (x div y mod z) + x mod y\ x rule: euclidean_relation_polyI) + proof (induction rule: euclidean_relation_polyI) case by0 then show ?case by auto next @@ -4143,7 +4143,7 @@ define b where \b = coeff (pCons a (p mod q)) (degree q) / lead_coeff q\ have \(pCons a p div q, pCons a p mod q) = (pCons b (p div q), (pCons a (p mod q) - smult b q))\ (is \_ = (?q, ?r)\) - proof (cases q ?q ?r \pCons a p\ rule: euclidean_relation_polyI) + proof (induction rule: euclidean_relation_polyI) case by0 with \q \ 0\ show ?case by simp next diff -r 6ab4bb7cb8b2 -r 4111c94657b4 src/HOL/Euclidean_Division.thy --- a/src/HOL/Euclidean_Division.thy Sun Oct 02 18:22:49 2022 +0200 +++ b/src/HOL/Euclidean_Division.thy Tue Oct 04 09:12:34 2022 +0000 @@ -672,7 +672,7 @@ fix a b c assume \b \ 0\ have \((a + c * b) div b, (a + c * b) mod b) = (c + a div b, a mod b)\ - proof (cases b \c + a div b\ \a mod b\ \a + c * b\ rule: euclidean_relationI) + proof (induction rule: euclidean_relationI) case by0 with \b \ 0\ show ?case @@ -698,7 +698,7 @@ fix a b c assume \c \ 0\ have \((c * a) div (c * b), (c * a) mod (c * b)) = (a div b, c * (a mod b))\ - proof (cases \c * b\ \a div b\ \c * (a mod b)\ \c * a\ rule: euclidean_relationI) + proof (induction rule: euclidean_relationI) case by0 with \c \ 0\ show ?case by simp @@ -745,7 +745,7 @@ next assume \euclidean_size a < euclidean_size b\ have \(a div b, a mod b) = (0, a)\ - proof (cases b 0 a a rule: euclidean_relationI) + proof (induction rule: euclidean_relationI) case by0 show ?case by simp @@ -783,7 +783,7 @@ by (simp add: algebra_simps) qed have \((a * b) div c, (a * b) mod c) = (a * (b div c) + a * (b mod c) div c, (a * b) mod c)\ - proof (cases c \a * (b div c) + a * (b mod c) div c\ \(a * b) mod c\ \a * b\ rule: euclidean_relationI) + proof (induction rule: euclidean_relationI) case by0 then show ?case by simp next @@ -817,7 +817,7 @@ by (simp add: mod_mult_div_eq) qed have \((a + b) div c, (a + b) mod c) = (a div c + b div c + (a mod c + b mod c) div c, (a + b) mod c)\ - proof (cases c \a div c + b div c + (a mod c + b mod c) div c\ \(a + b) mod c\ \a + b\ rule: euclidean_relationI) + proof (induction rule: euclidean_relationI) case by0 then show ?case by simp @@ -978,7 +978,7 @@ \m div n = q\ if \n * q \ m\ and \m < n * Suc q\ for m n q :: nat proof - have \(m div n, m mod n) = (q, m - n * q)\ - proof (cases n q \m - n * q\ m rule: euclidean_relation_natI) + proof (induction rule: euclidean_relation_natI) case by0 with that show ?case by simp @@ -1004,7 +1004,7 @@ \m mod n = r\ if \r < n\ and \r \ m\ and \n dvd m - r\ for m n r :: nat proof - have \(m div n, m mod n) = ((m - r) div n, r)\ - proof (cases n \(m - r) div n\ r m rule: euclidean_relation_natI) + proof (induction rule: euclidean_relation_natI) case by0 with that show ?case by simp @@ -1268,7 +1268,7 @@ for m n q :: nat proof - have \(m div (n * q), m mod (n * q)) = ((m div n) div q, n * (m div n mod q) + m mod n)\ - proof (cases \n * q\ \(m div n) div q\ \n * (m div n mod q) + m mod n\ m rule: euclidean_relation_natI) + proof (induction rule: euclidean_relation_natI) case by0 then show ?case by auto @@ -1948,7 +1948,7 @@ and divides': \l \ 0 \ l dvd k \ r = 0 \ k = q * l\ and euclidean_relation': \l \ 0 \ \ l dvd k \ sgn r = sgn l \ \r\ < \l\ \ k = q * l + r\ for k l :: int -proof (cases l q r k rule: euclidean_relationI) +proof (induction rule: euclidean_relationI) case by0 then show ?case by (rule by0') @@ -2274,7 +2274,7 @@ from that have \l < 0\ by simp have \(k div l, k mod l) = (- 1, k + l)\ - proof (cases l \- 1 :: int\ \k + l\ k rule: euclidean_relation_intI) + proof (induction rule: euclidean_relation_intI) case by0 with \l < 0\ show ?case by simp @@ -2316,9 +2316,9 @@ and int_mod_pos_eq: \a mod b = r\ (is ?R) proof - - from assms have \(a div b, a mod b) = (q, r)\ - by (cases b q r a rule: euclidean_relation_intI) - (auto simp add: ac_simps dvd_add_left_iff sgn_1_pos le_less dest: zdvd_imp_le) + have \(a div b, a mod b) = (q, r)\ + by (induction rule: euclidean_relation_intI) + (use assms in \auto simp add: ac_simps dvd_add_left_iff sgn_1_pos le_less dest: zdvd_imp_le\) then show ?Q and ?R by simp_all qed @@ -2868,7 +2868,7 @@ if \0 \ a\ for a b :: int proof - have \((1 + 2 * b) div (2 * a), (1 + 2 * b) mod (2 * a)) = (b div a, 1 + 2 * (b mod a))\ - proof (cases \2 * a\ \b div a\ \1 + 2 * (b mod a)\ \1 + 2 * b\ rule: euclidean_relation_intI) + proof (induction rule: euclidean_relation_intI) case by0 then show ?case by simp @@ -2908,7 +2908,7 @@ if \a \ 0\ for a b :: int proof - have \((1 + 2 * b) div (2 * a), (1 + 2 * b) mod (2 * a)) = ((b + 1) div a, 2 * ((b + 1) mod a) - 1)\ - proof (cases \2 * a\ \(b + 1) div a\ \2 * ((b + 1) mod a) - 1\ \1 + 2 * b\ rule: euclidean_relation_intI) + proof (induction rule: euclidean_relation_intI) case by0 then show ?case by simp