# HG changeset patch # User Christian Urban # Date 1498755461 -3600 # Node ID 146b4817aebdc3cd7ce7631d27681d4fb727c8d5 # Parent 222ed43892ea1e71f6e511ae70d188c871c0c0ba updated diff -r 222ed43892ea -r 146b4817aebd thys/Lexer.thy --- a/thys/Lexer.thy Wed Jun 28 10:37:05 2017 +0100 +++ b/thys/Lexer.thy Thu Jun 29 17:57:41 2017 +0100 @@ -13,12 +13,12 @@ text {* Two Simple Properties about Sequential Composition *} -lemma seq_empty [simp]: +lemma Sequ_empty_string [simp]: shows "A ;; {[]} = A" and "{[]} ;; A = A" by (simp_all add: Sequ_def) -lemma seq_null [simp]: +lemma Sequ_empty [simp]: shows "A ;; {} = {}" and "{} ;; A = {}" by (simp_all add: Sequ_def) @@ -71,12 +71,14 @@ start[intro]: "[] \ A\" | step[intro]: "\s1 \ A; s2 \ A\\ \ s1 @ s2 \ A\" -lemma star_cases: +(* Arden's lemma *) + +lemma Star_cases: shows "A\ = {[]} \ A ;; A\" unfolding Sequ_def by (auto) (metis Star.simps) -lemma star_decomp: +lemma Star_decomp: assumes a: "c # x \ A\" shows "\a b. x = a @ b \ c # a \ A \ b \ A\" using a @@ -87,14 +89,14 @@ shows "Der c (A\) = (Der c A) ;; A\" proof - have "Der c (A\) = Der c ({[]} \ A ;; A\)" - by (simp only: star_cases[symmetric]) + by (simp only: Star_cases[symmetric]) also have "... = Der c (A ;; A\)" by (simp only: Der_union Der_empty) (simp) also have "... = (Der c A) ;; A\ \ (if [] \ A then Der c (A\) else {})" by simp also have "... = (Der c A) ;; A\" unfolding Sequ_def Der_def - by (auto dest: star_decomp) + by (auto dest: Star_decomp) finally show "Der c (A\) = (Der c A) ;; A\" . qed @@ -291,12 +293,14 @@ lemma L_flat_Prf1: - assumes "\ v : r" shows "flat v \ L r" + assumes "\ v : r" + shows "flat v \ L r" using assms by (induct)(auto simp add: Sequ_def) lemma L_flat_Prf2: - assumes "s \ L r" shows "\v. \ v : r \ flat v = s" + assumes "s \ L r" + shows "\v. \ v : r \ flat v = s" using assms apply(induct r arbitrary: s) apply(auto simp add: Sequ_def intro: Prf.intros) @@ -324,7 +328,6 @@ using assms apply(drule_tac Star_string) apply(auto) - by (metis L_flat_Prf2 Prf_Stars Star_val) diff -r 222ed43892ea -r 146b4817aebd thys/Positions.thy --- a/thys/Positions.thy Wed Jun 28 10:37:05 2017 +0100 +++ b/thys/Positions.thy Thu Jun 29 17:57:41 2017 +0100 @@ -55,6 +55,17 @@ by (induct xs arbitrary: ys) (auto) lemma intlen_length: + shows "intlen xs < intlen ys \ length xs < length ys" +apply(induct xs arbitrary: ys) +apply(auto) +apply(case_tac ys) +apply(simp_all) +apply (smt intlen_bigger) +(* HERE *) +oops + + +lemma intlen_length: assumes "length xs < length ys" shows "intlen xs < intlen ys" using assms @@ -185,6 +196,9 @@ where "v1 :\val v2 \ (\p. v1 \val p v2)" + + + definition val_ord_ex1:: "val \ val \ bool" ("_ :\val _") where "v1 :\val v2 \ v1 :\val v2 \ v1 = v2" @@ -219,6 +233,7 @@ 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')" @@ -501,6 +516,49 @@ apply(auto)[1] by (smt intlen_bigger lex_trans outside_lemma pflat_len_def) +lemma val_ord_irrefl: + assumes "v :\val v" + shows "False" +using assms +by(auto simp add: val_ord_ex_def val_ord_def) + +lemma val_ord_almost_trichotomous: + shows "v1 :\val v2 \ v2 :\val v1 \ (intlen (flat v1) = intlen (flat v2))" +apply(auto simp add: val_ord_ex_def) +apply(auto simp add: val_ord_def) +apply(rule_tac x="[]" in exI) +apply(auto simp add: Pos_empty pflat_len_simps) +apply(drule_tac x="[]" in spec) +apply(auto simp add: Pos_empty pflat_len_simps) +done + +lemma WW1: + assumes "v1 :\val v2" "v2 :\val v1" + shows "False" +using assms +apply(auto simp add: val_ord_ex_def val_ord_def) +using assms(1) assms(2) val_ord_irrefl val_ord_trans by blast + +lemma WW2: + assumes "\(v1 :\val v2)" + shows "v1 = v2 \ v2 :\val v1" +using assms +oops + +lemma val_ord_SeqE2: + assumes "(Seq v1 v2) :\val (Seq v1' v2')" + shows "v1 :\val v1' \ (v1 = v1' \ v2 :\val v2')" +using assms +apply(frule_tac val_ord_SeqE) +apply(erule disjE) +apply(simp) +apply(auto) +apply(case_tac "v1 :\val v1'") +apply(simp) +apply(auto simp add: val_ord_ex_def) +apply(case_tac "v1 = v1'") +apply(simp) +oops section {* CPT and CPTpre *} @@ -522,6 +580,62 @@ using assms by (induct) (auto intro: Prf.intros) +lemma pflat_len_equal_iff: + assumes "\ v1 : r" "\ v2 : r" + and "\p. pflat_len v1 p = pflat_len v2 p" + shows "v1 = v2" +using assms +apply(induct v1 r arbitrary: v2 rule: CPrf.induct) +apply(rotate_tac 4) +apply(erule CPrf.cases) +apply(simp_all)[7] +apply (metis pflat_len_simps(1) pflat_len_simps(2)) +apply(rotate_tac 2) +apply(erule CPrf.cases) +apply(simp_all)[7] +apply (metis pflat_len_simps(3)) +apply (metis intlen.simps(1) intlen_length length_greater_0_conv list.size(3) neg_0_le_iff_le not_less not_less_iff_gr_or_eq not_one_le_zero pflat_len_simps(3) pflat_len_simps(6) pflat_len_simps(9)) +apply(rotate_tac 2) +apply(erule CPrf.cases) +apply(simp_all)[7] +apply (metis intlen.simps(1) intlen_length length_greater_0_conv list.size(3) neg_0_le_iff_le not_less not_less_iff_gr_or_eq not_one_le_zero pflat_len_simps(3) pflat_len_simps(6) pflat_len_simps(9)) +apply (metis pflat_len_simps(5)) +apply(erule CPrf.cases) +apply(simp_all)[7] +apply(erule CPrf.cases) +apply(simp_all)[7] +apply(erule CPrf.cases) +apply(simp_all)[7] +apply (metis append_Cons flat.simps(6) flat.simps(7) intlen_length length_greater_0_conv neq_Nil_conv not_less_iff_gr_or_eq pflat_len_simps(9)) +apply(rotate_tac 5) +apply(erule CPrf.cases) +apply(simp_all)[7] +apply (metis append_Cons flat.simps(6) flat.simps(7) intlen_length length_greater_0_conv list.distinct(1) list.exhaust not_less_iff_gr_or_eq pflat_len_simps(9)) +apply(auto) +apply (metis pflat_len_simps(8)) +apply(subgoal_tac "v = va") +prefer 2 +apply (metis pflat_len_simps(8)) +apply(simp) +apply(rotate_tac 3) +apply(drule_tac x="Stars vsa" in meta_spec) +apply(simp) +apply(drule_tac meta_mp) +apply(rule allI) +apply(case_tac p) +apply(simp add: pflat_len_simps) +apply(drule_tac x="[]" in spec) +apply(simp add: pflat_len_simps intlen_append) +apply(drule_tac x="Suc a#list" in spec) +apply(simp add: pflat_len_simps intlen_append) +apply(simp) +done + +lemma val_ord_trichotomous_stronger: + assumes "\ v1 : r" "\ v2 : r" + shows "v1 :\val v2 \ v2 :\val v1 \ (v1 = v2)" +oops + lemma CPrf_stars: assumes "\ Stars vs : STAR r" shows "\v \ set vs. flat v \ [] \ \ v : r" diff -r 222ed43892ea -r 146b4817aebd thys/Sulzmann.thy --- a/thys/Sulzmann.thy Wed Jun 28 10:37:05 2017 +0100 +++ b/thys/Sulzmann.thy Thu Jun 29 17:57:41 2017 +0100 @@ -118,6 +118,10 @@ apply(simp) oops +lemma QQ: + shows "x \ (y::nat) \ x = y \ x < y" + by auto + lemma Posix_CPT2: assumes "v1 :\val v2" "v1 \ CPTpre r s" "v2 \ CPTpre r s" shows "v1 \ v2" @@ -149,10 +153,13 @@ apply(erule CPrf.cases) apply(simp_all)[7] apply(clarify) +apply(frule val_ord_shorterE) +apply(subst (asm) QQ) +apply(erule disjE) apply(drule val_ord_SeqE) apply(erule disjE) apply(drule_tac x="v1a" in meta_spec) -apply(rotate_tac 7) +apply(rotate_tac 8) apply(drule_tac x="v1b" in meta_spec) apply(drule_tac x="flat v1a @ flat v2a @ s'" in meta_spec) apply(simp) @@ -160,7 +167,19 @@ apply(auto simp add: CPTpre_def)[1] apply(drule meta_mp) apply(auto simp add: CPTpre_def)[1] +apply(rule ValOrd.intros(2)) +apply(assumption) +apply(frule val_ord_shorterE) +apply(subst (asm) append_eq_append_conv_if) +apply(simp) +apply (metis append_assoc append_eq_append_conv_if length_append) + + +thm le +apply(clarify) apply(rule ValOrd.intros) +apply(simp) + apply(subst (asm) (3) CPTpre_def) apply(subst (asm) (3) CPTpre_def) apply(auto)[1]