src/HOL/Groups.thy
changeset 62378 85ed00c1fe7c
parent 62377 ace69956d018
child 62379 340738057c8c
equal deleted inserted replaced
62377:ace69956d018 62378:85ed00c1fe7c
   751   add_neg_nonpos add_neg_neg add_nonpos_neg add_nonpos_nonpos
   751   add_neg_nonpos add_neg_neg add_nonpos_neg add_nonpos_nonpos
   752 
   752 
   753 end
   753 end
   754 
   754 
   755 class strict_ordered_comm_monoid_add = comm_monoid_add + strict_ordered_ab_semigroup_add
   755 class strict_ordered_comm_monoid_add = comm_monoid_add + strict_ordered_ab_semigroup_add
       
   756 begin
       
   757 
       
   758 lemma pos_add_strict:
       
   759   shows "0 < a \<Longrightarrow> b < c \<Longrightarrow> b < a + c"
       
   760   using add_strict_mono [of 0 a b c] by simp
       
   761 
       
   762 end
   756 
   763 
   757 class ordered_cancel_comm_monoid_add = ordered_comm_monoid_add + cancel_ab_semigroup_add
   764 class ordered_cancel_comm_monoid_add = ordered_comm_monoid_add + cancel_ab_semigroup_add
   758 begin
   765 begin
   759 
   766 
   760 subclass ordered_cancel_ab_semigroup_add ..
   767 subclass ordered_cancel_ab_semigroup_add ..
  1309 
  1316 
  1310 class canonically_ordered_monoid_add = comm_monoid_add + order +
  1317 class canonically_ordered_monoid_add = comm_monoid_add + order +
  1311   assumes le_iff_add: "a \<le> b \<longleftrightarrow> (\<exists>c. b = a + c)"
  1318   assumes le_iff_add: "a \<le> b \<longleftrightarrow> (\<exists>c. b = a + c)"
  1312 begin
  1319 begin
  1313 
  1320 
  1314 lemma zero_le: "0 \<le> x"
  1321 lemma zero_le[simp]: "0 \<le> x"
  1315   by (auto simp: le_iff_add)
  1322   by (auto simp: le_iff_add)
       
  1323 
       
  1324 lemma le_zero_eq[simp]: "n \<le> 0 \<longleftrightarrow> n = 0"
       
  1325   by (auto intro: antisym)
       
  1326 
       
  1327 lemma not_less_zero[simp]: "\<not> n < 0"
       
  1328   by (auto simp: less_le)
       
  1329 
       
  1330 lemma zero_less_iff_neq_zero: "(0 < n) \<longleftrightarrow> (n \<noteq> 0)"
       
  1331   by (auto simp: less_le)
       
  1332 
       
  1333 text \<open>This theorem is useful with \<open>blast\<close>\<close>
       
  1334 lemma gr_zeroI: "(n = 0 \<Longrightarrow> False) \<Longrightarrow> 0 < n"
       
  1335   by (rule zero_less_iff_neq_zero[THEN iffD2]) iprover
       
  1336 
       
  1337 lemma not_gr_zero[simp]: "(\<not> (0 < n)) \<longleftrightarrow> (n = 0)"
       
  1338   by (simp add: zero_less_iff_neq_zero)
  1316 
  1339 
  1317 subclass ordered_comm_monoid_add
  1340 subclass ordered_comm_monoid_add
  1318   proof qed (auto simp: le_iff_add add_ac)
  1341   proof qed (auto simp: le_iff_add add_ac)
  1319 
  1342 
  1320 lemma add_eq_0_iff_both_eq_0: "x + y = 0 \<longleftrightarrow> x = 0 \<and> y = 0"
  1343 lemma add_eq_0_iff_both_eq_0: "x + y = 0 \<longleftrightarrow> x = 0 \<and> y = 0"
  1321   by (intro add_nonneg_eq_0_iff zero_le)
  1344   by (intro add_nonneg_eq_0_iff zero_le)
       
  1345 
       
  1346 lemma gr_implies_not_zero: "m < n \<Longrightarrow> n \<noteq> 0"
       
  1347   using add_eq_0_iff_both_eq_0[of m] by (auto simp: le_iff_add less_le)
       
  1348 
       
  1349 lemmas zero_order = zero_le le_zero_eq not_less_zero zero_less_iff_neq_zero not_gr_zero
       
  1350   -- \<open>This should be attributed with \<open>[iff]\<close>, but then \<open>blast\<close> fails in \<open>Set\<close>.\<close>
  1322 
  1351 
  1323 end
  1352 end
  1324 
  1353 
  1325 class ordered_cancel_comm_monoid_diff =
  1354 class ordered_cancel_comm_monoid_diff =
  1326   canonically_ordered_monoid_add + comm_monoid_diff + ordered_ab_semigroup_add_imp_le
  1355   canonically_ordered_monoid_add + comm_monoid_diff + ordered_ab_semigroup_add_imp_le