[STATEMENT]
lemma CFG_SSA_Transformed_ign:
  "CFG_SSA_Transformed (ign gen_wf_\<alpha>e gen_cfg_wf) (ign gen_wf_\<alpha>n gen_cfg_wf) gen_wf_invar
        (const (gen_wf_inEdges' gen_cfg_wf)) (ign gen_wf_Entry gen_cfg_wf) (ign gen_wf_defs gen_cfg_wf)
        (ign gen_wf_uses gen_cfg_wf) (ign gen_wf_defs' gen_cfg_wf) (ign gen_wf.uses' gen_cfg_wf)
        (ign gen_wf.phis' gen_cfg_wf)
        (ign gen_wf_var gen_cfg_wf)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. CFG_SSA_Transformed (\<lambda>_. gen_wf_\<alpha>e gen_cfg_wf) (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs gen_cfg_wf) (\<lambda>_. gen_wf_uses gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) (\<lambda>_. gen_wf_var gen_cfg_wf)
[PROOF STEP]
unfolding CFG_SSA_Transformed_def CFG_wf_def CFG_def CFG_wf_axioms_def
  graph_Entry_def graph_path_def graph_Entry_axioms_def
  CFG_axioms_def CFG_SSA_wf_def CFG_SSA_def CFG_SSA_axioms_def
  CFG_SSA_wf_axioms_def CFG_SSA_Transformed_axioms_def
  graph_def graph_nodes_it_def graph_pred_it_def
  graph_nodes_it_axioms_def graph_pred_it_axioms_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((((((\<forall>g. True \<longrightarrow> finite (nodes (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> finite (edges (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> valid_graph (gen_wf.\<alpha> gen_cfg_wf))) \<and> (((\<forall>g. True \<longrightarrow> finite (nodes (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> finite (edges (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> valid_graph (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> set_iterator (foldri (gen_wf_\<alpha>n gen_cfg_wf)) (nodes (gen_wf.\<alpha> gen_cfg_wf)))) \<and> ((\<forall>g. True \<longrightarrow> finite (nodes (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> finite (edges (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> valid_graph (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g v. True \<longrightarrow> set_iterator (foldri (gen_wf_inEdges' gen_cfg_wf v)) (pred (gen_wf.\<alpha> gen_cfg_wf) v))) \<and> (\<forall>g. gen_wf_Entry gen_cfg_wf \<in> set (gen_wf_\<alpha>n gen_cfg_wf)) \<and> (\<forall>g. True \<longrightarrow> graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) g (gen_wf_Entry gen_cfg_wf) = []) \<and> (\<forall>n g. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> True \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) g (gen_wf_Entry gen_cfg_wf) ns n))) \<and> ((\<forall>n g. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs gen_cfg_wf n \<inter> gen_wf_uses gen_cfg_wf n = {}) \<and> (\<forall>g n. finite (gen_wf_defs gen_cfg_wf n))) \<and> (\<forall>v g n. v \<in> gen_wf_uses gen_cfg_wf n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)) \<and> (\<forall>g n. finite (gen_wf_uses gen_cfg_wf n)) \<and> (\<forall>g. True)) \<and> (\<forall>g. \<forall>m\<in>set (gen_wf_\<alpha>n gen_cfg_wf). \<forall>v\<in>gen_wf_uses gen_cfg_wf m. CFG_base.defAss' (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs gen_cfg_wf) g m v)) \<and> (((((((\<forall>g. True \<longrightarrow> finite (nodes (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> finite (edges (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> valid_graph (gen_wf.\<alpha> gen_cfg_wf))) \<and> (((\<forall>g. True \<longrightarrow> finite (nodes (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> finite (edges (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> valid_graph (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> set_iterator (foldri (gen_wf_\<alpha>n gen_cfg_wf)) (nodes (gen_wf.\<alpha> gen_cfg_wf)))) \<and> ((\<forall>g. True \<longrightarrow> finite (nodes (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> finite (edges (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g. True \<longrightarrow> valid_graph (gen_wf.\<alpha> gen_cfg_wf))) \<and> (\<forall>g v. True \<longrightarrow> set_iterator (foldri (gen_wf_inEdges' gen_cfg_wf v)) (pred (gen_wf.\<alpha> gen_cfg_wf) v))) \<and> (\<forall>g. gen_wf_Entry gen_cfg_wf \<in> set (gen_wf_\<alpha>n gen_cfg_wf)) \<and> (\<forall>g. True \<longrightarrow> graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) g (gen_wf_Entry gen_cfg_wf) = []) \<and> (\<forall>n g. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> True \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) g (gen_wf_Entry gen_cfg_wf) ns n))) \<and> ((\<forall>n g. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}) \<and> (\<forall>g n. finite (gen_wf_defs' gen_cfg_wf n))) \<and> (\<forall>v g n. v \<in> gen_wf.uses' gen_cfg_wf n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)) \<and> (\<forall>g n. finite (gen_wf.uses' gen_cfg_wf n)) \<and> (\<forall>g. True)) \<and> ((\<forall>g. finite (dom (gen_wf.phis' gen_cfg_wf))) \<and> (\<forall>g n v vs. gen_wf.phis' gen_cfg_wf (n, v) = Some vs \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf))) \<and> (\<forall>g n v args. gen_wf.phis' gen_cfg_wf (n, v) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) g n) = length args) \<and> (\<forall>n g. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) g n = {}) \<and> (\<forall>n g m. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) g n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) g m = {})) \<and> (\<forall>v g n. v \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) g n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) g n v) \<and> (\<forall>g v. gen_wf.phis' gen_cfg_wf (gen_wf_Entry gen_cfg_wf, v) = None)) \<and> ((\<forall>g n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n) \<and> (\<forall>n g. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n)) \<and> (\<forall>g n ns m v x v'. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) g n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> v \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) g n \<longrightarrow> v \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) g m \<longrightarrow> x \<in> set (tl ns) \<longrightarrow> v' \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) g x \<longrightarrow> gen_wf_var gen_cfg_wf v' \<noteq> gen_wf_var gen_cfg_wf v) \<and> (\<forall>g n v vs v'. gen_wf.phis' gen_cfg_wf (n, v) = Some vs \<longrightarrow> v' \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf v' = gen_wf_var gen_cfg_wf v) \<and> (\<forall>n g v v'. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> v \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) g n \<longrightarrow> v' \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) g n \<longrightarrow> v \<noteq> v' \<longrightarrow> gen_wf_var gen_cfg_wf v' \<noteq> gen_wf_var gen_cfg_wf v)
[PROOF STEP]
apply (clarsimp simp: gen_wf.Entry_unreachable gen_wf.defs_uses_disjoint [where g=gen_cfg_wf]
  gen_wf.uses_in_\<alpha>n
  gen_wf.braun_ssa.uses_in_\<alpha>n gen_wf.phis'_finite
  gen_wf.\<alpha>n_distinct
  gen_wf.valid gen_wf.finite [simplified]
  gen_wf.ni.nodes_list_it_correct [simplified]
  gen_wf.pi.pred_list_it_correct [simplified])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = [] \<and> (\<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)) \<and> (\<forall>m\<in>set (gen_wf_\<alpha>n gen_cfg_wf). \<forall>x\<in>gen_wf_uses gen_cfg_wf m. CFG_base.defAss' (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs gen_cfg_wf) () m x) \<and> graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = [] \<and> (\<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)) \<and> (\<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}) \<and> (\<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)) \<and> (\<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args) \<and> (\<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}) \<and> (\<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})) \<and> (\<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)) \<and> (\<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n) \<and> (\<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n) \<and> (\<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))) \<and> (\<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))) \<and> (\<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
[PROOF STEP]
apply (intro conjI)
[PROOF STATE]
proof (prove)
goal (16 subgoals):
 1. graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = []
 2. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 3. \<forall>m\<in>set (gen_wf_\<alpha>n gen_cfg_wf). \<forall>x\<in>gen_wf_uses gen_cfg_wf m. CFG_base.defAss' (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs gen_cfg_wf) () m x
 4. graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = []
 5. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 6. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}
 7. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 8. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 9. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 10. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
A total of 16 subgoals...
[PROOF STEP]
using gen_wf.Entry_unreachable [of gen_cfg_wf]
[PROOF STATE]
proof (prove)
using this:
True \<Longrightarrow> gen_wf.inEdges gen_cfg_wf (gen_wf_Entry gen_cfg_wf) = []

goal (16 subgoals):
 1. graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = []
 2. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 3. \<forall>m\<in>set (gen_wf_\<alpha>n gen_cfg_wf). \<forall>x\<in>gen_wf_uses gen_cfg_wf m. CFG_base.defAss' (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs gen_cfg_wf) () m x
 4. graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = []
 5. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 6. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}
 7. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 8. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 9. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 10. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
A total of 16 subgoals...
[PROOF STEP]
apply (auto simp: graph_path_base.inEdges_def)[1]
[PROOF STATE]
proof (prove)
goal (15 subgoals):
 1. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 2. \<forall>m\<in>set (gen_wf_\<alpha>n gen_cfg_wf). \<forall>x\<in>gen_wf_uses gen_cfg_wf m. CFG_base.defAss' (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs gen_cfg_wf) () m x
 3. graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = []
 4. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 5. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}
 6. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 7. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 8. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 9. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 10. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
A total of 15 subgoals...
[PROOF STEP]
using gen_wf.Entry_reaches
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?n \<in> set (gen_wf_\<alpha>n ?g); True\<rbrakk> \<Longrightarrow> \<exists>ns. gen_wf.path2 ?g (gen_wf_Entry ?g) ns ?n

goal (15 subgoals):
 1. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 2. \<forall>m\<in>set (gen_wf_\<alpha>n gen_cfg_wf). \<forall>x\<in>gen_wf_uses gen_cfg_wf m. CFG_base.defAss' (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs gen_cfg_wf) () m x
 3. graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = []
 4. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 5. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}
 6. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 7. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 8. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 9. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 10. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
A total of 15 subgoals...
[PROOF STEP]
apply (fastforce cong del: imp_cong simp: graph_path_base.path2_def graph_path_base.path_def graph_path_base.predecessors_def graph_path_base.inEdges_def)[1]
[PROOF STATE]
proof (prove)
goal (14 subgoals):
 1. \<forall>m\<in>set (gen_wf_\<alpha>n gen_cfg_wf). \<forall>x\<in>gen_wf_uses gen_cfg_wf m. CFG_base.defAss' (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs gen_cfg_wf) () m x
 2. graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = []
 3. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 4. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}
 5. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 6. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 7. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 8. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 9. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 10. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
A total of 14 subgoals...
[PROOF STEP]
using gen_wf.def_ass_uses [of gen_cfg_wf]
[PROOF STATE]
proof (prove)
using this:
\<forall>m\<in>set (gen_wf_\<alpha>n gen_cfg_wf). \<forall>v\<in>gen_wf_uses gen_cfg_wf m. gen_wf.defAss' gen_cfg_wf m v

goal (14 subgoals):
 1. \<forall>m\<in>set (gen_wf_\<alpha>n gen_cfg_wf). \<forall>x\<in>gen_wf_uses gen_cfg_wf m. CFG_base.defAss' (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs gen_cfg_wf) () m x
 2. graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = []
 3. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 4. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}
 5. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 6. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 7. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 8. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 9. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 10. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
A total of 14 subgoals...
[PROOF STEP]
apply (auto simp: CFG_base.defAss'_def graph_path_base.path2_def graph_path_base.path_def graph_path_base.predecessors_def graph_path_base.inEdges_def)[1]
[PROOF STATE]
proof (prove)
goal (13 subgoals):
 1. graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = []
 2. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 3. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}
 4. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 5. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 6. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 7. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 8. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 9. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 10. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
A total of 13 subgoals...
[PROOF STEP]
using gen_wf.Entry_unreachable [of gen_cfg_wf]
[PROOF STATE]
proof (prove)
using this:
True \<Longrightarrow> gen_wf.inEdges gen_cfg_wf (gen_wf_Entry gen_cfg_wf) = []

goal (13 subgoals):
 1. graph_path_base.inEdges (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) = []
 2. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 3. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}
 4. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 5. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 6. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 7. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 8. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 9. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 10. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
A total of 13 subgoals...
[PROOF STEP]
apply (auto simp: graph_path_base.inEdges_def)[1]
[PROOF STATE]
proof (prove)
goal (12 subgoals):
 1. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 2. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}
 3. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 4. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 5. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 6. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 7. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 8. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 9. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 10. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
A total of 12 subgoals...
[PROOF STEP]
using gen_wf.Entry_reaches
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?n \<in> set (gen_wf_\<alpha>n ?g); True\<rbrakk> \<Longrightarrow> \<exists>ns. gen_wf.path2 ?g (gen_wf_Entry ?g) ns ?n

goal (12 subgoals):
 1. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<exists>ns. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () (gen_wf_Entry gen_cfg_wf) ns n)
 2. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}
 3. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 4. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 5. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 6. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 7. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 8. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 9. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 10. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
A total of 12 subgoals...
[PROOF STEP]
apply (fastforce cong del: imp_cong simp: graph_path_base.path2_def graph_path_base.path_def graph_path_base.predecessors_def gen_wf.defs_uses_disjoint graph_path_base.inEdges_def)[1]
[PROOF STATE]
proof (prove)
goal (11 subgoals):
 1. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> gen_wf.uses' gen_cfg_wf n = {}
 2. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 3. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 4. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 5. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 6. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 7. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 8. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 9. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 10. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
A total of 11 subgoals...
[PROOF STEP]
apply (auto dest: gen_wf.defs'_uses'_disjoint [where g=gen_cfg_wf])[1]
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<forall>n. (\<exists>a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs) \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)
 2. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 3. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 4. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 5. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 6. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 7. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 8. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 9. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 10. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
apply (auto dest: gen_wf.braun_ssa.phis_in_\<alpha>n)[1]
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<forall>n a aa b args. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some args \<longrightarrow> length (graph_path_base.predecessors (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n) = length args
 2. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 3. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 4. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 5. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 6. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 7. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 8. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 9. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
apply (auto dest: gen_wf.phis'_wf simp: graph_path_base.predecessors_def gen_wf_predecessors_def graph_path_base.inEdges_def)[1]
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_defs' gen_cfg_wf n \<inter> CFG_SSA_base.phiDefs (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n = {}
 2. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 3. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 4. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 5. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 6. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 7. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 8. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
apply (fastforce dest: gen_wf.braun_ssa.simpleDefs_phiDefs_disjoint simp: CFG_SSA_base.phiDefs_def dom_def)[1]
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 2. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 3. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 4. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 5. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 6. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 7. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
using gen_wf.braun_ssa.allDefs_disjoint[where g=gen_cfg_wf]
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?n \<in> set (gen_wf_\<alpha>n gen_cfg_wf); ?m \<in> set (gen_wf_\<alpha>n gen_cfg_wf); ?n \<noteq> ?m\<rbrakk> \<Longrightarrow> gen_wf.braun_ssa.allDefs gen_cfg_wf ?n \<inter> gen_wf.braun_ssa.allDefs gen_cfg_wf ?m = {}

goal (7 subgoals):
 1. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>m. m \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> n \<noteq> m \<longrightarrow> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<inter> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m = {})
 2. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 3. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 4. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 5. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 6. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 7. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
apply (clarsimp simp: CFG_SSA_base.CFG_SSA_defs)
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<forall>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 2. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 3. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 4. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 5. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 6. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<And>a aa b n. \<lbrakk>(a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n; n \<in> set (gen_wf_\<alpha>n gen_cfg_wf)\<rbrakk> \<Longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 2. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 3. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 4. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 5. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 6. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
apply (drule gen_wf.braun_ssa.allUses_def_ass [where g=gen_cfg_wf, rotated 1])
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>a aa b n. (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<Longrightarrow> ?v158 a aa b n \<in> gen_wf.braun_ssa.allUses gen_cfg_wf n
 2. \<And>a aa b n. \<lbrakk>(a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n; gen_wf.braun_ssa.defAss gen_cfg_wf n (?v158 a aa b n)\<rbrakk> \<Longrightarrow> CFG_SSA_base.defAss (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf_Entry gen_cfg_wf) (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n (a, aa, b)
 3. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 4. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 5. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 6. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 7. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
apply (auto simp: CFG_SSA_wf_base.CFG_SSA_wf_defs CFG_SSA_wf_base.defAssUses_def
        graph_path_base.path2_def graph_path_base.path_def graph_path_base.predecessors_def
        graph_path_base.successors_def graph_path_base.inEdges_def)[2]
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<forall>n. gen_wf_defs gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf_defs' gen_cfg_wf n
 2. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 3. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 4. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 5. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
apply (clarsimp simp: gen_wf.oldDefs_correct)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> gen_wf_uses gen_cfg_wf n = gen_wf_var gen_cfg_wf ` gen_wf.uses' gen_cfg_wf n
 2. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 3. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 4. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
apply (clarsimp simp: gen_wf.oldUses_correct)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<forall>n ns m. graph_path_base.path2 (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. True) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) () n ns m \<longrightarrow> n \<notin> set (tl ns) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a, aa, b) \<in> CFG_SSA_base.allUses (\<lambda>_. gen_wf_\<alpha>n gen_cfg_wf) (\<lambda>_. gen_wf_inEdges' gen_cfg_wf) (\<lambda>_. gen_wf.uses' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () m \<longrightarrow> (\<forall>x. x \<in> set (tl ns) \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () x \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b))))
 2. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 3. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
apply (intro allI impI gen_wf.conventional; auto simp: graph_path_base.path2_def graph_path_base.path_def graph_path_base.predecessors_def graph_path_base.successors_def CFG_SSA_base.CFG_SSA_defs graph_path_base.inEdges_def)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<forall>n a aa b vs. gen_wf.phis' gen_cfg_wf (n, a, aa, b) = Some vs \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> set vs \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) = gen_wf_var gen_cfg_wf (a, aa, b))
 2. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
apply (intro allI impI gen_wf.phis'_fst; assumption)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>n. n \<in> set (gen_wf_\<alpha>n gen_cfg_wf) \<longrightarrow> (\<forall>a aa b. (a, aa, b) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (\<forall>ab ac ba. (ab, ac, ba) \<in> CFG_SSA_base.allDefs (\<lambda>_. gen_wf_defs' gen_cfg_wf) (\<lambda>_. gen_wf.phis' gen_cfg_wf) () n \<longrightarrow> (a = ab \<longrightarrow> aa = ac \<longrightarrow> b \<noteq> ba) \<longrightarrow> gen_wf_var gen_cfg_wf (ab, ac, ba) \<noteq> gen_wf_var gen_cfg_wf (a, aa, b)))
[PROOF STEP]
by (intro allI impI gen_wf.allDefs_var_disjoint; auto simp: CFG_SSA_base.CFG_SSA_defs)


[STATEMENT]
lemma "x \<cdot> ad 1 = ad 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<cdot> ad (1::'a) = ad (1::'a)
[PROOF STEP]
(*nitpick [expect=genuine]*)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<cdot> ad (1::'a) = ad (1::'a)
[PROOF STEP]
oops


[STATEMENT]
lemma set_child_nodes_get_child_nodes_is_l_set_child_nodes_get_child_nodes [instances]:
  "l_set_child_nodes_get_child_nodes type_wf known_ptr get_child_nodes get_child_nodes_locs
                                     set_child_nodes set_child_nodes_locs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. l_set_child_nodes_get_child_nodes DocumentClass.type_wf DocumentClass.known_ptr get_child_nodes get_child_nodes_locs set_child_nodes set_child_nodes_locs
[PROOF STEP]
using get_child_nodes_is_l_get_child_nodes set_child_nodes_is_l_set_child_nodes
[PROOF STATE]
proof (prove)
using this:
l_get_child_nodes DocumentClass.type_wf DocumentClass.known_ptr get_child_nodes get_child_nodes_locs
l_set_child_nodes DocumentClass.type_wf set_child_nodes set_child_nodes_locs

goal (1 subgoal):
 1. l_set_child_nodes_get_child_nodes DocumentClass.type_wf DocumentClass.known_ptr get_child_nodes get_child_nodes_locs set_child_nodes set_child_nodes_locs
[PROOF STEP]
apply(auto simp add: l_set_child_nodes_get_child_nodes_def l_set_child_nodes_get_child_nodes_axioms_def)[1]
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>h ptr children h'. \<lbrakk>l_get_child_nodes DocumentClass.type_wf DocumentClass.known_ptr get_child_nodes get_child_nodes_locs; l_set_child_nodes DocumentClass.type_wf set_child_nodes set_child_nodes_locs; DocumentClass.type_wf h; DocumentClass.known_ptr ptr; h \<turnstile> set_child_nodes ptr children \<rightarrow>\<^sub>h h'\<rbrakk> \<Longrightarrow> h' \<turnstile> get_child_nodes ptr \<rightarrow>\<^sub>r children
 2. \<And>ptr ptr' w h h' r. \<lbrakk>l_get_child_nodes DocumentClass.type_wf DocumentClass.known_ptr get_child_nodes get_child_nodes_locs; l_set_child_nodes DocumentClass.type_wf set_child_nodes set_child_nodes_locs; ptr \<noteq> ptr'; w \<in> set_child_nodes_locs ptr; h \<turnstile> w \<rightarrow>\<^sub>h h'; r \<in> get_child_nodes_locs ptr'\<rbrakk> \<Longrightarrow> r h h'
[PROOF STEP]
using set_child_nodes_get_child_nodes
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>DocumentClass.known_ptr ?ptr; DocumentClass.type_wf ?h; ?h \<turnstile> set_child_nodes ?ptr ?children \<rightarrow>\<^sub>h ?h'\<rbrakk> \<Longrightarrow> ?h' \<turnstile> get_child_nodes ?ptr \<rightarrow>\<^sub>r ?children

goal (2 subgoals):
 1. \<And>h ptr children h'. \<lbrakk>l_get_child_nodes DocumentClass.type_wf DocumentClass.known_ptr get_child_nodes get_child_nodes_locs; l_set_child_nodes DocumentClass.type_wf set_child_nodes set_child_nodes_locs; DocumentClass.type_wf h; DocumentClass.known_ptr ptr; h \<turnstile> set_child_nodes ptr children \<rightarrow>\<^sub>h h'\<rbrakk> \<Longrightarrow> h' \<turnstile> get_child_nodes ptr \<rightarrow>\<^sub>r children
 2. \<And>ptr ptr' w h h' r. \<lbrakk>l_get_child_nodes DocumentClass.type_wf DocumentClass.known_ptr get_child_nodes get_child_nodes_locs; l_set_child_nodes DocumentClass.type_wf set_child_nodes set_child_nodes_locs; ptr \<noteq> ptr'; w \<in> set_child_nodes_locs ptr; h \<turnstile> w \<rightarrow>\<^sub>h h'; r \<in> get_child_nodes_locs ptr'\<rbrakk> \<Longrightarrow> r h h'
[PROOF STEP]
apply blast
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>ptr ptr' w h h' r. \<lbrakk>l_get_child_nodes DocumentClass.type_wf DocumentClass.known_ptr get_child_nodes get_child_nodes_locs; l_set_child_nodes DocumentClass.type_wf set_child_nodes set_child_nodes_locs; ptr \<noteq> ptr'; w \<in> set_child_nodes_locs ptr; h \<turnstile> w \<rightarrow>\<^sub>h h'; r \<in> get_child_nodes_locs ptr'\<rbrakk> \<Longrightarrow> r h h'
[PROOF STEP]
using set_child_nodes_get_child_nodes_different_pointers
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?ptr \<noteq> ?ptr'; ?w \<in> set_child_nodes_locs ?ptr; ?h \<turnstile> ?w \<rightarrow>\<^sub>h ?h'; ?r \<in> get_child_nodes_locs ?ptr'\<rbrakk> \<Longrightarrow> ?r ?h ?h'

goal (1 subgoal):
 1. \<And>ptr ptr' w h h' r. \<lbrakk>l_get_child_nodes DocumentClass.type_wf DocumentClass.known_ptr get_child_nodes get_child_nodes_locs; l_set_child_nodes DocumentClass.type_wf set_child_nodes set_child_nodes_locs; ptr \<noteq> ptr'; w \<in> set_child_nodes_locs ptr; h \<turnstile> w \<rightarrow>\<^sub>h h'; r \<in> get_child_nodes_locs ptr'\<rbrakk> \<Longrightarrow> r h h'
[PROOF STEP]
apply metis
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
lemma wfPhi_f_poly_supp_t:
  fixes \<tau>::\<tau> and \<Theta>::\<Theta> and \<Phi>::\<Phi> and ft :: fun_typ_q
  assumes "Some (AF_fundef f  (AF_fun_typ_some bv (AF_fun_typ x b c \<tau> s))) = lookup_fun \<Phi> f" and "\<Theta> \<turnstile>\<^sub>w\<^sub>f \<Phi>"
  shows "supp \<tau> \<subseteq> { atom x , atom bv }"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. supp \<tau> \<subseteq> {atom x, atom bv}
[PROOF STEP]
using wfPhi_f_poly_wfT[OF assms, THEN wfT_supp]  atom_dom.simps  supp_at_base
[PROOF STATE]
proof (prove)
using this:
supp \<tau> \<subseteq> atom_dom ((x, b, c) #\<^sub>\<Gamma> GNil) \<union> supp {|bv|}
atom_dom ?\<Gamma> = atom ` Syntax.dom ?\<Gamma>
supp ?a = {atom ?a}

goal (1 subgoal):
 1. supp \<tau> \<subseteq> {atom x, atom bv}
[PROOF STEP]
by auto


[STATEMENT]
lemma l2_inv3_step1:
  "{l2_inv3} l2_step1 Ra A B {> l2_inv3}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. {l2_inv3} l2_step1 Ra A B {> l2_inv3}
[PROOF STEP]
apply (auto simp add: PO_hoare_defs l2_nostep_defs intro!: l2_inv3I)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>x xa xb. \<lbrakk>xa \<in> l2_inv3; (xa, x) \<in> l2_step1 Ra A B; xb \<in> extr (bad x) (ik x) (chan x)\<rbrakk> \<Longrightarrow> xb \<in> synth (analz (generators x))
 2. \<And>x xa xb. \<lbrakk>xa \<in> l2_inv3; (xa, x) \<in> l2_step1 Ra A B; xb \<in> chan x; xb \<notin> chan_generators\<rbrakk> \<Longrightarrow> xb \<in> faked_chan_msgs x
[PROOF STEP]
apply (auto simp add: l2_defs bad_runs_def intro: synth_analz_increasing dest!: l2_inv3D)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>xa. \<lbrakk>Insec A B (Exp Gen (NonceF (Ra $ nx))) \<notin> chan_generators; Ra \<notin> dom (progress xa); guessed_runs Ra = \<lparr>role = Init, owner = A, partner = B\<rparr>; extr (bad xa) (ik xa) (chan xa) \<subseteq> synth (analz ({x. \<exists>N. x = Exp Gen (Nonce N)} \<union> {x. \<exists>R. (owner (guessed_runs R) \<in> bad xa \<or> partner (guessed_runs R) \<in> bad xa) \<and> (x = NonceF (R $ ni) \<or> x = NonceF (R $ nr))} \<union> {x. \<exists>y y' z. x = hmac \<langle>y, y'\<rangle> (Hash z)} \<union> {Exp y (NonceF (R $ N)) |y N R. R \<noteq> test \<and> R \<notin> partners})); chan xa \<subseteq> faked_chan_msgs xa \<union> chan_generators\<rbrakk> \<Longrightarrow> Insec A B (Exp Gen (NonceF (Ra $ nx))) \<in> faked_chan_msgs (xa\<lparr>progress := progress xa(Ra \<mapsto> {xnx, xni, xgnx}), chan := insert (Insec A B (Exp Gen (NonceF (Ra $ nx)))) (insert (Confid A B (NonceF (Ra $ ni))) (chan xa))\<rparr>)
 2. \<And>xa. \<lbrakk>Confid A B (NonceF (Ra $ ni)) \<notin> chan_generators; Ra \<notin> dom (progress xa); guessed_runs Ra = \<lparr>role = Init, owner = A, partner = B\<rparr>; extr (bad xa) (ik xa) (chan xa) \<subseteq> synth (analz ({x. \<exists>N. x = Exp Gen (Nonce N)} \<union> {x. \<exists>R. (owner (guessed_runs R) \<in> bad xa \<or> partner (guessed_runs R) \<in> bad xa) \<and> (x = NonceF (R $ ni) \<or> x = NonceF (R $ nr))} \<union> {x. \<exists>y y' z. x = hmac \<langle>y, y'\<rangle> (Hash z)} \<union> {Exp y (NonceF (R $ N)) |y N R. R \<noteq> test \<and> R \<notin> partners})); chan xa \<subseteq> faked_chan_msgs xa \<union> chan_generators\<rbrakk> \<Longrightarrow> Confid A B (NonceF (Ra $ ni)) \<in> faked_chan_msgs (xa\<lparr>progress := progress xa(Ra \<mapsto> {xnx, xni, xgnx}), chan := insert (Insec A B (Exp Gen (NonceF (Ra $ nx)))) (insert (Confid A B (NonceF (Ra $ ni))) (chan xa))\<rparr>)
 3. \<And>xa xb. \<lbrakk>xb \<notin> chan_generators; Ra \<notin> dom (progress xa); guessed_runs Ra = \<lparr>role = Init, owner = A, partner = B\<rparr>; extr (bad xa) (ik xa) (chan xa) \<subseteq> synth (analz ({x. \<exists>N. x = Exp Gen (Nonce N)} \<union> {x. \<exists>R. (owner (guessed_runs R) \<in> bad xa \<or> partner (guessed_runs R) \<in> bad xa) \<and> (x = NonceF (R $ ni) \<or> x = NonceF (R $ nr))} \<union> {x. \<exists>y y' z. x = hmac \<langle>y, y'\<rangle> (Hash z)} \<union> {Exp y (NonceF (R $ N)) |y N R. R \<noteq> test \<and> R \<notin> partners})); chan xa \<subseteq> faked_chan_msgs xa \<union> chan_generators; xb \<in> chan xa\<rbrakk> \<Longrightarrow> xb \<in> faked_chan_msgs (xa\<lparr>progress := progress xa(Ra \<mapsto> {xnx, xni, xgnx}), chan := insert (Insec A B (Exp Gen (NonceF (Ra $ nx)))) (insert (Confid A B (NonceF (Ra $ ni))) (chan xa))\<rparr>)
[PROOF STEP]
apply (auto simp add: l2_inv3_aux_defs intro: synth_analz_monotone
            dest!: subsetD [where A="chan _"])
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
lemma "A \<longleftrightarrow> A \<longleftrightarrow> A \<longleftrightarrow> A \<longleftrightarrow> A"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. A = (A = (A = (A = A)))
[PROOF STEP]
apply (iff 5)?
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. A = (A = (A = (A = A)))
[PROOF STEP]
oops