Theory Wellorders
subsubsection ‹Well-Orders›
theory Wellorders
imports
Binary_Relations_Wellfounded
Strict_Linear_Orders
begin
definition "wellorder_on ≡ strict_linear_order_on ⊓ wellfounded_on"
lemma wellorder_onI [intro]:
assumes "strict_linear_order_on P R" "wellfounded_on P R"
shows "wellorder_on P R"
using assms unfolding wellorder_on_def by auto
lemma wellorder_onE [elim]:
assumes "wellorder_on P R"
obtains "strict_linear_order_on P R" "wellfounded_on P R"
using assms unfolding wellorder_on_def by auto
lemma antimono_wellorder_on:
"antimono (wellorder_on :: ('a ⇒ bool) ⇒ ('a ⇒ 'a ⇒ bool) ⇒ bool)"
using antimono_strict_linear_order_on wellfounded_on_if_le_pred_if_wellfounded_on
by (intro antimonoI le_predI; elim wellorder_onE) (auto 5 0)
lemma wellorder_on_rel_map_if_injective_on_if_mono_wrt_pred_if_wellorder_on:
fixes P :: "'a ⇒ bool"
assumes "wellorder_on P R" "(Q ⇒ P) f" "injective_on Q f"
shows "wellorder_on Q (rel_map f R)"
using assms
strict_linear_order_on_rel_map_if_injective_on_if_mono_wrt_pred_if_strict_linear_order_on
wellfounded_on_rel_map_if_mono_wrt_pred_if_wellfounded_on
by fastforce
consts wellorder :: "'a ⇒ bool"
overloading
wellorder ≡ "wellorder :: ('a ⇒ 'a ⇒ bool) ⇒ bool"
begin
definition "(wellorder :: ('a ⇒ 'a ⇒ bool) ⇒ bool) ≡ wellorder_on (⊤ :: 'a ⇒ bool)"
end
lemma wellorder_eq_wellorder_on:
"(wellorder :: ('a ⇒ 'a ⇒ bool) ⇒ bool) = wellorder_on (⊤ :: 'a ⇒ bool)"
unfolding wellorder_def ..
lemma wellorder_eq_wellorder_on_uhint [uhint]:
assumes "P ≡ ⊤ :: 'a ⇒ bool"
shows "(wellorder :: ('a ⇒ 'a ⇒ bool) ⇒ bool) ≡ wellorder_on P"
using assms by (simp add: wellorder_eq_wellorder_on)
context
fixes R :: "'a ⇒ 'a ⇒ bool"
begin
lemma wellorderI [intro]:
assumes "strict_linear_order R"
and "wellfounded R"
shows "wellorder R"
using assms by (urule wellorder_onI)
lemma wellorderE [elim]:
assumes "wellorder R"
obtains "strict_linear_order R" "wellfounded R"
using assms by (urule (e) wellorder_onE)
lemma wellorder_on_if_wellorder:
fixes P :: "'a ⇒ bool"
assumes "wellorder R"
shows "wellorder_on P R"
using assms by (elim wellorderE)
(intro wellorder_onI strict_linear_order_on_if_strict_linear_order wellfounded_on_if_wellfounded)
end
end