equal
deleted
inserted
replaced
317 |
317 |
318 lemma linorder_cases [case_names less equal greater]: |
318 lemma linorder_cases [case_names less equal greater]: |
319 "(x < y \<Longrightarrow> P) \<Longrightarrow> (x = y \<Longrightarrow> P) \<Longrightarrow> (y < x \<Longrightarrow> P) \<Longrightarrow> P" |
319 "(x < y \<Longrightarrow> P) \<Longrightarrow> (x = y \<Longrightarrow> P) \<Longrightarrow> (y < x \<Longrightarrow> P) \<Longrightarrow> P" |
320 using less_linear by blast |
320 using less_linear by blast |
321 |
321 |
|
322 lemma linorder_wlog[case_names le sym]: |
|
323 "(\<And>a b. a \<le> b \<Longrightarrow> P a b) \<Longrightarrow> (\<And>a b. P b a \<Longrightarrow> P a b) \<Longrightarrow> P a b" |
|
324 by (cases rule: le_cases[of a b]) blast+ |
|
325 |
322 lemma not_less: "\<not> x < y \<longleftrightarrow> y \<le> x" |
326 lemma not_less: "\<not> x < y \<longleftrightarrow> y \<le> x" |
323 apply (simp add: less_le) |
327 apply (simp add: less_le) |
324 using linear apply (blast intro: antisym) |
328 using linear apply (blast intro: antisym) |
325 done |
329 done |
326 |
330 |
357 unfolding not_less . |
361 unfolding not_less . |
358 |
362 |
359 (*FIXME inappropriate name (or delete altogether)*) |
363 (*FIXME inappropriate name (or delete altogether)*) |
360 lemma not_leE: "\<not> y \<le> x \<Longrightarrow> x < y" |
364 lemma not_leE: "\<not> y \<le> x \<Longrightarrow> x < y" |
361 unfolding not_le . |
365 unfolding not_le . |
362 |
|
363 |
366 |
364 text {* Dual order *} |
367 text {* Dual order *} |
365 |
368 |
366 lemma dual_linorder: |
369 lemma dual_linorder: |
367 "class.linorder (op \<ge>) (op >)" |
370 "class.linorder (op \<ge>) (op >)" |