# HG changeset patch # User desharna # Date 1721231303 -7200 # Node ID 6ab6431864b64cb6af713178a86f2c26e3504db7 # Parent 4d4f107a778fbf25d089ca9c43f5a7ec4de9404b added lemmas wfp_on_antimono_stronger and wf_on_antimono_stronger diff -r 4d4f107a778f -r 6ab6431864b6 NEWS --- a/NEWS Mon Jul 15 21:48:30 2024 +0100 +++ b/NEWS Wed Jul 17 17:48:23 2024 +0200 @@ -32,6 +32,9 @@ wfP_trancl ~> wfp_tranclp wfP_wf_eq ~> wfp_wf_eq wf_acc_iff ~> wf_iff_acc + - Added lemmas. + wf_on_antimono_stronger + wfp_on_antimono_stronger * Theory "HOL-Library.Multiset": - Renamed lemmas. Minor INCOMPATIBILITY. diff -r 4d4f107a778f -r 6ab6431864b6 src/HOL/Wellfounded.thy --- a/src/HOL/Wellfounded.thy Mon Jul 15 21:48:30 2024 +0100 +++ b/src/HOL/Wellfounded.thy Wed Jul 17 17:48:23 2024 +0200 @@ -309,18 +309,45 @@ subsubsection \Antimonotonicity\ + +lemma wfp_on_antimono_stronger: + fixes + A :: "'a set" and B :: "'b set" and + f :: "'a \ 'b" and + R :: "'b \ 'b \ bool" and Q :: "'a \ 'a \ bool" + assumes + wf: "wfp_on B R" and + sub: "f ` A \ B" and + mono: "\x y. x \ A \ y \ A \ Q x y \ R (f x) (f y)" + shows "wfp_on A Q" + unfolding wfp_on_iff_ex_minimal +proof (intro allI impI) + fix A' :: "'a set" + assume "A' \ A" and "A' \ {}" + have "f ` A' \ B" + using \A' \ A\ sub by blast + moreover have "f ` A' \ {}" + using \A' \ {}\ by blast + ultimately have "\z\f ` A'. \y. R y z \ y \ f ` A'" + using wf wfp_on_iff_ex_minimal by blast + hence "\z\A'. \y. R (f y) (f z) \ y \ A'" + by blast + thus "\z\A'. \y. Q y z \ y \ A'" + using \A' \ A\ mono by blast +qed + +lemma wf_on_antimono_stronger: + assumes + "wf_on B r" and + "f ` A \ B" and + "(\x y. x \ A \ y \ A \ (x, y) \ q \ (f x, f y) \ r)" + shows "wf_on A q" + using assms wfp_on_antimono_stronger[to_set, of B r f A q] by blast + lemma wf_on_antimono_strong: assumes "wf_on B r" and "A \ B" and "(\x y. x \ A \ y \ A \ (x, y) \ q \ (x, y) \ r)" shows "wf_on A q" - unfolding wf_on_iff_ex_minimal -proof (intro allI impI) - fix AA assume "AA \ A" and "AA \ {}" - hence "\z\AA. \y. (y, z) \ r \ y \ AA" - using \wf_on B r\ \A \ B\ - by (simp add: wf_on_iff_ex_minimal) - then show "\z\AA. \y. (y, z) \ q \ y \ AA" - using \AA \ A\ assms(3) by blast -qed + using assms wf_on_antimono_stronger[of B r "\x. x" A q] by blast lemma wfp_on_antimono_strong: "wfp_on B R \ A \ B \ (\x y. x \ A \ y \ A \ Q x y \ R x y) \ wfp_on A Q"