diff -r ca4e9eb8d576 -r 7c89d3f6923e thys/Positions.thy --- a/thys/Positions.thy Tue Jun 27 08:59:11 2017 +0100 +++ b/thys/Positions.thy Tue Jun 27 13:15:55 2017 +0100 @@ -3,6 +3,9 @@ imports "Lexer" begin + +section {* Position in values *} + fun at :: "val \ nat list \ val" where @@ -34,8 +37,6 @@ apply(auto)[1] using less_Suc_eq_0_disj by auto - - lemma Pos_empty: shows "[] \ Pos v" by (induct v rule: Pos.induct)(auto) @@ -89,199 +90,10 @@ apply(auto simp add: less_Suc_eq_0_disj pflat_len_simps) done -lemma Two_to_Three_aux: - assumes "p \ Pos v1 \ Pos v2" "pflat_len v1 p = pflat_len v2 p" - shows "p \ Pos v1 \ Pos v2" -using assms -apply(simp add: pflat_len_def) -apply(auto split: if_splits) -apply (smt inlen_bigger)+ -done - -lemma Two_to_Three_orig: - assumes "\p \ Pos v1 \ Pos v2. pflat_len v1 p = pflat_len v2 p" - shows "Pos v1 = Pos v2" -using assms -by (metis Un_iff inlen_bigger neg_0_le_iff_le not_one_le_zero pflat_len_def subsetI subset_antisym) - -lemma inj_image_eq_if: - assumes "f ` A = f ` B" "inj f" - shows "A = B" -using assms -by (simp add: inj_image_eq_iff) - -lemma Three_to_One: - assumes "\ v1 : r" "\ v2 : r" - and "Pos v1 = Pos v2" - shows "v1 = v2" -using assms -apply(induct v1 arbitrary: r v2 rule: Pos.induct) -(* ZERO *) -apply(erule Prf.cases) -apply(simp_all)[7] -(* ONE *) -apply(erule Prf.cases) -apply(simp_all)[7] -(* CHAR *) -apply(erule Prf.cases) -apply(simp_all)[7] -apply(erule Prf.cases) -apply(simp_all)[7] -(* ALT Left *) -apply(erule Prf.cases) -apply(simp_all)[7] -apply(erule Prf.cases) -apply(simp_all)[7] -apply(clarify) -apply(simp add: insert_ident) -apply(drule_tac x="r1a" in meta_spec) -apply(drule_tac x="v1a" in meta_spec) -apply(simp) -apply(drule_tac meta_mp) -apply(rule subset_antisym) -apply(auto)[3] -(* ALT Right *) -apply(clarify) -apply(simp add: insert_ident) -using Pos_empty apply blast -apply(erule Prf.cases) -apply(simp_all)[7] -apply(erule Prf.cases) -apply(simp_all)[7] -apply(clarify) -apply(simp add: insert_ident) -using Pos_empty apply blast -apply(simp add: insert_ident) -apply(drule_tac x="r2a" in meta_spec) -apply(drule_tac x="v2b" in meta_spec) -apply(simp) -apply(drule_tac meta_mp) -apply(rule subset_antisym) -apply(auto)[3] -apply(erule Prf.cases) -apply(simp_all)[7] -(* SEQ *) -apply(erule Prf.cases) -apply(simp_all)[7] -apply(simp add: insert_ident) -apply(clarify) -apply(drule_tac x="r1a" in meta_spec) -apply(drule_tac x="r2a" in meta_spec) -apply(drule_tac x="v1b" in meta_spec) -apply(drule_tac x="v2c" in meta_spec) -apply(simp) -apply(drule_tac meta_mp) -apply(rule_tac f="op # 0" in inj_image_eq_if) -apply(simp add: Setcompr_eq_image) -apply(rule subset_antisym) -apply(rule subsetI) -apply (metis (mono_tags, hide_lams) Un_iff image_iff n_not_Suc_n nth_Cons_0) -apply(rule subsetI) -apply (metis (mono_tags, hide_lams) Un_iff image_iff n_not_Suc_n nth_Cons_0) -apply(simp) -apply(simp) -apply(drule_tac meta_mp) -apply(rule_tac f="op # (Suc 0)" in inj_image_eq_if) -apply(simp add: Setcompr_eq_image) -apply(rule subset_antisym) -apply(rule subsetI) -apply (metis (mono_tags, hide_lams) Un_iff image_iff n_not_Suc_n nth_Cons_0) -apply(rule subsetI) -apply (metis (mono_tags, hide_lams) Un_iff image_iff n_not_Suc_n nth_Cons_0) -apply(simp) -apply(simp) -(* STAR empty *) -apply(erule Prf.cases) -apply(simp_all)[7] -apply(erule Prf.cases) -apply(simp_all)[7] -apply(auto)[1] -using Pos_empty apply fastforce -(* STAR non-empty *) -apply(simp) -apply(erule Prf.cases) -apply(simp_all del: Pos.simps) -apply(erule Prf.cases) -apply(simp_all del: Pos.simps) -apply(simp) -apply(auto)[1] -using Pos_empty apply fastforce -apply(clarify) -apply(simp) -apply(simp add: insert_ident) -apply(drule_tac x="rb" in meta_spec) -apply(drule_tac x="STAR rb" in meta_spec) -apply(drule_tac x="vb" in meta_spec) -apply(drule_tac x="Stars vsb" in meta_spec) -apply(simp) -apply(drule_tac meta_mp) -apply(rule_tac f="op # 0" in inj_image_eq_if) -apply(simp add: Setcompr_eq_image) -apply(rule subset_antisym) -apply(rule subsetI) -apply (smt Un_iff image_iff list.inject mem_Collect_eq nat.discI) -apply(rule subsetI) -using list.inject apply blast -apply(simp) -apply(simp) -apply(drule_tac meta_mp) -apply(rule subset_antisym) -apply(rule subsetI) -apply(case_tac vsa) -apply(simp) -apply (simp add: Pos_empty) -apply(simp) -apply(clarify) -apply(erule disjE) -apply (simp add: Pos_empty) -apply(erule disjE) -apply(clarify) -apply(subgoal_tac - "Suc 0 # ps \ {Suc n # ps |n ps. n = 0 \ ps \ Pos a \ (\na. n = Suc na \ na # ps \ Pos (Stars list))}") -prefer 2 -apply blast -apply(subgoal_tac "Suc 0 # ps \ {0 # ps |ps. ps \ Pos vb} \ {Suc n # ps |n ps. n # ps \ Pos (Stars vsb)}") -prefer 2 -apply (metis (no_types, lifting) Un_iff) -apply(simp) -apply(clarify) -apply(subgoal_tac - "Suc (Suc n) # ps \ {Suc n # ps |n ps. n = 0 \ ps \ Pos a \ (\na. n = Suc na \ na # ps \ Pos (Stars list))}") -prefer 2 -apply blast -apply(subgoal_tac "Suc (Suc n) # ps \ {0 # ps |ps. ps \ Pos vb} \ {Suc n # ps |n ps. n # ps \ Pos (Stars vsb)}") -prefer 2 -apply (metis (no_types, lifting) Un_iff) -apply(simp) -apply(rule subsetI) -apply(case_tac vsb) -apply(simp) -apply (simp add: Pos_empty) -apply(simp) -apply(clarify) -apply(erule disjE) -apply (simp add: Pos_empty) -apply(erule disjE) -apply(clarify) -apply(subgoal_tac - "Suc 0 # ps \ {Suc n # ps |n ps. n = 0 \ ps \ Pos a \ (\na. n = Suc na \ na # ps \ Pos (Stars list))}") -prefer 2 -apply(simp) -apply(subgoal_tac "Suc 0 # ps \ {Suc n # ps |n ps. n # ps \ Pos (Stars vsa)}") -apply blast -using list.inject apply blast -apply(clarify) -apply(subgoal_tac - "Suc (Suc n) # ps \ {Suc n # ps |n ps. n = 0 \ ps \ Pos a \ (\na. n = Suc na \ na # ps \ Pos (Stars list))}") -prefer 2 -apply(simp) -apply(subgoal_tac "Suc (Suc n) # ps \ {0 # ps |ps. ps \ Pos vb} \ {Suc n # ps |n ps. n # ps \ Pos (Stars vsa)}") -prefer 2 -apply (metis (no_types, lifting) Un_iff) -apply(simp (no_asm_use)) -apply(simp) -done - +lemma outside_lemma: + assumes "p \ Pos v1 \ Pos v2" + shows "pflat_len v1 p = pflat_len v2 p" +using assms by (auto simp add: pflat_len_def) section {* Orderings *} @@ -346,16 +158,16 @@ apply(auto) done -lemma outside_lemma: - assumes "p \ Pos v1 \ Pos v2" - shows "pflat_len v1 p = pflat_len v2 p" -using assms -apply(auto simp add: pflat_len_def) -done + + + +section {* Ordering of values according to Okui & Suzuki *} + definition val_ord:: "val \ nat list \ val \ bool" ("_ \val _ _") where - "v1 \val p v2 \ (p \ Pos v1 \ pflat_len v1 p > pflat_len v2 p \ + "v1 \val p v2 \ (p \ Pos v1 \ + pflat_len v1 p > pflat_len v2 p \ (\q \ Pos v1 \ Pos v2. q \lex p \ pflat_len v1 q = pflat_len v2 q))" @@ -381,6 +193,7 @@ apply(rule_tac val_ord_shorterI) by (metis append_eq_conv_conj le_less_linear prefix_list_def sprefix_list_def take_all) + lemma val_ord_LeftI: assumes "v :\val v'" "flat v = flat v'" shows "(Left v) :\val (Left v')" @@ -447,41 +260,6 @@ apply(simp add: pflat_len_simps) done -lemma val_ord_StarsI: - assumes "v1 :\val v2" "flat (Stars (v1#vs1)) = flat (Stars (v2#vs2))" - shows "(Stars (v1#vs1)) :\val (Stars (v2#vs2))" -using assms(1) -apply(subst (asm) val_ord_ex_def) -apply(subst (asm) val_ord_def) -apply(clarify) -apply(subst val_ord_ex_def) -apply(subst val_ord_def) -apply(rule_tac x="0#p" in exI) -apply(simp add: pflat_len_Stars_simps pflat_len_simps) -using assms(2) -apply(simp add: pflat_len_simps intlen_append) -apply(auto simp add: pflat_len_Stars_simps pflat_len_simps) -done - -lemma val_ord_StarsI2: - assumes "(Stars vs1) :\val (Stars vs2)" "flat (Stars vs1) = flat (Stars vs2)" - shows "(Stars (v#vs1)) :\val (Stars (v#vs2))" -using assms(1) -apply(subst (asm) val_ord_ex_def) -apply(subst (asm) val_ord_def) -apply(clarify) -apply(subst val_ord_ex_def) -apply(subst val_ord_def) -apply(case_tac p) -apply(simp add: pflat_len_simps) -apply(rule_tac x="[]" in exI) -apply(simp add: pflat_len_Stars_simps pflat_len_simps intlen_append) -apply(rule_tac x="Suc a#list" in exI) -apply(simp add: pflat_len_Stars_simps pflat_len_simps) -using assms(2) -apply(simp add: pflat_len_simps intlen_append) -apply(auto simp add: pflat_len_Stars_simps pflat_len_simps) -done lemma val_ord_SeqI1: assumes "v1 :\val v1'" "flat (Seq v1 v2) = flat (Seq v1' v2')" @@ -531,126 +309,143 @@ apply(auto simp add: pflat_len_simps) done - -lemma val_ord_SEQE_0: - assumes "(Seq v1 v2) \val 0#p (Seq v1' v2')" - shows "v1 \val p v1'" -using assms(1) -apply(simp add: val_ord_def val_ord_ex_def) -apply(auto)[1] -apply(simp add: pflat_len_simps) -apply(simp add: val_ord_def pflat_len_def) -apply(auto)[1] +lemma val_ord_SeqE: + assumes "(Seq v1 v2) :\val (Seq v1' v2')" + shows "v1 :\val v1' \ v2 :\val v2'" +using assms +apply(simp add: val_ord_ex_def) +apply(erule exE) +apply(case_tac p) +apply(simp add: val_ord_def) +apply(auto simp add: pflat_len_simps intlen_append)[1] +apply(rule_tac x="[]" in exI) +apply(drule_tac x="[]" in spec) +apply(simp add: Pos_empty pflat_len_simps) +apply(case_tac a) +apply(rule disjI1) +apply(simp add: val_ord_def) +apply(auto simp add: pflat_len_simps intlen_append)[1] +apply(rule_tac x="list" in exI) +apply(simp) +apply(rule ballI) +apply(rule impI) apply(drule_tac x="0#q" in bspec) apply(simp) -apply(simp) -apply(drule_tac x="0#q" in bspec) -apply(simp) +apply(simp add: pflat_len_simps) +apply(case_tac nat) +apply(rule disjI2) +apply(simp add: val_ord_def) +apply(auto simp add: pflat_len_simps intlen_append) +apply(rule_tac x="list" in exI) +apply(simp add: Pos_empty) +apply(rule ballI) +apply(rule impI) +apply(drule_tac x="Suc 0#q" in bspec) apply(simp) -apply(drule_tac x="0#q" in bspec) -apply(simp) -apply(simp) -apply(simp add: val_ord_def pflat_len_def) -apply(auto)[1] +apply(simp add: pflat_len_simps) +apply(simp add: val_ord_def) done -lemma val_ord_SEQE_1: - assumes "(Seq v1 v2) \val (Suc 0)#p (Seq v1' v2')" - shows "v2 \val p v2'" +lemma val_ord_StarsI: + assumes "v1 :\val v2" "flat (Stars (v1#vs1)) = flat (Stars (v2#vs2))" + shows "(Stars (v1#vs1)) :\val (Stars (v2#vs2))" using assms(1) -apply(simp add: val_ord_def pflat_len_def) -apply(auto)[1] -apply(drule_tac x="1#q" in bspec) -apply(simp) -apply(simp) -apply(drule_tac x="1#q" in bspec) -apply(simp) -apply(simp) -apply(drule_tac x="1#q" in bspec) -apply(simp) -apply(auto)[1] -apply(drule_tac x="1#q" in bspec) -apply(simp) -apply(auto) -apply(simp add: intlen_append) -apply force -apply(simp add: intlen_append) -apply force -apply(simp add: intlen_append) -apply force -apply(simp add: intlen_append) -apply force +apply(subst (asm) val_ord_ex_def) +apply(subst (asm) val_ord_def) +apply(clarify) +apply(subst val_ord_ex_def) +apply(subst val_ord_def) +apply(rule_tac x="0#p" in exI) +apply(simp add: pflat_len_Stars_simps pflat_len_simps) +using assms(2) +apply(simp add: pflat_len_simps intlen_append) +apply(auto simp add: pflat_len_Stars_simps pflat_len_simps) done -lemma val_ord_SEQE_2: - assumes "(Seq v1 v2) \val (Suc 0)#p (Seq v1' v2')" - and "\ v1 : r" "\ v1' : r" - shows "v1 = v1'" -proof - - have "\q \ Pos v1 \ Pos v1'. 0#q \lex Suc 0#p \ pflat_len v1 q = pflat_len v1' q" - using assms(1) - apply(simp add: val_ord_def) - apply(rule ballI) - apply(clarify) - apply(drule_tac x="0#q" in bspec) - apply(auto)[1] - apply(simp add: pflat_len_simps) - done - then have "Pos v1 = Pos v1'" - apply(rule_tac Two_to_Three_orig) - apply(rule ballI) - apply(drule_tac x="pa" in bspec) - apply(simp) - apply(simp) - done - then show "v1 = v1'" - apply(rule_tac Three_to_One) - apply(rule assms(2)) - apply(rule assms(3)) - apply(simp) - done -qed - -lemma val_ord_SEQ: - assumes "(Seq v1 v2) :\val (Seq v1' v2')" - and "flat (Seq v1 v2) = flat (Seq v1' v2')" - and "\ v1 : r" "\ v1' : r" - shows "(v1 :\val v1') \ (v1 = v1' \ (v2 :\val v2'))" +lemma val_ord_StarsI2: + assumes "(Stars vs1) :\val (Stars vs2)" "flat (Stars vs1) = flat (Stars vs2)" + shows "(Stars (v#vs1)) :\val (Stars (v#vs2))" using assms(1) apply(subst (asm) val_ord_ex_def) -apply(erule exE) -apply(simp only: val_ord_def) +apply(subst (asm) val_ord_def) +apply(clarify) +apply(subst val_ord_ex_def) +apply(subst val_ord_def) +apply(case_tac p) +apply(simp add: pflat_len_simps) +apply(rule_tac x="[]" in exI) +apply(simp add: pflat_len_Stars_simps pflat_len_simps intlen_append) +apply(rule_tac x="Suc a#list" in exI) +apply(simp add: pflat_len_Stars_simps pflat_len_simps) +using assms(2) +apply(simp add: pflat_len_simps intlen_append) +apply(auto simp add: pflat_len_Stars_simps pflat_len_simps) +done + +lemma val_ord_Stars_appendI: + assumes "Stars vs1 :\val Stars vs2" "flat (Stars vs1) = flat (Stars vs2)" + shows "Stars (vs @ vs1) :\val Stars (vs @ vs2)" +using assms +apply(induct vs) apply(simp) -apply(erule conjE)+ -apply(erule disjE) -prefer 2 -apply(erule disjE) -apply(erule exE) -apply(rule disjI1) -apply(simp) -apply(subst val_ord_ex_def) -apply(rule_tac x="ps" in exI) -apply(rule val_ord_SEQE_0) -apply(simp add: val_ord_def) +apply(simp add: val_ord_StarsI2) +done + +lemma val_ord_StarsE2: + assumes "Stars (v # vs1) :\val Stars (v # vs2)" + shows "Stars vs1 :\val Stars vs2" +using assms +apply(subst (asm) val_ord_ex_def) apply(erule exE) -apply(rule disjI2) -apply(rule conjI) -thm val_ord_SEQE_1 -apply(rule_tac val_ord_SEQE_2) -apply(auto simp add: val_ord_def)[3] -apply(rule assms(3)) -apply(rule assms(4)) +apply(case_tac p) +apply(simp) +apply(simp add: val_ord_def pflat_len_simps intlen_append) apply(subst val_ord_ex_def) -apply(rule_tac x="ps" in exI) -apply(rule_tac val_ord_SEQE_1) -apply(auto simp add: val_ord_def)[1] +apply(rule_tac x="[]" in exI) +apply(simp add: val_ord_def pflat_len_simps Pos_empty) +apply(simp) +apply(case_tac a) +apply(clarify) +apply(auto simp add: pflat_len_simps val_ord_def pflat_len_def)[1] +apply(clarify) +apply(simp add: val_ord_ex_def) +apply(rule_tac x="nat#list" in exI) +apply(auto simp add: val_ord_def pflat_len_simps intlen_append)[1] +apply(case_tac q) +apply(simp add: val_ord_def pflat_len_simps intlen_append) +apply(clarify) +apply(drule_tac x="Suc a # lista" in bspec) +apply(simp) +apply(auto simp add: val_ord_def pflat_len_simps intlen_append)[1] +apply(case_tac q) +apply(simp add: val_ord_def pflat_len_simps intlen_append) +apply(clarify) +apply(drule_tac x="Suc a # lista" in bspec) apply(simp) -using assms(2) -apply(simp add: pflat_len_simps) +apply(auto simp add: val_ord_def pflat_len_simps intlen_append)[1] +done + +lemma val_ord_Stars_appendE: + assumes "Stars (vs @ vs1) :\val Stars (vs @ vs2)" + shows "Stars vs1 :\val Stars vs2" +using assms +apply(induct vs) +apply(simp) +apply(simp add: val_ord_StarsE2) +done + +lemma val_ord_Stars_append_eq: + assumes "flat (Stars vs1) = flat (Stars vs2)" + shows "Stars (vs @ vs1) :\val Stars (vs @ vs2) \ Stars vs1 :\val Stars vs2" +using assms +apply(rule_tac iffI) +apply(erule val_ord_Stars_appendE) +apply(rule val_ord_Stars_appendI) +apply(auto) done -lemma val_ord_ex_trans: +lemma val_ord_trans: assumes "v1 :\val v2" "v2 :\val v3" shows "v1 :\val v3" using assms @@ -679,7 +474,10 @@ apply (metis (no_types, hide_lams) lex_trans outside_lemma) apply(simp add: val_ord_def) apply(auto)[1] -by (metis IntE Two_to_Three_aux UnCI lex_trans outside_lemma) +by (smt inlen_bigger lex_trans outside_lemma pflat_len_def) + + +section {* CPT and CPTpre *} inductive @@ -697,10 +495,38 @@ assumes "\ v : r" shows "\ v : r" using assms -apply(induct) -apply(auto intro: Prf.intros) +by (induct) (auto intro: Prf.intros) + +lemma CPrf_stars: + assumes "\ Stars vs : STAR r" + shows "\v \ set vs. flat v \ [] \ \ v : r" +using assms +apply(induct vs) +apply(auto) +apply(erule CPrf.cases) +apply(simp_all) +apply(erule CPrf.cases) +apply(simp_all) +apply(erule CPrf.cases) +apply(simp_all) +apply(erule CPrf.cases) +apply(simp_all) done +lemma CPrf_Stars_appendE: + assumes "\ Stars (vs1 @ vs2) : STAR r" + shows "\ Stars vs1 : STAR r \ \ Stars vs2 : STAR r" +using assms +apply(induct vs1 arbitrary: vs2) +apply(auto intro: CPrf.intros)[1] +apply(erule CPrf.cases) +apply(simp_all) +apply(auto intro: CPrf.intros) +done + +definition PT :: "rexp \ string \ val set" +where "PT r s \ {v. flat v = s \ \ v : r}" + definition "CPT r s = {v. flat v = s \ \ v : r}" @@ -709,9 +535,7 @@ lemma CPT_CPTpre_subset: shows "CPT r s \ CPTpre r s" -apply(auto simp add: CPT_def CPTpre_def) -done - +by(auto simp add: CPT_def CPTpre_def) lemma CPTpre_subsets: "CPTpre ZERO s = {}" @@ -1096,41 +920,7 @@ using assms apply(rule_tac Posix_val_ord) apply(assumption) -apply(simp add: CPTpre_def CPT_def) -done - - -lemma STAR_val_ord: - assumes "Stars (v1 # vs1) \val (Suc p # ps) Stars (v2 # vs2)" "flat v1 = flat v2" - shows "(Stars vs1) \val (p # ps) (Stars vs2)" -using assms(1,2) -apply - -apply(simp(no_asm) add: val_ord_def) -apply(rule conjI) -apply(simp add: val_ord_def) -apply(rule conjI) -apply(simp add: val_ord_def) -apply(auto simp add: pflat_len_simps)[1] -apply(rule ballI) -apply(rule impI) -apply(simp add: val_ord_def pflat_len_simps intlen_append) -apply(clarify) -apply(case_tac q) -apply(simp add: val_ord_def pflat_len_simps intlen_append) -apply(clarify) -apply(erule disjE) -prefer 2 -apply(drule_tac x="Suc a # list" in bspec) -apply(simp) -apply(drule mp) -apply(simp) -apply(simp add: val_ord_def pflat_len_simps intlen_append) -apply(drule_tac x="Suc a # list" in bspec) -apply(simp) -apply(drule mp) -apply(simp) -apply(simp add: val_ord_def pflat_len_simps intlen_append) -done +using CPT_CPTpre_subset by auto lemma Posix_val_ord_reverse: @@ -1138,89 +928,7 @@ shows "\(\v2 \ CPT r s. v2 :\val v1)" using assms by (metis Posix_val_ord_stronger less_irrefl val_ord_def - val_ord_ex1_def val_ord_ex_def val_ord_ex_trans) - - -lemma STAR_val_ord_ex: - assumes "Stars (v # vs1) :\val Stars (v # vs2)" - shows "Stars vs1 :\val Stars vs2" -using assms -apply(subst (asm) val_ord_ex_def) -apply(erule exE) -apply(case_tac p) -apply(simp) -apply(simp add: val_ord_def pflat_len_simps intlen_append) -apply(subst val_ord_ex_def) -apply(rule_tac x="[]" in exI) -apply(simp add: val_ord_def pflat_len_simps Pos_empty) -apply(simp) -apply(case_tac a) -apply(clarify) -prefer 2 -using STAR_val_ord val_ord_ex_def apply blast -apply(auto simp add: pflat_len_simps val_ord_def pflat_len_def)[1] -done - -lemma STAR_val_ord_exI: - assumes "Stars vs1 :\val Stars vs2" "flat (Stars vs1) = flat (Stars vs2)" - shows "Stars (vs @ vs1) :\val Stars (vs @ vs2)" -using assms -apply(induct vs) -apply(simp) -apply(simp) -apply(rule val_ord_StarsI2) -apply(simp) -apply(simp) -done - -lemma STAR_val_ord_ex_append: - assumes "Stars (vs @ vs1) :\val Stars (vs @ vs2)" - shows "Stars vs1 :\val Stars vs2" -using assms -apply(induct vs) -apply(simp) -apply(simp) -apply(drule STAR_val_ord_ex) -apply(simp) -done - -lemma STAR_val_ord_ex_append_eq: - assumes "flat (Stars vs1) = flat (Stars vs2)" - shows "Stars (vs @ vs1) :\val Stars (vs @ vs2) \ Stars vs1 :\val Stars vs2" -using assms -apply(rule_tac iffI) -apply(erule STAR_val_ord_ex_append) -apply(rule STAR_val_ord_exI) -apply(auto) -done - - -lemma CPrf_stars: - assumes "\ Stars vs : STAR r" - shows "\v \ set vs. flat v \ [] \ \ v : r" -using assms -apply(induct vs) -apply(auto) -apply(erule CPrf.cases) -apply(simp_all) -apply(erule CPrf.cases) -apply(simp_all) -apply(erule CPrf.cases) -apply(simp_all) -apply(erule CPrf.cases) -apply(simp_all) -done - -definition PT :: "rexp \ string \ val set" -where "PT r s \ {v. flat v = s \ \ v : r}" - -lemma exists: - assumes "s \ (L r)\" - shows "\vs. concat (map flat vs) = s \ \ Stars vs : STAR r" -using assms -apply(drule_tac Star_string) -apply(auto) -by (metis L_flat_Prf2 Prf_Stars Star_val) + val_ord_ex1_def val_ord_ex_def val_ord_trans) lemma val_ord_Posix_Stars: @@ -1271,7 +979,7 @@ apply(simp) prefer 2 apply(simp) -using exists apply blast +using Star_values_exists apply blast prefer 2 apply(drule meta_mp) apply(erule CPrf.cases) @@ -1310,27 +1018,9 @@ using f6 f5 a4 by (metis (full_types) drop_eq_Nil val_ord_StarsI val_ord_ex_def val_ord_shorterI) qed -lemma Prf_Stars_append: - assumes "\ Stars vs1 : STAR r" "\ Stars vs2 : STAR r" - shows "\ Stars (vs1 @ vs2) : STAR r" -using assms -apply(induct vs1 arbitrary: vs2) -apply(auto intro: Prf.intros) -apply(erule Prf.cases) -apply(simp_all) -apply(auto intro: Prf.intros) -done + -lemma CPrf_Stars_appendE: - assumes "\ Stars (vs1 @ vs2) : STAR r" - shows "\ Stars vs1 : STAR r \ \ Stars vs2 : STAR r" -using assms -apply(induct vs1 arbitrary: vs2) -apply(auto intro: CPrf.intros)[1] -apply(erule CPrf.cases) -apply(simp_all) -apply(auto intro: CPrf.intros) -done + lemma val_ord_Posix: assumes "v1 \ CPT r s" "\(\v2 \ PT r s. v2 :\val v1)" @@ -1497,9 +1187,9 @@ apply(auto simp add: Prf_CPrf)[1] apply (metis CPrf_Stars_appendE CPrf_stars Prf_CPrf Prf_Stars list.set_intros(2) set_ConsD) apply(subgoal_tac "\ Stars ([v] @ pre @ v2 # post) :\val Stars ([v] @ pre @ va # post)") -apply(subst (asm) STAR_val_ord_ex_append_eq) +apply(subst (asm) val_ord_Stars_append_eq) apply(simp) -apply(subst (asm) STAR_val_ord_ex_append_eq) +apply(subst (asm) val_ord_Stars_append_eq) apply(simp) prefer 2 apply(simp)