theory CSpace_R

lemma untyped_inc' [simp]:
  "untyped_inc' n'" using src dest apply (clarsimp simp: untyped_inc'_def) apply (drule n'_cap)+ apply (clarsimp simp: descendants') apply (clarsimp split: if_split_asm) apply (rule conjI) apply clarsimp apply (drule (3) untyped_incD', rule untyped_inc) apply clarsimp apply (rule conjI) apply clarsimp apply (frule_tac p=src and p'=p' in untyped_incD', assumption+, rule untyped_inc) apply (clarsimp simp: ut_descendants) apply (intro conjI, clarsimp+) apply (drule (3) untyped_incD', rule untyped_inc) apply clarsimp done

(* Proof state trace *)
proof (prove)
goal (1 subgoal):
 1. untyped_inc' n' proof (prove)
using this:
m src = Some (CTE src_cap src_node)
m dest = Some (CTE dest_cap dest_node)

goal (1 subgoal):
 1. untyped_inc' n' proof (prove)
goal (1 subgoal):
 1. \<And>p p' c n c' n'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); n' p = Some (CTE c n); isUntypedCap c; n' p' = Some (CTE c' n'a); isUntypedCap c'\<rbrakk> \<Longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' n' \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p n' \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p n' \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' n' \<and> usableUntypedRange c' = {} \<or> p = p') proof (prove)
goal (1 subgoal):
 1. \<And>p p' c n c'a n'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'a; \<exists>node'. if p = dest then c = c' \<and> m p = Some (CTE dest_cap node') else m p = Some (CTE c node'); \<exists>node'. if p' = dest then c'a = c' \<and> m p' = Some (CTE dest_cap node') else m p' = Some (CTE c'a node')\<rbrakk> \<Longrightarrow> (untypedRange c \<subseteq> untypedRange c'a \<or> untypedRange c'a \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c'a = {}) \<and> (untypedRange c \<subset> untypedRange c'a \<longrightarrow> p \<in> descendants_of' p' n' \<and> untypedRange c \<inter> usableUntypedRange c'a = {}) \<and> (untypedRange c'a \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p n' \<and> untypedRange c'a \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c'a \<longrightarrow> p' \<in> descendants_of' p n' \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' n' \<and> usableUntypedRange c'a = {} \<or> p = p') proof (prove)
goal (1 subgoal):
 1. \<And>p p' c c'a node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'a; if p = dest then c = c' \<and> dest_node = node' else m p = Some (CTE c node'); if p' = dest then c'a = c' \<and> dest_node = node'a else m p' = Some (CTE c'a node'a)\<rbrakk> \<Longrightarrow> (src \<in> descendants_of' p m \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c'a \<or> untypedRange c'a \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c'a = {}) \<and> (untypedRange c \<subset> untypedRange c'a \<longrightarrow> (p = dest \<or> p \<in> descendants_of' p' m) \<and> untypedRange c \<inter> usableUntypedRange c'a = {}) \<and> (untypedRange c'a \<subset> untypedRange c \<longrightarrow> (p' = dest \<or> p' \<in> descendants_of' p m) \<and> untypedRange c'a \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c'a \<longrightarrow> (p' = dest \<or> p' \<in> descendants_of' p m) \<and> usableUntypedRange c = {} \<or> (p = dest \<or> p \<in> descendants_of' p' m) \<and> usableUntypedRange c'a = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c'a \<or> untypedRange c'a \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c'a = {}) \<and> (untypedRange c \<subset> untypedRange c'a \<longrightarrow> (p = dest \<or> p \<in> descendants_of' src m) \<and> untypedRange c \<inter> usableUntypedRange c'a = {}) \<and> (untypedRange c'a \<subset> untypedRange c \<longrightarrow> untypedRange c'a \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c'a \<longrightarrow> usableUntypedRange c = {} \<or> (p = dest \<or> p \<in> descendants_of' src m) \<and> usableUntypedRange c'a = {} \<or> p = src)) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c'a \<or> untypedRange c'a \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c'a = {}) \<and> (untypedRange c \<subset> untypedRange c'a \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c'a = {}) \<and> (untypedRange c'a \<subset> untypedRange c \<longrightarrow> (p' = dest \<or> p' \<in> descendants_of' p m) \<and> untypedRange c'a \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c'a \<longrightarrow> (p' = dest \<or> p' \<in> descendants_of' p m) \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c'a = {} \<or> p = p'))) \<and> (p = src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c'a \<or> untypedRange c'a \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c'a = {}) \<and> (untypedRange c \<subset> untypedRange c'a \<longrightarrow> untypedRange c \<inter> usableUntypedRange c'a = {}) \<and> (untypedRange c'a \<subset> untypedRange c \<longrightarrow> (p' = dest \<or> p' \<in> descendants_of' src m) \<and> untypedRange c'a \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c'a \<longrightarrow> (p' = dest \<or> p' \<in> descendants_of' src m) \<and> usableUntypedRange c = {} \<or> usableUntypedRange c'a = {} \<or> src = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c'a \<or> untypedRange c'a \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c'a = {}) \<and> (untypedRange c \<subset> untypedRange c'a \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c'a = {}) \<and> (untypedRange c'a \<subset> untypedRange c \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c'a \<inter> usableUntypedRange c = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c'a \<or> untypedRange c'a \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c'a = {}) \<and> \<not> untypedRange c \<subset> untypedRange c'a \<and> (untypedRange c'a \<subset> untypedRange c \<longrightarrow> (p' = dest \<or> p' \<in> descendants_of' src m) \<and> untypedRange c'a \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c'a \<longrightarrow> (p' = dest \<or> p' \<in> descendants_of' src m) \<and> usableUntypedRange c = {} \<or> src = p'))) \<and> (src \<notin> descendants_of' p m \<and> p \<noteq> src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c'a \<or> untypedRange c'a \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c'a = {}) \<and> (untypedRange c \<subset> untypedRange c'a \<longrightarrow> (p = dest \<or> p \<in> descendants_of' p' m) \<and> untypedRange c \<inter> usableUntypedRange c'a = {}) \<and> (untypedRange c'a \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c'a \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c'a \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> (p = dest \<or> p \<in> descendants_of' p' m) \<and> usableUntypedRange c'a = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c'a \<or> untypedRange c'a \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c'a = {}) \<and> (untypedRange c \<subset> untypedRange c'a \<longrightarrow> (p = dest \<or> p \<in> descendants_of' src m) \<and> untypedRange c \<inter> usableUntypedRange c'a = {}) \<and> \<not> untypedRange c'a \<subset> untypedRange c \<and> (untypedRange c = untypedRange c'a \<longrightarrow> (p = dest \<or> p \<in> descendants_of' src m) \<and> usableUntypedRange c'a = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c'a \<or> untypedRange c'a \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c'a = {}) \<and> (untypedRange c \<subset> untypedRange c'a \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c'a = {}) \<and> (untypedRange c'a \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c'a \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c'a \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c'a = {} \<or> p = p'))) proof (prove)
goal (1 subgoal):
 1. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> (src \<in> descendants_of' p m \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> usableUntypedRange c = {} \<or> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {} \<or> p = src)) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p'))) \<and> (p = src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> usableUntypedRange c' = {} \<or> src = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> \<not> untypedRange c \<subset> untypedRange c' \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> src = p'))) \<and> (src \<notin> descendants_of' p m \<and> p \<noteq> src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> \<not> untypedRange c' \<subset> untypedRange c \<and> (untypedRange c = untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p'))) proof (prove)
goal (2 subgoals):
 1. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> src \<in> descendants_of' p m \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> usableUntypedRange c = {} \<or> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {} \<or> p = src)) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p'))
 2. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> (p = src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> usableUntypedRange c' = {} \<or> src = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> \<not> untypedRange c \<subset> untypedRange c' \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> src = p'))) \<and> (src \<notin> descendants_of' p m \<and> p \<noteq> src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> \<not> untypedRange c' \<subset> untypedRange c \<and> (untypedRange c = untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p'))) proof (prove)
goal (2 subgoals):
 1. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a); src \<in> descendants_of' p m\<rbrakk> \<Longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> usableUntypedRange c = {} \<or> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {} \<or> p = src)) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p'))
 2. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> (p = src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> usableUntypedRange c' = {} \<or> src = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> \<not> untypedRange c \<subset> untypedRange c' \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> src = p'))) \<and> (src \<notin> descendants_of' p m \<and> p \<noteq> src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> \<not> untypedRange c' \<subset> untypedRange c \<and> (untypedRange c = untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p'))) proof (prove)
goal (2 subgoals):
 1. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; p' \<noteq> dest; m p' = Some (CTE c' node'a); src \<in> descendants_of' p m; (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')\<rbrakk> \<Longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> usableUntypedRange c = {} \<or> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {} \<or> p = src)) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p'))
 2. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> (p = src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> usableUntypedRange c' = {} \<or> src = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> \<not> untypedRange c \<subset> untypedRange c' \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> src = p'))) \<and> (src \<notin> descendants_of' p m \<and> p \<noteq> src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> \<not> untypedRange c' \<subset> untypedRange c \<and> (untypedRange c = untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p'))) proof (prove)
goal (1 subgoal):
 1. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> (p = src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> usableUntypedRange c' = {} \<or> src = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> \<not> untypedRange c \<subset> untypedRange c' \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> src = p'))) \<and> (src \<notin> descendants_of' p m \<and> p \<noteq> src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> \<not> untypedRange c' \<subset> untypedRange c \<and> (untypedRange c = untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p'))) proof (prove)
goal (2 subgoals):
 1. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> p = src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> usableUntypedRange c' = {} \<or> src = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> \<not> untypedRange c \<subset> untypedRange c' \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange c = {} \<or> src = p'))
 2. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> src \<notin> descendants_of' p m \<and> p \<noteq> src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> \<not> untypedRange c' \<subset> untypedRange c \<and> (untypedRange c = untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) proof (prove)
goal (2 subgoals):
 1. \<And>p' c' node'a. \<lbrakk>m dest = Some (CTE dest_cap dest_node); isUntypedCap src_cap; isUntypedCap c'; m src = Some (CTE src_cap src_node); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange src_cap \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange src_cap \<or> untypedRange src_cap \<inter> untypedRange c' = {}) \<and> (untypedRange src_cap \<subset> untypedRange c' \<longrightarrow> untypedRange src_cap \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange src_cap \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange src_cap = {}) \<and> (untypedRange src_cap = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange src_cap = {} \<or> usableUntypedRange c' = {} \<or> src = p')) \<and> (p' = src \<longrightarrow> (untypedRange src_cap \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange src_cap \<or> untypedRange src_cap \<inter> untypedRange c' = {}) \<and> (untypedRange src_cap \<subset> untypedRange c' \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange src_cap \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange src_cap \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange src_cap = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange src_cap \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange src_cap \<or> untypedRange src_cap \<inter> untypedRange c' = {}) \<and> \<not> untypedRange src_cap \<subset> untypedRange c' \<and> (untypedRange c' \<subset> untypedRange src_cap \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange src_cap = {}) \<and> (untypedRange src_cap = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange src_cap = {} \<or> src = p'))
 2. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> src \<notin> descendants_of' p m \<and> p \<noteq> src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> \<not> untypedRange c' \<subset> untypedRange c \<and> (untypedRange c = untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) proof (prove)
goal (2 subgoals):
 1. \<And>p' c' node'a. \<lbrakk>m dest = Some (CTE dest_cap dest_node); isUntypedCap src_cap; isUntypedCap c'; m src = Some (CTE src_cap src_node); p' \<noteq> dest; m p' = Some (CTE c' node'a); (untypedRange src_cap \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange src_cap \<or> untypedRange src_cap \<inter> untypedRange c' = {}) \<and> (untypedRange src_cap \<subset> untypedRange c' \<longrightarrow> src \<in> descendants_of' p' m \<and> untypedRange src_cap \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange src_cap \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange src_cap = {}) \<and> (untypedRange src_cap = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange src_cap = {} \<or> src \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> src = p')\<rbrakk> \<Longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange src_cap \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange src_cap \<or> untypedRange src_cap \<inter> untypedRange c' = {}) \<and> (untypedRange src_cap \<subset> untypedRange c' \<longrightarrow> untypedRange src_cap \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange src_cap \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange src_cap = {}) \<and> (untypedRange src_cap = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange src_cap = {} \<or> usableUntypedRange c' = {} \<or> src = p')) \<and> (p' = src \<longrightarrow> (untypedRange src_cap \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange src_cap \<or> untypedRange src_cap \<inter> untypedRange c' = {}) \<and> (untypedRange src_cap \<subset> untypedRange c' \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange src_cap \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange src_cap \<longrightarrow> src \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange src_cap = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange src_cap \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange src_cap \<or> untypedRange src_cap \<inter> untypedRange c' = {}) \<and> \<not> untypedRange src_cap \<subset> untypedRange c' \<and> (untypedRange c' \<subset> untypedRange src_cap \<longrightarrow> p' \<in> descendants_of' src m \<and> untypedRange c' \<inter> usableUntypedRange src_cap = {}) \<and> (untypedRange src_cap = untypedRange c' \<longrightarrow> p' \<in> descendants_of' src m \<and> usableUntypedRange src_cap = {} \<or> src = p'))
 2. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> src \<notin> descendants_of' p m \<and> p \<noteq> src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> \<not> untypedRange c' \<subset> untypedRange c \<and> (untypedRange c = untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) proof (prove)
goal (2 subgoals):
 1. \<And>p' c' node'a. \<lbrakk>m dest = Some (CTE dest_cap dest_node); isUntypedCap src_cap; isUntypedCap c'; m src = Some (CTE src_cap src_node); p' \<noteq> dest; m p' = Some (CTE c' node'a); untypedRange src_cap \<subseteq> untypedRange c' \<or> untypedRange c' = untypedRange src_cap \<or> untypedRange src_cap \<inter> untypedRange c' = {}; untypedRange src_cap \<subset> untypedRange c' \<longrightarrow> src \<in> descendants_of' p' m \<and> untypedRange src_cap \<inter> usableUntypedRange c' = {}; \<not> untypedRange c' \<subset> untypedRange src_cap; untypedRange src_cap = untypedRange c' \<longrightarrow> src \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> src = p'\<rbrakk> \<Longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> untypedRange src_cap = untypedRange c' \<longrightarrow> usableUntypedRange c' = {} \<or> src = p') \<and> (p' = src \<longrightarrow> \<not> untypedRange src_cap \<subset> untypedRange c') \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> \<not> untypedRange src_cap \<subset> untypedRange c' \<and> (untypedRange src_cap = untypedRange c' \<longrightarrow> src = p'))
 2. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a)\<rbrakk> \<Longrightarrow> src \<notin> descendants_of' p m \<and> p \<noteq> src \<longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> \<not> untypedRange c' \<subset> untypedRange c \<and> (untypedRange c = untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) proof (prove)
goal (1 subgoal):
 1. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; m p = Some (CTE c node'); p' \<noteq> dest; m p' = Some (CTE c' node'a); src \<notin> descendants_of' p m; p \<noteq> src\<rbrakk> \<Longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> \<not> untypedRange c' \<subset> untypedRange c \<and> (untypedRange c = untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) proof (prove)
goal (1 subgoal):
 1. \<And>p p' c c' node' node'a. \<lbrakk>m src = Some (CTE src_cap src_node); m dest = Some (CTE dest_cap dest_node); isUntypedCap c; isUntypedCap c'; p \<noteq> dest; p' \<noteq> dest; m p' = Some (CTE c' node'a); src \<notin> descendants_of' p m; p \<noteq> src; (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')\<rbrakk> \<Longrightarrow> (src \<in> descendants_of' p' m \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) \<and> (p' = src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> \<not> untypedRange c' \<subset> untypedRange c \<and> (untypedRange c = untypedRange c' \<longrightarrow> p \<in> descendants_of' src m \<and> usableUntypedRange c' = {})) \<and> (src \<notin> descendants_of' p' m \<and> p' \<noteq> src \<longrightarrow> (untypedRange c \<subseteq> untypedRange c' \<or> untypedRange c' \<subseteq> untypedRange c \<or> untypedRange c \<inter> untypedRange c' = {}) \<and> (untypedRange c \<subset> untypedRange c' \<longrightarrow> p \<in> descendants_of' p' m \<and> untypedRange c \<inter> usableUntypedRange c' = {}) \<and> (untypedRange c' \<subset> untypedRange c \<longrightarrow> p' \<in> descendants_of' p m \<and> untypedRange c' \<inter> usableUntypedRange c = {}) \<and> (untypedRange c = untypedRange c' \<longrightarrow> p' \<in> descendants_of' p m \<and> usableUntypedRange c = {} \<or> p \<in> descendants_of' p' m \<and> usableUntypedRange c' = {} \<or> p = p')) proof (prove)
goal:
No subgoals!