diff -r 5ebcf6c525f1 -r 5bd30359e46e src/HOL/Relation.thy --- a/src/HOL/Relation.thy Wed Dec 21 21:26:26 2016 +0100 +++ b/src/HOL/Relation.thy Thu Dec 22 08:43:30 2016 +0100 @@ -321,26 +321,51 @@ definition antisym :: "'a rel \ bool" where "antisym r \ (\x y. (x, y) \ r \ (y, x) \ r \ x = y)" -abbreviation antisymP :: "('a \ 'a \ bool) \ bool" - where "antisymP r \ antisym {(x, y). r x y}" (* FIXME proper logical operation *) +definition antisymp :: "('a \ 'a \ bool) \ bool" + where "antisymp r \ (\x y. r x y \ r y x \ x = y)" -lemma antisymI [intro?]: "(\x y. (x, y) \ r \ (y, x) \ r \ x = y) \ antisym r" +lemma antisymp_antisym_eq [pred_set_conv]: "antisymp (\x y. (x, y) \ r) \ antisym r" + by (simp add: antisym_def antisymp_def) + +lemma antisymI [intro?]: + "(\x y. (x, y) \ r \ (y, x) \ r \ x = y) \ antisym r" unfolding antisym_def by iprover -lemma antisymD [dest?]: "antisym r \ (a, b) \ r \ (b, a) \ r \ a = b" +lemma antisympI [intro?]: + "(\x y. r x y \ r y x \ x = y) \ antisymp r" + by (fact antisymI [to_pred]) + +lemma antisymD [dest?]: + "antisym r \ (a, b) \ r \ (b, a) \ r \ a = b" unfolding antisym_def by iprover -lemma antisym_subset: "r \ s \ antisym s \ antisym r" - unfolding antisym_def by blast +lemma antisympD [dest?]: + "antisymp r \ r a b \ r b a \ a = b" + by (fact antisymD [to_pred]) -lemma antisym_empty [simp]: "antisym {}" +lemma antisym_subset: + "r \ s \ antisym s \ antisym r" unfolding antisym_def by blast -lemma antisymP_equality [simp]: "antisymP op =" - by (auto intro: antisymI) +lemma antisymp_less_eq: + "r \ s \ antisymp s \ antisymp r" + by (fact antisym_subset [to_pred]) + +lemma antisym_empty [simp]: + "antisym {}" + unfolding antisym_def by blast -lemma antisym_singleton [simp]: "antisym {x}" -by (blast intro: antisymI) +lemma antisym_bot [simp]: + "antisymp \" + by (fact antisym_empty [to_pred]) + +lemma antisymp_equality [simp]: + "antisymp HOL.eq" + by (auto intro: antisympI) + +lemma antisym_singleton [simp]: + "antisym {x}" + by (blast intro: antisymI) subsubsection \Transitivity\ @@ -437,21 +462,45 @@ definition single_valued :: "('a \ 'b) set \ bool" where "single_valued r \ (\x y. (x, y) \ r \ (\z. (x, z) \ r \ y = z))" -abbreviation single_valuedP :: "('a \ 'b \ bool) \ bool" - where "single_valuedP r \ single_valued {(x, y). r x y}" (* FIXME proper logical operation *) +definition single_valuedp :: "('a \ 'b \ bool) \ bool" + where "single_valuedp r \ (\x y. r x y \ (\z. r x z \ y = z))" + +lemma single_valuedp_single_valued_eq [pred_set_conv]: + "single_valuedp (\x y. (x, y) \ r) \ single_valued r" + by (simp add: single_valued_def single_valuedp_def) -lemma single_valuedI: "\x y. (x, y) \ r \ (\z. (x, z) \ r \ y = z) \ single_valued r" - unfolding single_valued_def . +lemma single_valuedI: + "(\x y. (x, y) \ r \ (\z. (x, z) \ r \ y = z)) \ single_valued r" + unfolding single_valued_def by blast -lemma single_valuedD: "single_valued r \ (x, y) \ r \ (x, z) \ r \ y = z" +lemma single_valuedpI: + "(\x y. r x y \ (\z. r x z \ y = z)) \ single_valuedp r" + by (fact single_valuedI [to_pred]) + +lemma single_valuedD: + "single_valued r \ (x, y) \ r \ (x, z) \ r \ y = z" by (simp add: single_valued_def) -lemma single_valued_empty[simp]: "single_valued {}" +lemma single_valuedpD: + "single_valuedp r \ r x y \ r x z \ y = z" + by (fact single_valuedD [to_pred]) + +lemma single_valued_empty [simp]: + "single_valued {}" by (simp add: single_valued_def) -lemma single_valued_subset: "r \ s \ single_valued s \ single_valued r" +lemma single_valuedp_bot [simp]: + "single_valuedp \" + by (fact single_valued_empty [to_pred]) + +lemma single_valued_subset: + "r \ s \ single_valued s \ single_valued r" unfolding single_valued_def by blast +lemma single_valuedp_less_eq: + "r \ s \ single_valuedp s \ single_valuedp r" + by (fact single_valued_subset [to_pred]) + subsection \Relation operations\