equal
deleted
inserted
replaced
17 commute: "x + y = y + x" |
17 commute: "x + y = y + x" |
18 assoc: "(x + y) + z = x + (y + z)" |
18 assoc: "(x + y) + z = x + (y + z)" |
19 zero [simp]: "0 + x = x" |
19 zero [simp]: "0 + x = x" |
20 |
20 |
21 lemma plus_ac0_left_commute: "x + (y+z) = y + ((x+z)::'a::plus_ac0)" |
21 lemma plus_ac0_left_commute: "x + (y+z) = y + ((x+z)::'a::plus_ac0)" |
22 apply (rule plus_ac0.commute [THEN trans]) |
22 by(rule mk_left_commute[of "op +",OF plus_ac0.assoc plus_ac0.commute]) |
23 apply (rule plus_ac0.assoc [THEN trans]) |
|
24 apply (rule plus_ac0.commute [THEN arg_cong]) |
|
25 done |
|
26 |
23 |
27 lemma plus_ac0_zero_right [simp]: "x + 0 = (x ::'a::plus_ac0)" |
24 lemma plus_ac0_zero_right [simp]: "x + 0 = (x ::'a::plus_ac0)" |
28 apply (rule plus_ac0.commute [THEN trans]) |
25 apply (rule plus_ac0.commute [THEN trans]) |
29 apply (rule plus_ac0.zero) |
26 apply (rule plus_ac0.zero) |
30 done |
27 done |
37 assoc: "(x * y) * z = x * (y * z)" |
34 assoc: "(x * y) * z = x * (y * z)" |
38 one [simp]: "1 * x = x" |
35 one [simp]: "1 * x = x" |
39 |
36 |
40 theorem times_ac1_left_commute: "(x::'a::times_ac1) * ((y::'a) * z) = |
37 theorem times_ac1_left_commute: "(x::'a::times_ac1) * ((y::'a) * z) = |
41 y * (x * z)" |
38 y * (x * z)" |
42 proof - |
39 by(rule mk_left_commute[of "op *",OF times_ac1.assoc times_ac1.commute]) |
43 have "(x::'a::times_ac1) * (y * z) = (x * y) * z" |
|
44 by (rule times_ac1.assoc [THEN sym]) |
|
45 also have "x * y = y * x" |
|
46 by (rule times_ac1.commute) |
|
47 also have "(y * x) * z = y * (x * z)" |
|
48 by (rule times_ac1.assoc) |
|
49 finally show ?thesis . |
|
50 qed |
|
51 |
40 |
52 theorem times_ac1_one_right [simp]: "(x::'a::times_ac1) * 1 = x" |
41 theorem times_ac1_one_right [simp]: "(x::'a::times_ac1) * 1 = x" |
53 proof - |
42 proof - |
54 have "x * 1 = 1 * x" |
43 have "x * 1 = 1 * x" |
55 by (rule times_ac1.commute) |
44 by (rule times_ac1.commute) |
523 diff_minus [symmetric] |
512 diff_minus [symmetric] |
524 add_diff_eq diff_add_eq diff_diff_eq diff_diff_eq2 |
513 add_diff_eq diff_add_eq diff_diff_eq diff_diff_eq2 |
525 diff_less_eq less_diff_eq diff_le_eq le_diff_eq |
514 diff_less_eq less_diff_eq diff_le_eq le_diff_eq |
526 diff_eq_eq eq_diff_eq |
515 diff_eq_eq eq_diff_eq |
527 |
516 |
|
517 text{*This list of rewrites decides ring equalities by ordered rewriting.*} |
|
518 lemmas ring_eq_simps = |
|
519 times_ac1.assoc times_ac1.commute times_ac1_left_commute |
|
520 left_distrib right_distrib left_diff_distrib right_diff_distrib |
|
521 plus_ac0.assoc plus_ac0.commute plus_ac0_left_commute |
|
522 add_diff_eq diff_add_eq diff_diff_eq diff_diff_eq2 |
|
523 diff_eq_eq eq_diff_eq |
528 |
524 |
529 subsection{*Lemmas for the @{text cancel_numerals} simproc*} |
525 subsection{*Lemmas for the @{text cancel_numerals} simproc*} |
530 |
526 |
531 lemma eq_iff_diff_eq_0: "(a = b) = (a-b = (0::'a::abelian_group))" |
527 lemma eq_iff_diff_eq_0: "(a = b) = (a-b = (0::'a::abelian_group))" |
532 by (simp add: compare_rls) |
528 by (simp add: compare_rls) |