3191 lemmas subset_implies_multp = subset_implies_mult[of _ _ "{(x, y). r x y}" for r, folded multp_def] |
3191 lemmas subset_implies_multp = subset_implies_mult[of _ _ "{(x, y). r x y}" for r, folded multp_def] |
3192 |
3192 |
3193 |
3193 |
3194 subsubsection \<open>Monotonicity\<close> |
3194 subsubsection \<open>Monotonicity\<close> |
3195 |
3195 |
|
3196 lemma multp_mono_strong: |
|
3197 assumes "multp R M1 M2" and "transp R" and |
|
3198 S_if_R: "\<And>x y. x \<in> set_mset M1 \<Longrightarrow> y \<in> set_mset M2 \<Longrightarrow> R x y \<Longrightarrow> S x y" |
|
3199 shows "multp S M1 M2" |
|
3200 proof - |
|
3201 obtain I J K where "M2 = I + J" and "M1 = I + K" and "J \<noteq> {#}" and "\<forall>k\<in>#K. \<exists>x\<in>#J. R k x" |
|
3202 using multp_implies_one_step[OF \<open>transp R\<close> \<open>multp R M1 M2\<close>] by auto |
|
3203 show ?thesis |
|
3204 unfolding \<open>M2 = I + J\<close> \<open>M1 = I + K\<close> |
|
3205 proof (rule one_step_implies_multp[OF \<open>J \<noteq> {#}\<close>]) |
|
3206 show "\<forall>k\<in>#K. \<exists>j\<in>#J. S k j" |
|
3207 using S_if_R |
|
3208 by (metis \<open>M1 = I + K\<close> \<open>M2 = I + J\<close> \<open>\<forall>k\<in>#K. \<exists>x\<in>#J. R k x\<close> union_iff) |
|
3209 qed |
|
3210 qed |
|
3211 |
|
3212 lemma mult_mono_strong: |
|
3213 assumes "(M1, M2) \<in> mult r" and "trans r" and |
|
3214 S_if_R: "\<And>x y. x \<in> set_mset M1 \<Longrightarrow> y \<in> set_mset M2 \<Longrightarrow> (x, y) \<in> r \<Longrightarrow> (x, y) \<in> s" |
|
3215 shows "(M1, M2) \<in> mult s" |
|
3216 using assms multp_mono_strong[of "\<lambda>x y. (x, y) \<in> r" M1 M2 "\<lambda>x y. (x, y) \<in> s", |
|
3217 unfolded multp_def transp_trans_eq, simplified] |
|
3218 by blast |
|
3219 |
3196 lemma monotone_on_multp_multp_image_mset: |
3220 lemma monotone_on_multp_multp_image_mset: |
3197 assumes "monotone_on A orda ordb f" and "transp orda" |
3221 assumes "monotone_on A orda ordb f" and "transp orda" |
3198 shows "monotone_on {M. set_mset M \<subseteq> A} (multp orda) (multp ordb) (image_mset f)" |
3222 shows "monotone_on {M. set_mset M \<subseteq> A} (multp orda) (multp ordb) (image_mset f)" |
3199 proof (rule monotone_onI) |
3223 proof (rule monotone_onI) |
3200 fix M1 M2 |
3224 fix M1 M2 |