src/HOL/Rings.thy
changeset 73535 0f33c7031ec9
parent 71699 8e5c20e4e11a
child 73545 fc72e5ebf9de
equal deleted inserted replaced
73534:e7fb17bca374 73535:0f33c7031ec9
   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