equal
deleted
inserted
replaced
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 |