# HG changeset patch # User haftmann # Date 1473242347 -7200 # Node ID 58f74e90b96d07f6b1f01061faf4825b68d2cfe5 # Parent 42b98ab11598add6091f191306b3f2d7106f8866 keep locale lifting rules on the global level diff -r 42b98ab11598 -r 58f74e90b96d src/HOL/Orderings.thy --- a/src/HOL/Orderings.thy Wed Sep 07 16:06:59 2016 +0200 +++ b/src/HOL/Orderings.thy Wed Sep 07 11:59:07 2016 +0200 @@ -61,6 +61,45 @@ end +text \Alternative introduction rule with bias towards strict order\ + +lemma ordering_strictI: + fixes less_eq (infix "\<^bold>\" 50) + and less (infix "\<^bold><" 50) + assumes less_eq_less: "\a b. a \<^bold>\ b \ a \<^bold>< b \ a = b" + assumes asym: "\a b. a \<^bold>< b \ \ b \<^bold>< a" + assumes irrefl: "\a. \ a \<^bold>< a" + assumes trans: "\a b c. a \<^bold>< b \ b \<^bold>< c \ a \<^bold>< c" + shows "ordering less_eq less" +proof + fix a b + show "a \<^bold>< b \ a \<^bold>\ b \ a \ b" + by (auto simp add: less_eq_less asym irrefl) +next + fix a + show "a \<^bold>\ a" + by (auto simp add: less_eq_less) +next + fix a b c + assume "a \<^bold>\ b" and "b \<^bold>\ c" then show "a \<^bold>\ c" + by (auto simp add: less_eq_less intro: trans) +next + fix a b + assume "a \<^bold>\ b" and "b \<^bold>\ a" then show "a = b" + by (auto simp add: less_eq_less asym) +qed + +lemma ordering_dualI: + fixes less_eq (infix "\<^bold>\" 50) + and less (infix "\<^bold><" 50) + assumes "ordering (\a b. b \<^bold>\ a) (\a b. b \<^bold>< a)" + shows "ordering less_eq less" +proof - + from assms interpret ordering "\a b. b \<^bold>\ a" "\a b. b \<^bold>< a" . + show ?thesis + by standard (auto simp: strict_iff_order refl intro: antisym trans) +qed + locale ordering_top = ordering + fixes top :: "'a" ("\<^bold>\") assumes extremum [simp]: "a \<^bold>\ \<^bold>\" @@ -177,7 +216,7 @@ lemma dual_preorder: "class.preorder (op \) (op >)" -proof qed (auto simp add: less_le_not_le intro: order_trans) + by standard (auto simp add: less_le_not_le intro: order_trans) end @@ -191,9 +230,15 @@ lemma less_le: "x < y \ x \ y \ x \ y" by (auto simp add: less_le_not_le intro: antisym) -sublocale order: ordering less_eq less + dual_order: ordering greater_eq greater - by standard (auto intro: antisym order_trans simp add: less_le) - +sublocale order: ordering less_eq less + dual_order: ordering greater_eq greater +proof - + interpret ordering less_eq less + by standard (auto intro: antisym order_trans simp add: less_le) + show "ordering less_eq less" + by (fact ordering_axioms) + then show "ordering greater_eq greater" + by (rule ordering_dualI) +qed text \Reflexivity.\ @@ -256,42 +301,39 @@ unfolding Least_def by (rule theI2) (blast intro: assms antisym)+ -text \Dual order\ - -lemma dual_order: - "class.order (op \) (op >)" -by (intro_locales, rule dual_preorder) (unfold_locales, rule antisym) - end - -text \Alternative introduction rule with bias towards strict order\ +lemma ordering_orderI: + fixes less_eq (infix "\<^bold>\" 50) + and less (infix "\<^bold><" 50) + assumes "ordering less_eq less" + shows "class.order less_eq less" +proof - + from assms interpret ordering less_eq less . + show ?thesis + by standard (auto intro: antisym trans simp add: refl strict_iff_order) +qed lemma order_strictI: fixes less (infix "\" 50) and less_eq (infix "\" 50) - assumes less_eq_less: "\a b. a \ b \ a \ b \ a = b" - assumes asym: "\a b. a \ b \ \ b \ a" - assumes irrefl: "\a. \ a \ a" - assumes trans: "\a b c. a \ b \ b \ c \ a \ c" + assumes "\a b. a \ b \ a \ b \ a = b" + assumes "\a b. a \ b \ \ b \ a" + assumes "\a. \ a \ a" + assumes "\a b c. a \ b \ b \ c \ a \ c" shows "class.order less_eq less" -proof - fix a b - show "a \ b \ a \ b \ \ b \ a" - by (auto simp add: less_eq_less asym irrefl) -next - fix a - show "a \ a" - by (auto simp add: less_eq_less) -next - fix a b c - assume "a \ b" and "b \ c" then show "a \ c" - by (auto simp add: less_eq_less intro: trans) -next - fix a b - assume "a \ b" and "b \ a" then show "a = b" - by (auto simp add: less_eq_less asym) -qed + by (rule ordering_orderI) (rule ordering_strictI, (fact assms)+) + +context order +begin + +text \Dual order\ + +lemma dual_order: + "class.order (op \) (op >)" + using dual_order.ordering_axioms by (rule ordering_orderI) + +end subsection \Linear (total) orders\ @@ -375,10 +417,10 @@ text \Alternative introduction rule with bias towards strict order\ lemma linorder_strictI: - fixes less (infix "\" 50) - and less_eq (infix "\" 50) + fixes less_eq (infix "\<^bold>\" 50) + and less (infix "\<^bold><" 50) assumes "class.order less_eq less" - assumes trichotomy: "\a b. a \ b \ a = b \ b \ a" + assumes trichotomy: "\a b. a \<^bold>< b \ a = b \ b \<^bold>< a" shows "class.linorder less_eq less" proof - interpret order less_eq less @@ -386,7 +428,7 @@ show ?thesis proof fix a b - show "a \ b \ b \ a" + show "a \<^bold>\ b \ b \<^bold>\ a" using trichotomy by (auto simp add: le_less) qed qed