thys/ReStar.thy
changeset 122 7c6c907660d8
parent 121 4c85af262ee7
child 123 1bee7006b92b
--- a/thys/ReStar.thy	Mon Mar 07 18:56:41 2016 +0000
+++ b/thys/ReStar.thy	Mon Mar 07 21:54:50 2016 +0000
@@ -460,6 +460,14 @@
 apply(auto intro: Prf.intros)
 done
 
+lemma PMatch1a:
+  assumes "s \<in> r \<rightarrow> v"
+  shows "s \<in> L r"
+using assms
+apply(induct s r v rule: PMatch.induct)
+apply(auto simp add: Sequ_def)
+done
+
 lemma PMatch_mkeps:
   assumes "nullable r"
   shows "[] \<in> r \<rightarrow> mkeps r"
@@ -482,105 +490,60 @@
 apply(metis PMatch.intros(7))
 done
 
-find_theorems Stars
-thm compat_val_list.induct compat_val.induct
-
-
 lemma PMatch_determ:
-  shows "\<lbrakk>s \<in> r \<rightarrow> v1; s \<in> r \<rightarrow> v2\<rbrakk> \<Longrightarrow> v1 = v2"
-  and   "\<lbrakk>s \<in> (STAR r) \<rightarrow> Stars vs1; s \<in> (STAR r) \<rightarrow> Stars vs2\<rbrakk> \<Longrightarrow> vs1 = vs2"
-apply(induct v1 and vs1 arbitrary: s r v2 and s r vs2 rule: compat_val.induct compat_val_list.induct)
-apply(erule PMatch.cases)
-apply(simp_all)[7]
-apply(erule PMatch.cases)
-apply(simp_all)[7]
-apply(erule PMatch.cases)
-apply(simp_all)[7]
-apply(erule PMatch.cases)
-apply(simp_all)[7]
+  assumes "s \<in> r \<rightarrow> v1" "s \<in> r \<rightarrow> v2"
+  shows "v1 = v2"
+using assms
+apply(induct s r v1 arbitrary: v2 rule: PMatch.induct)
 apply(erule PMatch.cases)
 apply(simp_all)[7]
 apply(erule PMatch.cases)
 apply(simp_all)[7]
-apply(clarify)
-apply(subgoal_tac "s1 = s1a \<and> s2 = s2a")
-apply metis
-apply(rule conjI)
-apply(simp add: append_eq_append_conv2)
-apply(auto)[1]
-apply (metis PMatch1(1) PMatch1(2) Prf_flat_L)
-apply (metis PMatch1(1) PMatch1(2) Prf_flat_L)
-apply(simp add: append_eq_append_conv2)
-apply(auto)[1]
-apply (metis PMatch1(1) PMatch1(2) Prf_flat_L)
-apply (metis PMatch1(1) PMatch1(2) Prf_flat_L)
-apply(erule PMatch.cases)
-apply(simp_all)[7]
-apply(clarify)
-apply(erule PMatch.cases)
-apply(simp_all)[7]
-apply(clarify)
-apply (metis PMatch1(1) PMatch1(2) Prf_flat_L)
+apply(rotate_tac 2)
 apply(erule PMatch.cases)
-apply(simp_all)[7]
+apply(simp_all (no_asm_use))[7]
+apply(clarify)
+apply(force)
 apply(clarify)
-apply(erule PMatch.cases)
-apply(simp_all)[7]
-apply(clarify)
-apply (metis PMatch1(1) PMatch1(2) Prf_flat_L)
-(* star case *)
-defer
+apply(drule PMatch1a)
+apply(simp)
+apply(rotate_tac 3)
 apply(erule PMatch.cases)
-apply(simp_all)[7]
-apply(clarify)
-apply(erule PMatch.cases)
-apply(simp_all)[7]
-apply(clarify)
-apply (metis PMatch1(2))
-apply(rotate_tac  3)
-apply(erule PMatch.cases)
-apply(simp_all)[7]
-apply(clarify)
+apply(simp_all (no_asm_use))[7]
+apply(drule PMatch1a)+
+apply(simp)
+apply(simp)
+apply(rotate_tac 5)
 apply(erule PMatch.cases)
-apply(simp_all)[7]
+apply(simp_all (no_asm_use))[7]
 apply(clarify)
-apply(subgoal_tac "s1 = s1a \<and> s2 = s2a")
-apply metis
+apply(subgoal_tac "s1 = s1a")
+apply(blast)
 apply(simp add: append_eq_append_conv2)
-apply(auto)[1]
-apply (metis L.simps(6) PMatch1(1) PMatch1(2) Prf_flat_L)
-apply (metis L.simps(6) PMatch1(1) PMatch1(2) Prf_flat_L)
-apply (metis L.simps(6) PMatch1(1) PMatch1(2) Prf_flat_L)
-apply (metis L.simps(6) PMatch1(1) PMatch1(2) Prf_flat_L)
+apply(clarify)
+apply (metis PMatch1a append_self_conv)
+apply(rotate_tac 6)
 apply(erule PMatch.cases)
-apply(simp_all)[7]
-apply(clarify)
-apply (metis PMatch1(2))
-apply(erule PMatch.cases)
-apply(simp_all)[7]
-apply(clarify)
-apply(erule PMatch.cases)
-apply(simp_all)[7]
+apply(simp_all (no_asm_use))[7]
 apply(clarify)
-apply(subgoal_tac "s1 = s1a \<and> s2 = s2a")
-apply(drule_tac x="s1 @ s2" in meta_spec)
-apply(drule_tac x="rb" in meta_spec)
-apply(drule_tac x="(va#vsa)" in meta_spec)
+apply(subgoal_tac "s1 = s1a")
 apply(simp)
-apply(drule meta_mp)
-apply (metis L.simps(6) PMatch.intros(6))
-apply (metis L.simps(6) PMatch.intros(6))
-apply(simp add: append_eq_append_conv2)
-apply(auto)[1]
-apply (metis L.simps(6) PMatch1(1) PMatch1(2) Prf_flat_L)
-apply (metis L.simps(6) PMatch1(1) PMatch1(2) Prf_flat_L)
-apply (metis L.simps(6) PMatch1(1) PMatch1(2) Prf_flat_L)
-apply (metis L.simps(6) PMatch1(1) PMatch1(2) Prf_flat_L)
-apply (metis PMatch1(2))
+apply(blast)
+apply(simp  (no_asm_use) add: append_eq_append_conv2)
+apply(clarify)
+apply (metis L.simps(6) PMatch1a append_self_conv)
+apply(clarify)
+apply(rotate_tac 2)
 apply(erule PMatch.cases)
-apply(simp_all)[7]
+apply(simp_all (no_asm_use))[7]
+using PMatch1(2) apply auto[1]
+using PMatch1(2) apply blast
+apply(erule PMatch.cases)
+apply(simp_all (no_asm_use))[7]
 apply(clarify)
-by (metis PMatch1(2))
+apply (simp add: PMatch1(2))
+apply(simp)
+done
 
 (* a proof that does not need proj *)
 lemma PMatch2_roy_version: