equal
deleted
inserted
replaced
112 by (simp add: of_bool_def) |
112 by (simp add: of_bool_def) |
113 |
113 |
114 lemma split_of_bool [split]: "P (of_bool p) \<longleftrightarrow> (p \<longrightarrow> P 1) \<and> (\<not> p \<longrightarrow> P 0)" |
114 lemma split_of_bool [split]: "P (of_bool p) \<longleftrightarrow> (p \<longrightarrow> P 1) \<and> (\<not> p \<longrightarrow> P 0)" |
115 by (cases p) simp_all |
115 by (cases p) simp_all |
116 |
116 |
117 lemma split_of_bool_asm: "P (of_bool p) \<longleftrightarrow> \<not> (p \<and> \<not> P 1 \<or> \<not> p \<and> \<not> P 0)" |
117 lemma split_of_bool_asm [split]: "P (of_bool p) \<longleftrightarrow> \<not> (p \<and> \<not> P 1 \<or> \<not> p \<and> \<not> P 0)" |
118 by (cases p) simp_all |
118 by (cases p) simp_all |
|
119 |
|
120 lemma of_bool_eq_0_iff [simp]: |
|
121 \<open>of_bool P = 0 \<longleftrightarrow> \<not> P\<close> |
|
122 by simp |
|
123 |
|
124 lemma of_bool_eq_1_iff [simp]: |
|
125 \<open>of_bool P = 1 \<longleftrightarrow> P\<close> |
|
126 by simp |
119 |
127 |
120 end |
128 end |
121 |
129 |
122 class semiring_1 = zero_neq_one + semiring_0 + monoid_mult |
130 class semiring_1 = zero_neq_one + semiring_0 + monoid_mult |
123 begin |
131 begin |
371 |
379 |
372 class ring_1 = ring + zero_neq_one + monoid_mult |
380 class ring_1 = ring + zero_neq_one + monoid_mult |
373 begin |
381 begin |
374 |
382 |
375 subclass semiring_1_cancel .. |
383 subclass semiring_1_cancel .. |
|
384 |
|
385 lemma of_bool_not_iff [simp]: |
|
386 \<open>of_bool (\<not> P) = 1 - of_bool P\<close> |
|
387 by simp |
376 |
388 |
377 lemma square_diff_one_factored: "x * x - 1 = (x + 1) * (x - 1)" |
389 lemma square_diff_one_factored: "x * x - 1 = (x + 1) * (x - 1)" |
378 by (simp add: algebra_simps) |
390 by (simp add: algebra_simps) |
379 |
391 |
380 end |
392 end |
2351 by (simp add: not_le) |
2363 by (simp add: not_le) |
2352 |
2364 |
2353 lemma not_one_less_zero [simp]: "\<not> 1 < 0" |
2365 lemma not_one_less_zero [simp]: "\<not> 1 < 0" |
2354 by (simp add: not_less) |
2366 by (simp add: not_less) |
2355 |
2367 |
|
2368 lemma of_bool_less_eq_iff [simp]: |
|
2369 \<open>of_bool P \<le> of_bool Q \<longleftrightarrow> (P \<longrightarrow> Q)\<close> |
|
2370 by auto |
|
2371 |
|
2372 lemma of_bool_less_iff [simp]: |
|
2373 \<open>of_bool P < of_bool Q \<longleftrightarrow> \<not> P \<and> Q\<close> |
|
2374 by auto |
|
2375 |
2356 lemma mult_left_le: "c \<le> 1 \<Longrightarrow> 0 \<le> a \<Longrightarrow> a * c \<le> a" |
2376 lemma mult_left_le: "c \<le> 1 \<Longrightarrow> 0 \<le> a \<Longrightarrow> a * c \<le> a" |
2357 using mult_left_mono[of c 1 a] by simp |
2377 using mult_left_mono[of c 1 a] by simp |
2358 |
2378 |
2359 lemma mult_le_one: "a \<le> 1 \<Longrightarrow> 0 \<le> b \<Longrightarrow> b \<le> 1 \<Longrightarrow> a * b \<le> 1" |
2379 lemma mult_le_one: "a \<le> 1 \<Longrightarrow> 0 \<le> b \<Longrightarrow> b \<le> 1 \<Longrightarrow> a * b \<le> 1" |
2360 using mult_mono[of a 1 b 1] by simp |
2380 using mult_mono[of a 1 b 1] by simp |
2376 with that show False |
2396 with that show False |
2377 by (simp add: ) |
2397 by (simp add: ) |
2378 qed |
2398 qed |
2379 qed |
2399 qed |
2380 |
2400 |
|
2401 lemma zero_less_eq_of_bool [simp]: |
|
2402 \<open>0 \<le> of_bool P\<close> |
|
2403 by simp |
|
2404 |
|
2405 lemma zero_less_of_bool_iff [simp]: |
|
2406 \<open>0 < of_bool P \<longleftrightarrow> P\<close> |
|
2407 by simp |
|
2408 |
|
2409 lemma of_bool_less_eq_one [simp]: |
|
2410 \<open>of_bool P \<le> 1\<close> |
|
2411 by simp |
|
2412 |
|
2413 lemma of_bool_less_one_iff [simp]: |
|
2414 \<open>of_bool P < 1 \<longleftrightarrow> \<not> P\<close> |
|
2415 by simp |
|
2416 |
|
2417 lemma of_bool_or_iff [simp]: |
|
2418 \<open>of_bool (P \<or> Q) = max (of_bool P) (of_bool Q)\<close> |
|
2419 by (simp add: max_def) |
|
2420 |
2381 text \<open>Addition is the inverse of subtraction.\<close> |
2421 text \<open>Addition is the inverse of subtraction.\<close> |
2382 |
2422 |
2383 lemma le_add_diff_inverse [simp]: "b \<le> a \<Longrightarrow> b + (a - b) = a" |
2423 lemma le_add_diff_inverse [simp]: "b \<le> a \<Longrightarrow> b + (a - b) = a" |
2384 by (frule le_add_diff_inverse2) (simp add: add.commute) |
2424 by (frule le_add_diff_inverse2) (simp add: add.commute) |
2385 |
2425 |
2439 |
2479 |
2440 subclass idom_abs_sgn |
2480 subclass idom_abs_sgn |
2441 by standard |
2481 by standard |
2442 (auto simp add: sgn_if abs_if zero_less_mult_iff) |
2482 (auto simp add: sgn_if abs_if zero_less_mult_iff) |
2443 |
2483 |
|
2484 lemma abs_bool_eq [simp]: |
|
2485 \<open>\<bar>of_bool P\<bar> = of_bool P\<close> |
|
2486 by simp |
|
2487 |
2444 lemma linorder_neqE_linordered_idom: |
2488 lemma linorder_neqE_linordered_idom: |
2445 assumes "x \<noteq> y" |
2489 assumes "x \<noteq> y" |
2446 obtains "x < y" | "y < x" |
2490 obtains "x < y" | "y < x" |
2447 using assms by (rule neqE) |
2491 using assms by (rule neqE) |
2448 |
2492 |