# HG changeset patch # User nipkow # Date 1234345867 -3600 # Node ID 33bff35f1335526c78e9a86c351c2c42607cad73 # Parent 984191be035776640c8a1a1973083865a07080e8 Moved Order_Relation into Library and moved some of it into Relation. diff -r 984191be0357 -r 33bff35f1335 src/HOL/IsaMakefile --- a/src/HOL/IsaMakefile Tue Feb 10 17:53:51 2009 -0800 +++ b/src/HOL/IsaMakefile Wed Feb 11 10:51:07 2009 +0100 @@ -285,7 +285,6 @@ Taylor.thy \ Transcendental.thy \ GCD.thy \ - Order_Relation.thy \ Parity.thy \ Lubs.thy \ Polynomial.thy \ @@ -322,7 +321,7 @@ Library/Multiset.thy Library/Permutation.thy \ Library/Primes.thy Library/Pocklington.thy Library/Quotient.thy \ Library/Quicksort.thy Library/Nat_Infinity.thy Library/Word.thy \ - Library/README.html Library/Continuity.thy \ + Library/README.html Library/Continuity.thy Library/Order_Relation.thy \ Library/Nested_Environment.thy Library/Ramsey.thy Library/Zorn.thy \ Library/Library/ROOT.ML Library/Library/document/root.tex \ Library/Library/document/root.bib Library/While_Combinator.thy \ diff -r 984191be0357 -r 33bff35f1335 src/HOL/Library/Order_Relation.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/HOL/Library/Order_Relation.thy Wed Feb 11 10:51:07 2009 +0100 @@ -0,0 +1,101 @@ +(* ID : $Id$ + Author : Tobias Nipkow +*) + +header {* Orders as Relations *} + +theory Order_Relation +imports Main +begin + +subsection{* Orders on a set *} + +definition "preorder_on A r \ refl A r \ trans r" + +definition "partial_order_on A r \ preorder_on A r \ antisym r" + +definition "linear_order_on A r \ partial_order_on A r \ total_on A r" + +definition "strict_linear_order_on A r \ trans r \ irrefl r \ total_on A r" + +definition "well_order_on A r \ linear_order_on A r \ wf(r - Id)" + +lemmas order_on_defs = + preorder_on_def partial_order_on_def linear_order_on_def + strict_linear_order_on_def well_order_on_def + + +lemma preorder_on_empty[simp]: "preorder_on {} {}" +by(simp add:preorder_on_def trans_def) + +lemma partial_order_on_empty[simp]: "partial_order_on {} {}" +by(simp add:partial_order_on_def) + +lemma lnear_order_on_empty[simp]: "linear_order_on {} {}" +by(simp add:linear_order_on_def) + +lemma well_order_on_empty[simp]: "well_order_on {} {}" +by(simp add:well_order_on_def) + + +lemma preorder_on_converse[simp]: "preorder_on A (r^-1) = preorder_on A r" +by (simp add:preorder_on_def) + +lemma partial_order_on_converse[simp]: + "partial_order_on A (r^-1) = partial_order_on A r" +by (simp add: partial_order_on_def) + +lemma linear_order_on_converse[simp]: + "linear_order_on A (r^-1) = linear_order_on A r" +by (simp add: linear_order_on_def) + + +lemma strict_linear_order_on_diff_Id: + "linear_order_on A r \ strict_linear_order_on A (r-Id)" +by(simp add: order_on_defs trans_diff_Id) + + +subsection{* Orders on the field *} + +abbreviation "Refl r \ refl (Field r) r" + +abbreviation "Preorder r \ preorder_on (Field r) r" + +abbreviation "Partial_order r \ partial_order_on (Field r) r" + +abbreviation "Total r \ total_on (Field r) r" + +abbreviation "Linear_order r \ linear_order_on (Field r) r" + +abbreviation "Well_order r \ well_order_on (Field r) r" + + +lemma subset_Image_Image_iff: + "\ Preorder r; A \ Field r; B \ Field r\ \ + r `` A \ r `` B \ (\a\A.\b\B. (b,a):r)" +apply(auto simp add: subset_eq preorder_on_def refl_def Image_def) +apply metis +by(metis trans_def) + +lemma subset_Image1_Image1_iff: + "\ Preorder r; a : Field r; b : Field r\ \ r `` {a} \ r `` {b} \ (b,a):r" +by(simp add:subset_Image_Image_iff) + +lemma Refl_antisym_eq_Image1_Image1_iff: + "\Refl r; antisym r; a:Field r; b:Field r\ \ r `` {a} = r `` {b} \ a=b" +by(simp add: expand_set_eq antisym_def refl_def) metis + +lemma Partial_order_eq_Image1_Image1_iff: + "\Partial_order r; a:Field r; b:Field r\ \ r `` {a} = r `` {b} \ a=b" +by(auto simp:order_on_defs Refl_antisym_eq_Image1_Image1_iff) + + +subsection{* Orders on a type *} + +abbreviation "strict_linear_order \ strict_linear_order_on UNIV" + +abbreviation "linear_order \ linear_order_on UNIV" + +abbreviation "well_order r \ well_order_on UNIV" + +end diff -r 984191be0357 -r 33bff35f1335 src/HOL/Order_Relation.thy --- a/src/HOL/Order_Relation.thy Tue Feb 10 17:53:51 2009 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,131 +0,0 @@ -(* ID : $Id$ - Author : Tobias Nipkow -*) - -header {* Orders as Relations *} - -theory Order_Relation -imports Plain "~~/src/HOL/Hilbert_Choice" "~~/src/HOL/ATP_Linkup" -begin - -text{* This prelude could be moved to theory Relation: *} - -definition "irrefl r \ \x. (x,x) \ r" - -definition "total_on A r \ \x\A.\y\A. x\y \ (x,y)\r \ (y,x)\r" - -abbreviation "total \ total_on UNIV" - - -lemma total_on_empty[simp]: "total_on {} r" -by(simp add:total_on_def) - -lemma refl_on_converse[simp]: "refl A (r^-1) = refl A r" -by(auto simp add:refl_def) - -lemma total_on_converse[simp]: "total_on A (r^-1) = total_on A r" -by (auto simp: total_on_def) - -lemma irrefl_diff_Id[simp]: "irrefl(r-Id)" -by(simp add:irrefl_def) - -declare [[simp_depth_limit = 2]] -lemma trans_diff_Id: " trans r \ antisym r \ trans (r-Id)" -by(simp add: antisym_def trans_def) blast -declare [[simp_depth_limit = 50]] - -lemma total_on_diff_Id[simp]: "total_on A (r-Id) = total_on A r" -by(simp add: total_on_def) - - -subsection{* Orders on a set *} - -definition "preorder_on A r \ refl A r \ trans r" - -definition "partial_order_on A r \ preorder_on A r \ antisym r" - -definition "linear_order_on A r \ partial_order_on A r \ total_on A r" - -definition "strict_linear_order_on A r \ trans r \ irrefl r \ total_on A r" - -definition "well_order_on A r \ linear_order_on A r \ wf(r - Id)" - -lemmas order_on_defs = - preorder_on_def partial_order_on_def linear_order_on_def - strict_linear_order_on_def well_order_on_def - - -lemma preorder_on_empty[simp]: "preorder_on {} {}" -by(simp add:preorder_on_def trans_def) - -lemma partial_order_on_empty[simp]: "partial_order_on {} {}" -by(simp add:partial_order_on_def) - -lemma lnear_order_on_empty[simp]: "linear_order_on {} {}" -by(simp add:linear_order_on_def) - -lemma well_order_on_empty[simp]: "well_order_on {} {}" -by(simp add:well_order_on_def) - - -lemma preorder_on_converse[simp]: "preorder_on A (r^-1) = preorder_on A r" -by (simp add:preorder_on_def) - -lemma partial_order_on_converse[simp]: - "partial_order_on A (r^-1) = partial_order_on A r" -by (simp add: partial_order_on_def) - -lemma linear_order_on_converse[simp]: - "linear_order_on A (r^-1) = linear_order_on A r" -by (simp add: linear_order_on_def) - - -lemma strict_linear_order_on_diff_Id: - "linear_order_on A r \ strict_linear_order_on A (r-Id)" -by(simp add: order_on_defs trans_diff_Id) - - -subsection{* Orders on the field *} - -abbreviation "Refl r \ refl (Field r) r" - -abbreviation "Preorder r \ preorder_on (Field r) r" - -abbreviation "Partial_order r \ partial_order_on (Field r) r" - -abbreviation "Total r \ total_on (Field r) r" - -abbreviation "Linear_order r \ linear_order_on (Field r) r" - -abbreviation "Well_order r \ well_order_on (Field r) r" - - -lemma subset_Image_Image_iff: - "\ Preorder r; A \ Field r; B \ Field r\ \ - r `` A \ r `` B \ (\a\A.\b\B. (b,a):r)" -apply(auto simp add: subset_eq preorder_on_def refl_def Image_def) -apply metis -by(metis trans_def) - -lemma subset_Image1_Image1_iff: - "\ Preorder r; a : Field r; b : Field r\ \ r `` {a} \ r `` {b} \ (b,a):r" -by(simp add:subset_Image_Image_iff) - -lemma Refl_antisym_eq_Image1_Image1_iff: - "\Refl r; antisym r; a:Field r; b:Field r\ \ r `` {a} = r `` {b} \ a=b" -by(simp add: expand_set_eq antisym_def refl_def) metis - -lemma Partial_order_eq_Image1_Image1_iff: - "\Partial_order r; a:Field r; b:Field r\ \ r `` {a} = r `` {b} \ a=b" -by(auto simp:order_on_defs Refl_antisym_eq_Image1_Image1_iff) - - -subsection{* Orders on a type *} - -abbreviation "strict_linear_order \ strict_linear_order_on UNIV" - -abbreviation "linear_order \ linear_order_on UNIV" - -abbreviation "well_order r \ well_order_on UNIV" - -end diff -r 984191be0357 -r 33bff35f1335 src/HOL/Relation.thy --- a/src/HOL/Relation.thy Tue Feb 10 17:53:51 2009 -0800 +++ b/src/HOL/Relation.thy Wed Feb 11 10:51:07 2009 +0100 @@ -70,6 +70,16 @@ "trans r == (ALL x y z. (x,y):r --> (y,z):r --> (x,z):r)" definition +irrefl :: "('a * 'a) set => bool" where +"irrefl r \ \x. (x,x) \ r" + +definition +total_on :: "'a set => ('a * 'a) set => bool" where +"total_on A r \ \x\A.\y\A. x\y \ (x,y)\r \ (y,x)\r" + +abbreviation "total \ total_on UNIV" + +definition single_valued :: "('a * 'b) set => bool" where "single_valued r == ALL x y. (x,y):r --> (ALL z. (x,z):r --> y=z)" @@ -268,6 +278,21 @@ lemma trans_diag [simp]: "trans (diag A)" by (fast intro: transI elim: transD) +lemma trans_diff_Id: " trans r \ antisym r \ trans (r-Id)" +unfolding antisym_def trans_def by blast + +subsection {* Irreflexivity *} + +lemma irrefl_diff_Id[simp]: "irrefl(r-Id)" +by(simp add:irrefl_def) + +subsection {* Totality *} + +lemma total_on_empty[simp]: "total_on {} r" +by(simp add:total_on_def) + +lemma total_on_diff_Id[simp]: "total_on A (r-Id) = total_on A r" +by(simp add: total_on_def) subsection {* Converse *} @@ -330,6 +355,9 @@ lemma sym_Int_converse: "sym (r \ r^-1)" by (unfold sym_def) blast +lemma total_on_converse[simp]: "total_on A (r^-1) = total_on A r" +by (auto simp: total_on_def) + subsection {* Domain *}