diff -r e7fb17bca374 -r 0f33c7031ec9 src/HOL/Rings.thy --- a/src/HOL/Rings.thy Mon Apr 05 22:46:41 2021 +0200 +++ b/src/HOL/Rings.thy Tue Apr 06 18:12:20 2021 +0000 @@ -114,9 +114,17 @@ lemma split_of_bool [split]: "P (of_bool p) \ (p \ P 1) \ (\ p \ P 0)" by (cases p) simp_all -lemma split_of_bool_asm: "P (of_bool p) \ \ (p \ \ P 1 \ \ p \ \ P 0)" +lemma split_of_bool_asm [split]: "P (of_bool p) \ \ (p \ \ P 1 \ \ p \ \ P 0)" by (cases p) simp_all +lemma of_bool_eq_0_iff [simp]: + \of_bool P = 0 \ \ P\ + by simp + +lemma of_bool_eq_1_iff [simp]: + \of_bool P = 1 \ P\ + by simp + end class semiring_1 = zero_neq_one + semiring_0 + monoid_mult @@ -374,6 +382,10 @@ subclass semiring_1_cancel .. +lemma of_bool_not_iff [simp]: + \of_bool (\ P) = 1 - of_bool P\ + by simp + lemma square_diff_one_factored: "x * x - 1 = (x + 1) * (x - 1)" by (simp add: algebra_simps) @@ -2353,6 +2365,14 @@ lemma not_one_less_zero [simp]: "\ 1 < 0" by (simp add: not_less) +lemma of_bool_less_eq_iff [simp]: + \of_bool P \ of_bool Q \ (P \ Q)\ + by auto + +lemma of_bool_less_iff [simp]: + \of_bool P < of_bool Q \ \ P \ Q\ + by auto + lemma mult_left_le: "c \ 1 \ 0 \ a \ a * c \ a" using mult_left_mono[of c 1 a] by simp @@ -2378,6 +2398,26 @@ qed qed +lemma zero_less_eq_of_bool [simp]: + \0 \ of_bool P\ + by simp + +lemma zero_less_of_bool_iff [simp]: + \0 < of_bool P \ P\ + by simp + +lemma of_bool_less_eq_one [simp]: + \of_bool P \ 1\ + by simp + +lemma of_bool_less_one_iff [simp]: + \of_bool P < 1 \ \ P\ + by simp + +lemma of_bool_or_iff [simp]: + \of_bool (P \ Q) = max (of_bool P) (of_bool Q)\ + by (simp add: max_def) + text \Addition is the inverse of subtraction.\ lemma le_add_diff_inverse [simp]: "b \ a \ b + (a - b) = a" @@ -2441,6 +2481,10 @@ by standard (auto simp add: sgn_if abs_if zero_less_mult_iff) +lemma abs_bool_eq [simp]: + \\of_bool P\ = of_bool P\ + by simp + lemma linorder_neqE_linordered_idom: assumes "x \ y" obtains "x < y" | "y < x"