src/HOL/Rings.thy
changeset 56536 aefb4a8da31f
parent 56480 093ea91498e6
child 56544 b60d5d119489
equal deleted inserted replaced
56535:34023a586608 56536:aefb4a8da31f
   490 class ordered_cancel_semiring = ordered_semiring + cancel_comm_monoid_add
   490 class ordered_cancel_semiring = ordered_semiring + cancel_comm_monoid_add
   491 begin
   491 begin
   492 
   492 
   493 subclass semiring_0_cancel ..
   493 subclass semiring_0_cancel ..
   494 
   494 
   495 lemma mult_nonneg_nonneg: "0 \<le> a \<Longrightarrow> 0 \<le> b \<Longrightarrow> 0 \<le> a * b"
   495 lemma mult_nonneg_nonneg[simp]: "0 \<le> a \<Longrightarrow> 0 \<le> b \<Longrightarrow> 0 \<le> a * b"
   496 using mult_left_mono [of 0 b a] by simp
   496 using mult_left_mono [of 0 b a] by simp
   497 
   497 
   498 lemma mult_nonneg_nonpos: "0 \<le> a \<Longrightarrow> b \<le> 0 \<Longrightarrow> a * b \<le> 0"
   498 lemma mult_nonneg_nonpos: "0 \<le> a \<Longrightarrow> b \<le> 0 \<Longrightarrow> a * b \<le> 0"
   499 using mult_left_mono [of b 0 a] by simp
   499 using mult_left_mono [of b 0 a] by simp
   500 
   500 
   757 lemma mult_nonpos_nonpos: "a \<le> 0 \<Longrightarrow> b \<le> 0 \<Longrightarrow> 0 \<le> a * b"
   757 lemma mult_nonpos_nonpos: "a \<le> 0 \<Longrightarrow> b \<le> 0 \<Longrightarrow> 0 \<le> a * b"
   758 using mult_right_mono_neg [of a 0 b] by simp
   758 using mult_right_mono_neg [of a 0 b] by simp
   759 
   759 
   760 lemma split_mult_pos_le:
   760 lemma split_mult_pos_le:
   761   "(0 \<le> a \<and> 0 \<le> b) \<or> (a \<le> 0 \<and> b \<le> 0) \<Longrightarrow> 0 \<le> a * b"
   761   "(0 \<le> a \<and> 0 \<le> b) \<or> (a \<le> 0 \<and> b \<le> 0) \<Longrightarrow> 0 \<le> a * b"
   762 by (auto simp add: mult_nonneg_nonneg mult_nonpos_nonpos)
   762 by (auto simp add: mult_nonpos_nonpos)
   763 
   763 
   764 end
   764 end
   765 
   765 
   766 class linordered_ring = ring + linordered_semiring + linordered_ab_group_add + abs_if
   766 class linordered_ring = ring + linordered_semiring + linordered_ab_group_add + abs_if
   767 begin
   767 begin
   775     by (auto simp add: abs_if not_le not_less algebra_simps simp del: add.commute dest: add_neg_neg add_nonneg_nonneg)
   775     by (auto simp add: abs_if not_le not_less algebra_simps simp del: add.commute dest: add_neg_neg add_nonneg_nonneg)
   776 qed (auto simp add: abs_if)
   776 qed (auto simp add: abs_if)
   777 
   777 
   778 lemma zero_le_square [simp]: "0 \<le> a * a"
   778 lemma zero_le_square [simp]: "0 \<le> a * a"
   779   using linear [of 0 a]
   779   using linear [of 0 a]
   780   by (auto simp add: mult_nonneg_nonneg mult_nonpos_nonpos)
   780   by (auto simp add: mult_nonpos_nonpos)
   781 
   781 
   782 lemma not_square_less_zero [simp]: "\<not> (a * a < 0)"
   782 lemma not_square_less_zero [simp]: "\<not> (a * a < 0)"
   783   by (simp add: not_less)
   783   by (simp add: not_less)
   784 
   784 
   785 end
   785 end