[STATEMENT]
lemma rel_gpv''_mono_strong:
  "\<lbrakk> rel_gpv'' A C R gpv gpv';
     \<And>x y. \<lbrakk> x \<in> results_gpv (\<I>_uniform UNIV {x. Domainp R' x}) gpv; y \<in> results_gpv (\<I>_uniform UNIV {x. Rangep R' x}) gpv'; A x y \<rbrakk> \<Longrightarrow> A' x y;
     \<And>x y. \<lbrakk> x \<in> outs_gpv (\<I>_uniform UNIV {x. Domainp R' x}) gpv; y \<in> outs_gpv (\<I>_uniform UNIV {x. Rangep R' x}) gpv'; C x y \<rbrakk> \<Longrightarrow> C' x y;
     R' \<le> R \<rbrakk>
  \<Longrightarrow> rel_gpv'' A' C' R' gpv gpv'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>rel_gpv'' A C R gpv gpv'; \<And>x y. \<lbrakk>x \<in> results_gpv (\<I>_uniform UNIV {x. Domainp R' x}) gpv; y \<in> results_gpv (\<I>_uniform UNIV {x. Rangep R' x}) gpv'; A x y\<rbrakk> \<Longrightarrow> A' x y; \<And>x y. \<lbrakk>x \<in> outs_gpv (\<I>_uniform UNIV {x. Domainp R' x}) gpv; y \<in> outs_gpv (\<I>_uniform UNIV {x. Rangep R' x}) gpv'; C x y\<rbrakk> \<Longrightarrow> C' x y; R' \<le> R\<rbrakk> \<Longrightarrow> rel_gpv'' A' C' R' gpv gpv'
[PROOF STEP]
apply(coinduction arbitrary: gpv gpv')
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>gpva gpv'a. \<lbrakk>rel_gpv'' A C R gpva gpv'a; foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R\<rbrakk> \<Longrightarrow> rel_spmf (rel_generat A' C' (rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv'))) (the_gpv gpva) (the_gpv gpv'a)
[PROOF STEP]
apply(drule rel_gpv''D)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>gpva gpv'a. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; rel_spmf (rel_generat A C (rel_fun R (rel_gpv'' A C R))) (the_gpv gpva) (the_gpv gpv'a)\<rbrakk> \<Longrightarrow> rel_spmf (rel_generat A' C' (rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv'))) (the_gpv gpva) (the_gpv gpv'a)
[PROOF STEP]
apply(erule rel_spmf_mono_strong)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>gpva gpv'a x y. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; rel_generat A C (rel_fun R (rel_gpv'' A C R)) x y; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a)\<rbrakk> \<Longrightarrow> rel_generat A' C' (rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv')) x y
[PROOF STEP]
apply(erule generat.rel_mono_strong)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z1 \<in> generat_pures x; y1 \<in> generat_pures y; A z1 y1\<rbrakk> \<Longrightarrow> A' z1 y1
 2. \<And>gpva gpv'a x y z2 y2. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z2 \<in> generat_outs x; y2 \<in> generat_outs y; C z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 3. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(erule generat.set_cases)+
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1\<rbrakk> \<Longrightarrow> A' z1 y1
 2. \<And>gpva gpv'a x y z2 y2. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z2 \<in> generat_outs x; y2 \<in> generat_outs y; C z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 3. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(erule allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>gpva gpv'a x y z1 y1. \<lbrakk>\<forall>ya. ?x17 gpva gpv'a x y z1 y1 \<in> results_gpv (\<I>_uniform UNIV (Collect (Domainp R'))) gpva \<longrightarrow> ya \<in> results_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a \<longrightarrow> A (?x17 gpva gpv'a x y z1 y1) ya \<longrightarrow> A' (?x17 gpva gpv'a x y z1 y1) ya; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1\<rbrakk> \<Longrightarrow> A' z1 y1
 2. \<And>gpva gpv'a x y z2 y2. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z2 \<in> generat_outs x; y2 \<in> generat_outs y; C z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 3. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(erule allE)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1; ?x17 gpva gpv'a x y z1 y1 \<in> results_gpv (\<I>_uniform UNIV (Collect (Domainp R'))) gpva \<longrightarrow> ?y19 gpva gpv'a x y z1 y1 \<in> results_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a \<longrightarrow> A (?x17 gpva gpv'a x y z1 y1) (?y19 gpva gpv'a x y z1 y1) \<longrightarrow> A' (?x17 gpva gpv'a x y z1 y1) (?y19 gpva gpv'a x y z1 y1)\<rbrakk> \<Longrightarrow> A' z1 y1
 2. \<And>gpva gpv'a x y z2 y2. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z2 \<in> generat_outs x; y2 \<in> generat_outs y; C z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 3. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(erule impE)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1\<rbrakk> \<Longrightarrow> ?x17 gpva gpv'a x y z1 y1 \<in> results_gpv (\<I>_uniform UNIV (Collect (Domainp R'))) gpva
 2. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1; ?y19 gpva gpv'a x y z1 y1 \<in> results_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a \<longrightarrow> A (?x17 gpva gpv'a x y z1 y1) (?y19 gpva gpv'a x y z1 y1) \<longrightarrow> A' (?x17 gpva gpv'a x y z1 y1) (?y19 gpva gpv'a x y z1 y1)\<rbrakk> \<Longrightarrow> A' z1 y1
 3. \<And>gpva gpv'a x y z2 y2. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z2 \<in> generat_outs x; y2 \<in> generat_outs y; C z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 4. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(rule results_gpv.Pure)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1\<rbrakk> \<Longrightarrow> Pure (?x17 gpva gpv'a x y z1 y1) \<in> set_spmf (the_gpv gpva)
 2. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1; ?y19 gpva gpv'a x y z1 y1 \<in> results_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a \<longrightarrow> A (?x17 gpva gpv'a x y z1 y1) (?y19 gpva gpv'a x y z1 y1) \<longrightarrow> A' (?x17 gpva gpv'a x y z1 y1) (?y19 gpva gpv'a x y z1 y1)\<rbrakk> \<Longrightarrow> A' z1 y1
 3. \<And>gpva gpv'a x y z2 y2. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z2 \<in> generat_outs x; y2 \<in> generat_outs y; C z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 4. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1; ?y19 gpva gpv'a x y z1 y1 \<in> results_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a \<longrightarrow> A z1 (?y19 gpva gpv'a x y z1 y1) \<longrightarrow> A' z1 (?y19 gpva gpv'a x y z1 y1)\<rbrakk> \<Longrightarrow> A' z1 y1
 2. \<And>gpva gpv'a x y z2 y2. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z2 \<in> generat_outs x; y2 \<in> generat_outs y; C z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 3. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(erule impE)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1\<rbrakk> \<Longrightarrow> ?y19 gpva gpv'a x y z1 y1 \<in> results_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a
 2. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1; A z1 (?y19 gpva gpv'a x y z1 y1) \<longrightarrow> A' z1 (?y19 gpva gpv'a x y z1 y1)\<rbrakk> \<Longrightarrow> A' z1 y1
 3. \<And>gpva gpv'a x y z2 y2. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z2 \<in> generat_outs x; y2 \<in> generat_outs y; C z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 4. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(rule results_gpv.Pure)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1\<rbrakk> \<Longrightarrow> Pure (?y19 gpva gpv'a x y z1 y1) \<in> set_spmf (the_gpv gpv'a)
 2. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1; A z1 (?y19 gpva gpv'a x y z1 y1) \<longrightarrow> A' z1 (?y19 gpva gpv'a x y z1 y1)\<rbrakk> \<Longrightarrow> A' z1 y1
 3. \<And>gpva gpv'a x y z2 y2. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z2 \<in> generat_outs x; y2 \<in> generat_outs y; C z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 4. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>gpva gpv'a x y z1 y1. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); A z1 y1; x = Pure z1; y = Pure y1; A z1 y1 \<longrightarrow> A' z1 y1\<rbrakk> \<Longrightarrow> A' z1 y1
 2. \<And>gpva gpv'a x y z2 y2. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z2 \<in> generat_outs x; y2 \<in> generat_outs y; C z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 3. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>gpva gpv'a x y z2 y2. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z2 \<in> generat_outs x; y2 \<in> generat_outs y; C z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 2. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(erule generat.set_cases)+
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b\<rbrakk> \<Longrightarrow> C' z2 y2
 2. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(rotate_tac 1)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'\<rbrakk> \<Longrightarrow> C' z2 y2
 2. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(erule allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>\<forall>ya. ?x35 gpva gpv'a x y z2 y2 z2a z2b \<in> outs_gpv (\<I>_uniform UNIV (Collect (Domainp R'))) gpva \<longrightarrow> ya \<in> outs_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a \<longrightarrow> C (?x35 gpva gpv'a x y z2 y2 z2a z2b) ya \<longrightarrow> C' (?x35 gpva gpv'a x y z2 y2 z2a z2b) ya; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'\<rbrakk> \<Longrightarrow> C' z2 y2
 2. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(erule allE)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'; ?x35 gpva gpv'a x y z2 y2 z2a z2b \<in> outs_gpv (\<I>_uniform UNIV (Collect (Domainp R'))) gpva \<longrightarrow> ?y37 gpva gpv'a x y z2 y2 z2a z2b \<in> outs_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a \<longrightarrow> C (?x35 gpva gpv'a x y z2 y2 z2a z2b) (?y37 gpva gpv'a x y z2 y2 z2a z2b) \<longrightarrow> C' (?x35 gpva gpv'a x y z2 y2 z2a z2b) (?y37 gpva gpv'a x y z2 y2 z2a z2b)\<rbrakk> \<Longrightarrow> C' z2 y2
 2. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(erule impE)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'\<rbrakk> \<Longrightarrow> ?x35 gpva gpv'a x y z2 y2 z2a z2b \<in> outs_gpv (\<I>_uniform UNIV (Collect (Domainp R'))) gpva
 2. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'; ?y37 gpva gpv'a x y z2 y2 z2a z2b \<in> outs_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a \<longrightarrow> C (?x35 gpva gpv'a x y z2 y2 z2a z2b) (?y37 gpva gpv'a x y z2 y2 z2a z2b) \<longrightarrow> C' (?x35 gpva gpv'a x y z2 y2 z2a z2b) (?y37 gpva gpv'a x y z2 y2 z2a z2b)\<rbrakk> \<Longrightarrow> C' z2 y2
 3. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(rule outs_gpv.IO)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'\<rbrakk> \<Longrightarrow> IO (?x35 gpva gpv'a x y z2 y2 z2a z2b) (?c42 gpva gpv'a x y z2 y2 z2a z2b) \<in> set_spmf (the_gpv gpva)
 2. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'; ?y37 gpva gpv'a x y z2 y2 z2a z2b \<in> outs_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a \<longrightarrow> C (?x35 gpva gpv'a x y z2 y2 z2a z2b) (?y37 gpva gpv'a x y z2 y2 z2a z2b) \<longrightarrow> C' (?x35 gpva gpv'a x y z2 y2 z2a z2b) (?y37 gpva gpv'a x y z2 y2 z2a z2b)\<rbrakk> \<Longrightarrow> C' z2 y2
 3. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'; ?y37 gpva gpv'a x y z2 y2 z2a z2b \<in> outs_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a \<longrightarrow> C z2 (?y37 gpva gpv'a x y z2 y2 z2a z2b) \<longrightarrow> C' z2 (?y37 gpva gpv'a x y z2 y2 z2a z2b)\<rbrakk> \<Longrightarrow> C' z2 y2
 2. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(erule impE)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'\<rbrakk> \<Longrightarrow> ?y37 gpva gpv'a x y z2 y2 z2a z2b \<in> outs_gpv (\<I>_uniform UNIV (Collect (Rangep R'))) gpv'a
 2. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'; C z2 (?y37 gpva gpv'a x y z2 y2 z2a z2b) \<longrightarrow> C' z2 (?y37 gpva gpv'a x y z2 y2 z2a z2b)\<rbrakk> \<Longrightarrow> C' z2 y2
 3. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(rule outs_gpv.IO)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'\<rbrakk> \<Longrightarrow> IO (?y37 gpva gpv'a x y z2 y2 z2a z2b) (?c50 gpva gpv'a x y z2 y2 z2a z2b) \<in> set_spmf (the_gpv gpv'a)
 2. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'; C z2 (?y37 gpva gpv'a x y z2 y2 z2a z2b) \<longrightarrow> C' z2 (?y37 gpva gpv'a x y z2 y2 z2a z2b)\<rbrakk> \<Longrightarrow> C' z2 y2
 3. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>gpva gpv'a x y z2 y2 z2a z2b. \<lbrakk>R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); C z2 y2; x = IO z2 z2a; y = IO y2 z2b; foo results_gpv results_gpv gpva gpv'a A A'; C z2 y2 \<longrightarrow> C' z2 y2\<rbrakk> \<Longrightarrow> C' z2 y2
 2. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>gpva gpv'a x y z3 y3. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; rel_fun R (rel_gpv'' A C R) z3 y3\<rbrakk> \<Longrightarrow> rel_fun R' (\<lambda>gpv gpv'. (\<exists>gpva gpv'a. gpv = gpva \<and> gpv' = gpv'a \<and> rel_gpv'' A C R gpva gpv'a \<and> foo results_gpv results_gpv gpva gpv'a A A' \<and> foo outs_gpv outs_gpv gpva gpv'a C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' gpv gpv') z3 y3
[PROOF STEP]
apply(erule (1) rel_fun_mono_strong)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>gpva gpv'a x y z3 y3 xa ya. \<lbrakk>foo results_gpv results_gpv gpva gpv'a A A'; foo outs_gpv outs_gpv gpva gpv'a C C'; R' \<le> R; x \<in> set_spmf (the_gpv gpva); y \<in> set_spmf (the_gpv gpv'a); z3 \<in> generat_conts x; y3 \<in> generat_conts y; xa \<in> z3 ` {x. Domainp R' x}; ya \<in> y3 ` {x. Rangep R' x}; rel_gpv'' A C R xa ya\<rbrakk> \<Longrightarrow> (\<exists>gpv gpv'. xa = gpv \<and> ya = gpv' \<and> rel_gpv'' A C R gpv gpv' \<and> foo results_gpv results_gpv gpv gpv' A A' \<and> foo outs_gpv outs_gpv gpv gpv' C C' \<and> R' \<le> R) \<or> rel_gpv'' A' C' R' xa ya
[PROOF STEP]
by (fastforce simp add: f1[simplified] f2[simplified])