diff -r 3726705befa5 -r 55e8b2a60dfa src/HOL/Relation.thy --- a/src/HOL/Relation.thy Mon Mar 24 09:53:17 2025 +0100 +++ b/src/HOL/Relation.thy Mon Mar 24 09:56:20 2025 +0100 @@ -601,11 +601,40 @@ lemma antisymp_on_bot[simp]: "antisymp_on A \" using antisym_on_bot[to_pred] . +lemma antisymp_on_mono_stronger: + fixes + A :: "'a set" and R :: "'a \ 'a \ bool" and + B :: "'b set" and Q :: "'b \ 'b \ bool" and + f :: "'a \ 'b" + assumes "antisymp_on B Q" and "f ` A \ B" and + Q_imp_R: "\x y. x \ A \ y \ A \ R x y \ Q (f x) (f y)" and + inj_f: "inj_on f A" + shows "antisymp_on A R" +proof (rule antisymp_onI) + fix x y :: 'a + assume "x \ A" and "y \ A" and "R x y" and "R y x" + hence "Q (f x) (f y)" and "Q (f y) (f x)" + using Q_imp_R by iprover+ + moreover have "f x \ B" and "f y \ B" + using \f ` A \ B\ \x \ A\ \y \ A\ by blast+ + ultimately have "f x = f y" + using \antisymp_on B Q\[THEN antisymp_onD] by iprover + thus "x = y" + using inj_f[THEN inj_onD] \x \ A\ \y \ A\ by iprover +qed + +lemma antisymp_on_mono_strong: + "antisymp_on B Q \ A \ B \ (\x y. x \ A \ y \ A \ R x y \ Q x y) \ antisymp_on A R" + using antisymp_on_mono_stronger[of B Q "\x. x" A R, OF _ _ _ inj_on_id2, unfolded image_ident] . + +lemma antisymp_on_mono[mono]: "A \ B \ R \ Q \ antisymp_on B Q \ antisymp_on A R" + by (simp add: antisymp_on_mono_strong le_fun_def) + lemma antisym_on_subset: "antisym_on A r \ B \ A \ antisym_on B r" by (auto simp: antisym_on_def) lemma antisymp_on_subset: "antisymp_on A R \ B \ A \ antisymp_on B R" - by (auto simp: antisymp_on_def) + using antisymp_on_mono_strong . lemma antisymp_on_image: assumes "inj_on f A"