section \<open>Validity of Correctness Formulas\<close>
subsection \<open>Validity for Component Programs.\<close>
type_synonym'a rgformula = "'a com \ 'a set \ ('a \ 'a) set \ ('a \ 'a) set \ 'a set"
definition assum :: "('a set \ ('a \ 'a) set) \ ('a confs) set" where "assum \ \(pre, rely). {c. snd(c!0) \ pre \ (\i. Suc i
c!i -e\<rightarrow> c!(Suc i) \<longrightarrow> (snd(c!i), snd(c!Suc i)) \<in> rely)}"
definition comm :: "(('a \ 'a) set \ 'a set) \ ('a confs) set" where "comm \ \(guar, post). {c. (\i. Suc i
c!i -c\<rightarrow> c!(Suc i) \<longrightarrow> (snd(c!i), snd(c!Suc i)) \<in> guar) \<and>
(fst (last c) = None \<longrightarrow> snd (last c) \<in> post)}"
definition com_validity :: "'a com \ 'a set \ ('a \ 'a) set \ ('a \ 'a) set \ 'a set \ bool"
(\<open>\<Turnstile> _ sat [_, _, _, _]\<close> [60,0,0,0,0] 45) where "\ P sat [pre, rely, guar, post] \ \<forall>s. cp (Some P) s \<inter> assum(pre, rely) \<subseteq> comm(guar, post)"
subsection \<open>Validity for Parallel Programs.\<close>
definition All_None :: "(('a com) option) list \ bool" where "All_None xs \ \c\set xs. c=None"
definition par_assum :: "('a set \ ('a \ 'a) set) \ ('a par_confs) set" where "par_assum \ \(pre, rely). {c. snd(c!0) \ pre \ (\i. Suc i
c!i -pe\<rightarrow> c!Suc i \<longrightarrow> (snd(c!i), snd(c!Suc i)) \<in> rely)}"
definition par_comm :: "(('a \ 'a) set \ 'a set) \ ('a par_confs) set" where "par_comm \ \(guar, post). {c. (\i. Suc i
c!i -pc\<rightarrow> c!Suc i \<longrightarrow> (snd(c!i), snd(c!Suc i)) \<in> guar) \<and>
(All_None (fst (last c)) \<longrightarrow> snd( last c) \<in> post)}"
definition par_com_validity :: "'a par_com \ 'a set \ ('a \ 'a) set \ ('a \ 'a) set \<Rightarrow> 'a set \<Rightarrow> bool" (\<open>\<Turnstile> _ SAT [_, _, _, _]\<close> [60,0,0,0,0] 45) where "\ Ps SAT [pre, rely, guar, post] \ \<forall>s. par_cp Ps s \<inter> par_assum(pre, rely) \<subseteq> par_comm(guar, post)"
subsection \<open>Compositionality of the Semantics\<close>
subsubsection \<open>Definition of the conjoin operator\<close>
definition same_length :: "'a par_confs \ ('a confs) list \ bool" where "same_length c clist \ (\i
definition same_state :: "'a par_confs \ ('a confs) list \ bool" where "same_state c clist \ (\i j
definition same_program :: "'a par_confs \ ('a confs) list \ bool" where "same_program c clist \ (\jx. fst(nth x j)) clist)"
lemma prog_not_eq_in_ctran_aux: assumes c: "(P,s) -c\ (Q,t)" shows"P\Q" using c by (induct x1 \<equiv> "(P,s)" x2 \<equiv> "(Q,t)" arbitrary: P s Q t) auto
lemma tl_zero[rule_format]: "P (ys!Suc j) \ Suc j ys\[] \ P (tl(ys)!j)" by (induct ys) simp_all
subsection \<open>The Semantics is Compositional\<close>
lemma aux_if [rule_format]: "\xs s clist. (length clist = length xs \ (\i cptn) \<and> ((xs, s)#ys \<propto> map (\<lambda>i. (fst i,s)#snd i) (zip xs clist)) \<longrightarrow> (xs, s)#ys \<in> par_cptn)" apply(induct ys) apply(clarify) apply(rule ParCptnOne) apply(clarify) apply(simp add:conjoin_def compat_label_def) apply clarify apply(erule_tac x="0"and P="\j. H j \ (P j \ Q j)" for H P Q in all_dupE, simp) apply(erule disjE) \<comment> \<open>first step is a Component step\<close> apply clarify apply simp apply(subgoal_tac "a=(xs[i:=(fst(clist!i!0))])") apply(subgoal_tac "b=snd(clist!i!0)",simp) prefer 2 apply(simp add: same_state_def) apply(erule_tac x=i in allE,erule impE,assumption,
erule_tac x=1 and P="\j. (H j) \ (snd (d j))=(snd (e j))" for H d e in allE, simp) prefer 2 apply(simp add:same_program_def) apply(erule_tac x=1 and P="\j. H j \ (fst (s j))=(t j)" for H s t in allE,simp) apply(rule nth_equalityI,simp) apply clarify apply(case_tac "i=ia",simp,simp) apply(erule_tac x=ia and P="\j. H j \ I j \ J j" for H I J in allE) apply(drule_tac t=i in not_sym,simp) apply(erule etranE,simp) apply(rule ParCptnComp) apply(erule ParComp,simp) \<comment> \<open>applying the induction hypothesis\<close> apply(erule_tac x="xs[i := fst (clist ! i ! 0)]"in allE) apply(erule_tac x="snd (clist ! i ! 0)"in allE) apply(erule mp) apply(rule_tac x="map tl clist"in exI,simp) apply(rule conjI,clarify) apply(case_tac "i=ia",simp) apply(rule nth_tl_if) apply(force simp add:same_length_def length_Suc_conv) apply simp apply(erule allE,erule impE,assumption,erule tl_in_cptn) apply(force simp add:same_length_def length_Suc_conv) apply(rule nth_tl_if) apply(force simp add:same_length_def length_Suc_conv) apply(simp add:same_state_def) apply(erule_tac x=ia in allE, erule impE, assumption,
erule_tac x=1 and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE) apply(erule_tac x=ia and P="\j. H j \ I j \ J j" for H I J in allE) apply(drule_tac t=i in not_sym,simp) apply(erule etranE,simp) apply(erule allE,erule impE,assumption,erule tl_in_cptn) apply(force simp add:same_length_def length_Suc_conv) apply(simp add:same_length_def same_state_def) apply(rule conjI) apply clarify apply(case_tac j,simp,simp) apply(erule_tac x=ia in allE, erule impE, assumption,
erule_tac x="Suc(Suc nat)"and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE,simp) apply(force simp add:same_length_def length_Suc_conv) apply(rule conjI) apply(simp add:same_program_def) apply clarify apply(case_tac j,simp) apply(rule nth_equalityI,simp) apply clarify apply(case_tac "i=ia",simp,simp) apply(erule_tac x="Suc(Suc nat)"and P="\j. H j \ (fst (s j))=(t j)" for H s t in allE,simp) apply(rule nth_equalityI,simp,simp) apply(force simp add:length_Suc_conv) apply(rule allI,rule impI) apply(erule_tac x="Suc j"and P="\j. H j \ (I j \ J j)" for H I J in allE,simp) apply(erule disjE) apply clarify apply(rule_tac x=ia in exI,simp) apply(case_tac "i=ia",simp) apply(rule conjI) apply(force simp add: length_Suc_conv) apply clarify apply(erule_tac x=l and P="\j. H j \ I j \ J j" for H I J in allE,erule impE,assumption) apply(erule_tac x=l and P="\j. H j \ I j \ J j" for H I J in allE,erule impE,assumption) apply simp apply(case_tac j,simp) apply(rule tl_zero) apply(erule_tac x=l in allE, erule impE, assumption,
erule_tac x=1 and P="\j. (H j) \ (snd (d j))=(snd (e j))" for H d e in allE,simp) apply(force elim:etranE intro:Env) apply force apply force apply simp apply(rule tl_zero) apply(erule tl_zero) apply force apply force apply force apply force apply(rule conjI,simp) apply(rule nth_tl_if) apply force apply(erule_tac x=ia in allE, erule impE, assumption,
erule_tac x=1 and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE) apply(erule_tac x=ia and P="\j. H j \ I j \ J j" for H I J in allE) apply(drule_tac t=i in not_sym,simp) apply(erule etranE,simp) apply(erule tl_zero) apply force apply force apply clarify apply(case_tac "i=l",simp) apply(rule nth_tl_if) apply(erule_tac x=l and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply simp apply(erule_tac P="\j. H j \ I j \ J j" for H I J in allE,erule impE,assumption,erule impE,assumption) apply(erule tl_zero,force) apply(erule_tac x=l and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply(rule nth_tl_if) apply(erule_tac x=l and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply(erule_tac x=l in allE, erule impE, assumption,
erule_tac x=1 and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE) apply(erule_tac x=l and P="\j. H j \ I j \ J j" for H I J in allE,erule impE, assumption,simp) apply(erule etranE,simp) apply(rule tl_zero) apply force apply force apply(erule_tac x=l and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply(rule disjI2) apply(case_tac j,simp) apply clarify apply(rule tl_zero) apply(erule_tac x=ia and P="\j. H j \ I j\etran" for H I in allE,erule impE, assumption) apply(case_tac "i=ia",simp,simp) apply(erule_tac x=ia in allE, erule impE, assumption,
erule_tac x=1 and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE) apply(erule_tac x=ia and P="\j. H j \ I j \ J j" for H I J in allE,erule impE, assumption,simp) apply(force elim:etranE intro:Env) apply force apply(erule_tac x=ia and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply simp apply clarify apply(rule tl_zero) apply(rule tl_zero,force) apply force apply(erule_tac x=ia and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply force apply(erule_tac x=ia and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) \<comment> \<open>first step is an environmental step\<close> apply clarify apply(erule par_etran.cases) apply simp apply(rule ParCptnEnv) apply(erule_tac x="Ps"in allE) apply(erule_tac x="t"in allE) apply(erule mp) apply(rule_tac x="map tl clist"in exI,simp) apply(rule conjI) apply clarify apply(erule_tac x=i and P="\j. H j \ I j \ cptn" for H I in allE,simp) apply(erule cptn.cases) apply(simp add:same_length_def) apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply(simp add:same_state_def) apply(erule_tac x=i in allE, erule impE, assumption,
erule_tac x=1 and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE,simp) apply(erule_tac x=i and P="\j. H j \ J j \etran" for H J in allE,simp) apply(erule etranE,simp) apply(simp add:same_state_def same_length_def) apply(rule conjI,clarify) apply(case_tac j,simp,simp) apply(erule_tac x=i in allE, erule impE, assumption,
erule_tac x="Suc(Suc nat)"and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE,simp) apply(rule tl_zero) apply(simp) apply force apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply(rule conjI) apply(simp add:same_program_def) apply clarify apply(case_tac j,simp) apply(rule nth_equalityI,simp) apply clarify apply simp apply(erule_tac x="Suc(Suc nat)"and P="\j. H j \ (fst (s j))=(t j)" for H s t in allE,simp) apply(rule nth_equalityI,simp,simp) apply(force simp add:length_Suc_conv) apply(rule allI,rule impI) apply(erule_tac x="Suc j"and P="\j. H j \ (I j \ J j)" for H I J in allE,simp) apply(erule disjE) apply clarify apply(rule_tac x=i in exI,simp) apply(rule conjI) apply(erule_tac x=i and P="\i. H i \ J i \etran" for H J in allE, erule impE, assumption) apply(erule etranE,simp) apply(erule_tac x=i in allE, erule impE, assumption,
erule_tac x=1 and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE,simp) apply(rule nth_tl_if) apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply simp apply(erule tl_zero,force) apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply clarify apply(erule_tac x=l and P="\i. H i \ J i \etran" for H J in allE, erule impE, assumption) apply(erule etranE,simp) apply(erule_tac x=l in allE, erule impE, assumption,
erule_tac x=1 and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE,simp) apply(rule nth_tl_if) apply(erule_tac x=l and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply simp apply(rule tl_zero,force) apply force apply(erule_tac x=l and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply(rule disjI2) apply simp apply clarify apply(case_tac j,simp) apply(rule tl_zero) apply(erule_tac x=i and P="\i. H i \ J i \etran" for H J in allE, erule impE, assumption) apply(erule_tac x=i and P="\i. H i \ J i \etran" for H J in allE, erule impE, assumption) apply(force elim:etranE intro:Env) apply force apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply simp apply(rule tl_zero) apply(rule tl_zero,force) apply force apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply force apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) done
lemma aux_onlyif [rule_format]: "\xs s. (xs, s)#ys \ par_cptn \
(\<exists>clist. (length clist = length xs) \<and>
(xs, s)#ys \<propto> map (\<lambda>i. (fst i,s)#(snd i)) (zip xs clist) \<and>
(\<forall>i<length xs. (xs!i,s)#(clist!i) \<in> cptn))"
supply [[simproc del: defined_all]] apply(induct ys) apply(clarify) apply(rule_tac x="map (\i. []) [0.. apply(simp add: conjoin_def same_length_def same_state_def same_program_def compat_label_def) apply(rule conjI) apply(rule nth_equalityI,simp,simp) apply(force intro: cptn.intros) apply(clarify) apply(erule par_cptn.cases,simp) apply simp apply(erule_tac x="xs"in allE) apply(erule_tac x="t"in allE,simp) apply clarify apply(rule_tac x="(map (\j. (P!j, t)#(clist!j)) [0.. apply(rule conjI) prefer 2 apply clarify apply(rule CptnEnv,simp) apply(simp add:conjoin_def same_length_def same_state_def) apply (rule conjI) apply clarify apply(case_tac j,simp,simp) apply(rule conjI) apply(simp add:same_program_def) apply clarify apply(case_tac j,simp) apply(rule nth_equalityI,simp,simp) apply simp apply(rule nth_equalityI,simp,simp) apply(simp add:compat_label_def) apply clarify apply(case_tac j,simp) apply(simp add:ParEnv) apply clarify apply(simp add:Env) apply simp apply(erule_tac x=nat in allE,erule impE, assumption) apply(erule disjE,simp) apply clarify apply(rule_tac x=i in exI,simp) apply force apply(erule par_ctran.cases,simp) apply(erule_tac x="Ps[i:=r]"in allE) apply(erule_tac x="ta"in allE,simp) apply clarify apply(rule_tac x="(map (\j. (Ps!j, ta)#(clist!j)) [0.. apply(rule conjI) prefer 2 apply clarify apply(case_tac "i=ia",simp) apply(erule CptnComp) apply(erule_tac x=ia and P="\j. H j \ (I j \ cptn)" for H I in allE,simp) apply simp apply(erule_tac x=ia in allE) apply(rule CptnEnv,simp) apply(simp add:conjoin_def) apply (rule conjI) apply(simp add:same_length_def) apply clarify apply(case_tac "i=ia",simp,simp) apply(rule conjI) apply(simp add:same_state_def) apply clarify apply(case_tac j, simp, simp (no_asm_simp)) apply(case_tac "i=ia",simp,simp) apply(rule conjI) apply(simp add:same_program_def) apply clarify apply(case_tac j,simp) apply(rule nth_equalityI,simp,simp) apply simp apply(rule nth_equalityI,simp,simp) apply(erule_tac x=nat and P="\j. H j \ (fst (a j))=((b j))" for H a b in allE) apply(case_tac nat) apply clarify apply(case_tac "i=ia",simp,simp) apply clarify apply(case_tac "i=ia",simp,simp) apply(simp add:compat_label_def) apply clarify apply(case_tac j) apply(rule conjI,simp) apply(erule ParComp,assumption) apply clarify apply(rule_tac x=i in exI,simp) apply clarify apply(rule Env) apply simp apply(erule_tac x=nat and P="\j. H j \ (P j \ Q j)" for H P Q in allE,simp) apply(erule disjE) apply clarify apply(rule_tac x=ia in exI,simp) apply(rule conjI) apply(case_tac "i=ia",simp,simp) apply clarify apply(case_tac "i=l",simp) apply(case_tac "l=ia",simp,simp) apply(erule_tac x=l in allE,erule impE,assumption,erule impE, assumption,simp) apply simp apply(erule_tac x=l in allE,erule impE,assumption,erule impE, assumption,simp) apply clarify apply(erule_tac x=ia and P="\j. H j \ (P j)\etran" for H P in allE, erule impE, assumption) apply(case_tac "i=ia",simp,simp) done
lemma one_iff_aux: "xs\[] \ (\ys. ((xs, s)#ys \ par_cptn) =
(\<exists>clist. length clist= length xs \<and>
((xs, s)#ys \<propto> map (\<lambda>i. (fst i,s)#(snd i)) (zip xs clist)) \<and>
(\<forall>i<length xs. (xs!i,s)#(clist!i) \<in> cptn))) =
(par_cp (xs) s = {c. \<exists>clist. (length clist)=(length xs) \<and>
(\<forall>i<length clist. (clist!i) \<in> cp(xs!i) s) \<and> c \<propto> clist})" apply (rule iffI) apply(rule subset_antisym) apply(rule subsetI) apply(clarify) apply(simp add:par_cp_def cp_def) apply(case_tac x) apply(force elim:par_cptn.cases) apply simp apply(rename_tac a list) apply(erule_tac x="list"in allE) apply clarify apply simp apply(rule_tac x="map (\i. (fst i, s) # snd i) (zip xs clist)" in exI,simp) apply(rule subsetI) apply(clarify) apply(case_tac x) apply(erule_tac x=0 in allE) apply(simp add:cp_def conjoin_def same_length_def same_program_def same_state_def compat_label_def) apply clarify apply(erule cptn.cases,force,force,force) apply(simp add:par_cp_def conjoin_def same_length_def same_program_def same_state_def compat_label_def) apply clarify apply(erule_tac x=0 and P="\j. H j \ (length (s j) = t)" for H s t in all_dupE) apply(subgoal_tac "a = xs") apply(subgoal_tac "b = s",simp) prefer 3 apply(erule_tac x=0 and P="\j. H j \ (fst (s j))=((t j))" for H s t in allE) apply (simp add:cp_def) apply(rule nth_equalityI,simp,simp) prefer 2 apply(erule_tac x=0 in allE) apply (simp add:cp_def) apply(erule_tac x=0 and P="\j. H j \ (\i. T i \ (snd (d j i))=(snd (e j i)))" for H T d e in allE,simp) apply(erule_tac x=0 and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE,simp) apply(erule_tac x=list in allE) apply(rule_tac x="map tl clist"in exI,simp) apply(rule conjI) apply clarify apply(case_tac j,simp) apply(erule_tac x=i in allE, erule impE, assumption,
erule_tac x="0"and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE,simp) apply(erule_tac x=i in allE, erule impE, assumption,
erule_tac x="Suc nat"and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE) apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!i",simp,simp) apply(rule conjI) apply clarify apply(rule nth_equalityI,simp,simp) apply(case_tac j) apply clarify apply(erule_tac x=i in allE) apply(simp add:cp_def) apply clarify apply simp apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!i",simp,simp) apply(thin_tac "H = (\i. J i)" for H J) apply(rule conjI) apply clarify apply(erule_tac x=j in allE,erule impE, assumption,erule disjE) apply clarify apply(rule_tac x=i in exI,simp) apply(case_tac j,simp) apply(rule conjI) apply(erule_tac x=i in allE) apply(simp add:cp_def) apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!i",simp,simp) apply clarify apply(erule_tac x=l in allE) apply(erule_tac x=l and P="\j. H j \ I j \ J j" for H I J in allE) apply clarify apply(simp add:cp_def) apply(erule_tac x=l and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!l",simp,simp) apply simp apply(rule conjI) apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!i",simp,simp) apply clarify apply(erule_tac x=l and P="\j. H j \ I j \ J j" for H I J in allE) apply(erule_tac x=l and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!l",simp,simp) apply clarify apply(erule_tac x=i in allE) apply(simp add:cp_def) apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!i",simp) apply(rule nth_tl_if,simp,simp) apply(erule_tac x=i and P="\j. H j \ (P j)\etran" for H P in allE, erule impE, assumption,simp) apply(simp add:cp_def) apply clarify apply(rule nth_tl_if) apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!i",simp,simp) apply force apply force apply clarify apply(rule iffI) apply(simp add:par_cp_def) apply(erule_tac c="(xs, s) # ys"in equalityCE) apply simp apply clarify apply(rule_tac x="map tl clist"in exI) apply simp apply (rule conjI) apply(simp add:conjoin_def cp_def) apply(rule conjI) apply clarify apply(unfold same_length_def) apply clarify apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE,simp) apply(rule conjI) apply(simp add:same_state_def) apply clarify apply(erule_tac x=i in allE, erule impE, assumption,
erule_tac x=j and P="\j. H j \ (snd (d j))=(snd (e j))" for H d e in allE) apply(case_tac j,simp) apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!i",simp,simp) apply(rule conjI) apply(simp add:same_program_def) apply clarify apply(rule nth_equalityI,simp,simp) apply(case_tac j,simp) apply clarify apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!i",simp,simp) apply clarify apply(simp add:compat_label_def) apply(rule allI,rule impI) apply(erule_tac x=j in allE,erule impE, assumption) apply(erule disjE) apply clarify apply(rule_tac x=i in exI,simp) apply(rule conjI) apply(erule_tac x=i in allE) apply(case_tac j,simp) apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!i",simp,simp) apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!i",simp,simp) apply clarify apply(erule_tac x=l and P="\j. H j \ I j \ J j" for H I J in allE) apply(erule_tac x=l and P="\j. H j \ (length (s j) = t)" for H s t in allE) apply(case_tac "clist!l",simp,simp) apply(erule_tac x=l in allE,simp) apply(rule disjI2) apply clarify apply(rule tl_zero) apply(case_tac j,simp,simp) apply(rule tl_zero,force) apply force apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply force apply(erule_tac x=i and P="\j. H j \ (length (s j) = t)" for H s t in allE,force) apply clarify apply(erule_tac x=i in allE) apply(simp add:cp_def) apply(rule nth_tl_if) apply(simp add:conjoin_def) apply clarify apply(simp add:same_length_def) apply(erule_tac x=i in allE,simp) apply simp apply simp apply simp apply clarify apply(erule_tac c="(xs, s) # ys"in equalityCE) apply(simp add:par_cp_def) apply simp apply(erule_tac x="map (\i. (fst i, s) # snd i) (zip xs clist)" in allE) apply simp apply clarify apply(simp add:cp_def) done
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.