# HG changeset patch # User haftmann # Date 1507494500 -7200 # Node ID 627511c13164eea39b69c2dddb5d9ce46bc21c7e # Parent f3fda9777f9a0259ee4768683c7df97ff8d9b859 canonical introduction and destruction rules for pairwise diff -r f3fda9777f9a -r 627511c13164 src/HOL/Set.thy --- a/src/HOL/Set.thy Sun Oct 08 22:28:20 2017 +0200 +++ b/src/HOL/Set.thy Sun Oct 08 22:28:20 2017 +0200 @@ -1849,12 +1849,34 @@ definition pairwise :: "('a \ 'a \ bool) \ 'a set \ bool" where "pairwise R S \ (\x \ S. \y \ S. x \ y \ R x y)" +lemma pairwiseI: + "pairwise R S" if "\x y. x \ S \ y \ S \ x \ y \ R x y" + using that by (simp add: pairwise_def) + +lemma pairwiseD: + "R x y" and "R y x" + if "pairwise R S" "x \ S" and "y \ S" and "x \ y" + using that by (simp_all add: pairwise_def) + +lemma pairwise_empty [simp]: "pairwise P {}" + by (simp add: pairwise_def) + +lemma pairwise_singleton [simp]: "pairwise P {A}" + by (simp add: pairwise_def) + +lemma pairwise_insert: + "pairwise r (insert x s) \ (\y. y \ s \ y \ x \ r x y \ r y x) \ pairwise r s" + by (force simp: pairwise_def) + lemma pairwise_subset: "pairwise P S \ T \ S \ pairwise P T" by (force simp: pairwise_def) lemma pairwise_mono: "\pairwise P A; \x y. P x y \ Q x y\ \ pairwise Q A" by (auto simp: pairwise_def) +lemma pairwise_image: "pairwise r (f ` s) \ pairwise (\x y. (f x \ f y) \ r (f x) (f y)) s" + by (force simp: pairwise_def) + definition disjnt :: "'a set \ 'a set \ bool" where "disjnt A B \ A \ B = {}" @@ -1882,19 +1904,6 @@ lemma disjnt_subset2 : "\disjnt X Y; Z \ Y\ \ disjnt X Z" by (auto simp: disjnt_def) -lemma pairwise_empty [simp]: "pairwise P {}" - by (simp add: pairwise_def) - -lemma pairwise_singleton [simp]: "pairwise P {A}" - by (simp add: pairwise_def) - -lemma pairwise_insert: - "pairwise r (insert x s) \ (\y. y \ s \ y \ x \ r x y \ r y x) \ pairwise r s" - by (force simp: pairwise_def) - -lemma pairwise_image: "pairwise r (f ` s) \ pairwise (\x y. (f x \ f y) \ r (f x) (f y)) s" - by (force simp: pairwise_def) - lemma disjoint_image_subset: "\pairwise disjnt \; \X. X \ \ \ f X \ X\ \ pairwise disjnt (f `\)" unfolding disjnt_def pairwise_def by fast