haftmann@30661: (* Author: Tobias Nipkow *) nipkow@26273: nipkow@26273: header {* Orders as Relations *} nipkow@26273: nipkow@26273: theory Order_Relation nipkow@29859: imports Main nipkow@26273: begin nipkow@26273: nipkow@26295: subsection{* Orders on a set *} nipkow@26295: nipkow@30198: definition "preorder_on A r \ refl_on A r \ trans r" nipkow@26295: nipkow@26295: definition "partial_order_on A r \ preorder_on A r \ antisym r" nipkow@26273: nipkow@26295: definition "linear_order_on A r \ partial_order_on A r \ total_on A r" nipkow@26295: nipkow@26295: definition "strict_linear_order_on A r \ trans r \ irrefl r \ total_on A r" nipkow@26295: nipkow@26295: definition "well_order_on A r \ linear_order_on A r \ wf(r - Id)" nipkow@26273: nipkow@26295: lemmas order_on_defs = nipkow@26295: preorder_on_def partial_order_on_def linear_order_on_def nipkow@26295: strict_linear_order_on_def well_order_on_def nipkow@26295: nipkow@26273: nipkow@26295: lemma preorder_on_empty[simp]: "preorder_on {} {}" nipkow@26295: by(simp add:preorder_on_def trans_def) nipkow@26295: nipkow@26295: lemma partial_order_on_empty[simp]: "partial_order_on {} {}" nipkow@26295: by(simp add:partial_order_on_def) nipkow@26273: nipkow@26295: lemma lnear_order_on_empty[simp]: "linear_order_on {} {}" nipkow@26295: by(simp add:linear_order_on_def) nipkow@26295: nipkow@26295: lemma well_order_on_empty[simp]: "well_order_on {} {}" nipkow@26295: by(simp add:well_order_on_def) nipkow@26295: nipkow@26273: nipkow@26295: lemma preorder_on_converse[simp]: "preorder_on A (r^-1) = preorder_on A r" nipkow@26295: by (simp add:preorder_on_def) nipkow@26295: nipkow@26295: lemma partial_order_on_converse[simp]: nipkow@26295: "partial_order_on A (r^-1) = partial_order_on A r" nipkow@26295: by (simp add: partial_order_on_def) nipkow@26273: nipkow@26295: lemma linear_order_on_converse[simp]: nipkow@26295: "linear_order_on A (r^-1) = linear_order_on A r" nipkow@26295: by (simp add: linear_order_on_def) nipkow@26295: nipkow@26273: nipkow@26295: lemma strict_linear_order_on_diff_Id: nipkow@26295: "linear_order_on A r \ strict_linear_order_on A (r-Id)" nipkow@26295: by(simp add: order_on_defs trans_diff_Id) nipkow@26295: nipkow@26295: nipkow@26295: subsection{* Orders on the field *} nipkow@26273: nipkow@30198: abbreviation "Refl r \ refl_on (Field r) r" nipkow@26295: nipkow@26295: abbreviation "Preorder r \ preorder_on (Field r) r" nipkow@26295: nipkow@26295: abbreviation "Partial_order r \ partial_order_on (Field r) r" nipkow@26273: nipkow@26295: abbreviation "Total r \ total_on (Field r) r" nipkow@26295: nipkow@26295: abbreviation "Linear_order r \ linear_order_on (Field r) r" nipkow@26295: nipkow@26295: abbreviation "Well_order r \ well_order_on (Field r) r" nipkow@26295: nipkow@26273: nipkow@26273: lemma subset_Image_Image_iff: nipkow@26273: "\ Preorder r; A \ Field r; B \ Field r\ \ nipkow@26273: r `` A \ r `` B \ (\a\A.\b\B. (b,a):r)" nipkow@30198: apply(auto simp add: subset_eq preorder_on_def refl_on_def Image_def) nipkow@26273: apply metis nipkow@26273: by(metis trans_def) nipkow@26273: nipkow@26273: lemma subset_Image1_Image1_iff: nipkow@26273: "\ Preorder r; a : Field r; b : Field r\ \ r `` {a} \ r `` {b} \ (b,a):r" nipkow@26273: by(simp add:subset_Image_Image_iff) nipkow@26273: nipkow@26273: lemma Refl_antisym_eq_Image1_Image1_iff: nipkow@26273: "\Refl r; antisym r; a:Field r; b:Field r\ \ r `` {a} = r `` {b} \ a=b" nipkow@30198: by(simp add: expand_set_eq antisym_def refl_on_def) metis nipkow@26273: nipkow@26273: lemma Partial_order_eq_Image1_Image1_iff: nipkow@26273: "\Partial_order r; a:Field r; b:Field r\ \ r `` {a} = r `` {b} \ a=b" nipkow@26295: by(auto simp:order_on_defs Refl_antisym_eq_Image1_Image1_iff) nipkow@26295: nipkow@26295: nipkow@26295: subsection{* Orders on a type *} nipkow@26295: nipkow@26295: abbreviation "strict_linear_order \ strict_linear_order_on UNIV" nipkow@26295: nipkow@26295: abbreviation "linear_order \ linear_order_on UNIV" nipkow@26295: nipkow@26295: abbreviation "well_order r \ well_order_on UNIV" nipkow@26273: nipkow@26273: end