--- a/thys2/SizeBound5CT.thy Wed Feb 09 00:29:04 2022 +0000
+++ b/thys2/SizeBound5CT.thy Wed Feb 09 00:30:04 2022 +0000
@@ -1672,6 +1672,20 @@
| "rsize (RSTAR r) = Suc (rsize r)"
+
+
+lemma rsimp_aalts_smaller:
+ shows "rsize (rsimp_ALTs rs) \<le> rsize (RALTS rs)"
+ apply(induct rs)
+ apply simp
+ sorry
+
+lemma finite_list_of_ders:
+ shows"\<exists>dersset. ( (finite dersset) \<and> (\<forall>s. (rders_simp r s) \<in> dersset) )"
+ sorry
+
+
+
lemma rerase_bsimp:
shows "rerase (bsimp r) = rsimp (rerase r)"
apply(induct r)
@@ -1698,18 +1712,7 @@
sorry
*)
-lemma ders_simp_comm_onechar:
- shows " rerase (bders_simp r [c]) = rerase (bsimp (bders r [c]))"
-and " rders_simp (RSEQ r1 r2) [c] =
- rsimp (RALTS ((RSEQ (rders r1 [c]) r2) #
- (map (rders r2) (orderedSuf [c]))) )"
- apply simp
- apply(simp add: rders.simps)
- apply(case_tac "rsimp (rder c r1) = RZERO")
- apply simp
- apply auto
- sledgehammer
- oops
+
fun rders_cond_list :: "rrexp \<Rightarrow> bool list \<Rightarrow> char list list \<Rightarrow> rrexp list"
where
@@ -1723,9 +1726,146 @@
"nullable_bools r (s#strs) = (rnullable (rders r s)) # (nullable_bools r strs) "
|"nullable_bools r [] = []"
+thm rsimp_SEQ.simps
+
+lemma idiot:
+ shows "rsimp_SEQ RONE r = r"
+ apply(case_tac r)
+ apply simp_all
+ done
+
+lemma no_dup_after_simp:
+ shows "RALTS rs = rsimp r \<Longrightarrow> distinct rs"
+ sorry
+
+lemma no_further_dB_after_simp:
+ shows "RALTS rs = rsimp r \<Longrightarrow> rdistinct rs {} = rs"
+ sorry
+
+lemma longlist_withstands_rsimp_alts:
+ shows "length rs \<ge> 2 \<Longrightarrow> rsimp_ALTs rs = RALTS rs"
+ sorry
+
+lemma no_alt_short_list_after_simp:
+ shows "RALTS rs = rsimp r \<Longrightarrow> rsimp_ALTs rs = RALTS rs"
+ sorry
+
+lemma idiot2:
+ shows " \<lbrakk>r1 \<noteq> RZERO; r1 \<noteq> RONE;r2 \<noteq> RZERO\<rbrakk>
+ \<Longrightarrow> rsimp_SEQ r1 r2 = RSEQ r1 r2"
+ apply(case_tac r1)
+ apply(case_tac r2)
+ apply simp_all
+ apply(case_tac r2)
+ apply simp_all
+ apply(case_tac r2)
+ apply simp_all
+ apply(case_tac r2)
+ apply simp_all
+ apply(case_tac r2)
+ apply simp_all
+ done
+
+lemma rsimp_aalts_another:
+ shows "\<forall>r \<in> (set (map rsimp ((RSEQ (rders r1 s) r2) #
+ (rders_cond_list r2 (nullable_bools r1 (orderedPref s)) (orderedSuf s)) )) ). (rsize r) < N "
+ sorry
+
+
+
+lemma shape_derssimpseq_onechar:
+ shows " rerase (bders_simp r [c]) = rerase (bsimp (bders r [c]))"
+and "rders_simp (RSEQ r1 r2) [c] =
+ rsimp (RALTS ((RSEQ (rders r1 [c]) r2) #
+ (rders_cond_list r2 (nullable_bools r1 (orderedPref [c])) (orderedSuf [c]))) )"
+ apply simp
+ apply(simp add: rders.simps)
+ apply(case_tac "rsimp (rder c r1) = RZERO")
+ apply auto
+ apply(case_tac "rsimp (rder c r1) = RONE")
+ apply auto
+ apply(subgoal_tac "rsimp_SEQ RONE (rsimp r2) = rsimp r2")
+ prefer 2
+ using idiot
+ apply simp
+ apply(subgoal_tac "rsimp_SEQ RONE (rsimp r2) = rsimp_ALTs (rdistinct (rflts [rsimp r2]) {})")
+ prefer 2
+ apply auto
+ apply(case_tac "rsimp r2")
+ apply auto
+ apply(subgoal_tac "rdistinct x5 {} = x5")
+ prefer 2
+ using no_further_dB_after_simp
+ apply metis
+ apply(subgoal_tac "rsimp_ALTs (rdistinct x5 {}) = rsimp_ALTs x5")
+ prefer 2
+ apply fastforce
+ apply auto
+ apply (metis no_alt_short_list_after_simp)
+ apply (case_tac "rsimp r2 = RZERO")
+ apply(subgoal_tac "rsimp_SEQ (rsimp (rder c r1)) (rsimp r2) = RZERO")
+ prefer 2
+ apply(case_tac "rsimp ( rder c r1)")
+ apply auto
+ apply(subgoal_tac "rsimp_SEQ (rsimp (rder c r1)) (rsimp r2) = RSEQ (rsimp (rder c r1)) (rsimp r2)")
+ prefer 2
+ apply auto
+ apply(metis idiot2)
+ done
+
+lemma rders__onechar:
+ shows " (rders_simp r [c]) = (rsimp (rders r [c]))"
+ by simp
+
+lemma rders_append:
+ "rders c (s1 @ s2) = rders (rders c s1) s2"
+ apply(induct s1 arbitrary: c s2)
+ apply(simp_all)
+ done
+
+lemma rders_simp_append:
+ "rders_simp c (s1 @ s2) = rders_simp (rders_simp c s1) s2"
+ apply(induct s1 arbitrary: c s2)
+ apply(simp_all)
+ done
+
+lemma inside_simp_removal:
+ shows " rsimp (rder x (rsimp r)) = rsimp (rder x r)"
+ sorry
+
+lemma set_related_list:
+ shows "distinct rs \<Longrightarrow> length rs = card (set rs)"
+ by (simp add: distinct_card)
+(*this section deals with the property of distinctBy: creates a list without duplicates*)
+lemma rdistinct_never_added_twice:
+ shows "rdistinct (a # rs) {a} = rdistinct rs {a}"
+ by force
+
+
+lemma rdistinct_does_the_job:
+ shows "distinct (rdistinct rs s)"
+ apply(induct rs arbitrary: s)
+ apply simp
+ apply simp
+ sorry
+
+
+
+
+(*this section deals with the property of distinctBy: creates a list without duplicates*)
+
+lemma rders_simp_same_simpders:
+ shows "s \<noteq> [] \<Longrightarrow> rders_simp r s = rsimp (rders r s)"
+ apply(induct s rule: rev_induct)
+ apply simp
+ apply(case_tac "xs = []")
+ apply simp
+ apply(simp add: rders_append rders_simp_append)
+ using inside_simp_removal by blast
+
lemma shape_derssimp_seq:
- shows "\<lbrakk>s \<noteq>[] \<rbrakk> \<Longrightarrow> rerase (bders_simp r s) = rerase (bsimp (bders r s))"
+ shows "\<lbrakk>s \<noteq>[] \<rbrakk> \<Longrightarrow> (rders_simp r s) = (rsimp (rders r s))"
and "\<lbrakk>s \<noteq> []\<rbrakk> \<Longrightarrow> rders_simp (RSEQ r1 r2) s =
rsimp (RALTS ((RSEQ (rders r1 s) r2) #
(rders_cond_list r2 (nullable_bools r1 (orderedPref s)) (orderedSuf s))) )"
@@ -1742,11 +1882,17 @@
apply(subgoal_tac "xs \<noteq> [] \<Longrightarrow> rsimp (rder x (rerase (bders_simp r xs))) = rsimp (rder x (rerase (bsimp (bders r xs))))")
prefer 2
- apply presburger
+ apply presburger
+ apply(case_tac "xs = []")
sorry
+
lemma shape_derssimp_alts:
- shows "rders_simp (RALTS rs) s = rsimp (RALTS (map (\<lambda>r. rders r s) rs))"
+ shows "s \<noteq> [] \<Longrightarrow> rders_simp (RALTS rs) s = rsimp (RALTS (map (\<lambda>r. rders r s) rs))"
+ apply(case_tac "s")
+ apply simp
+ apply simp
+ sorry
lemma finite_size_finite_regx:
@@ -1757,19 +1903,115 @@
(*below probably needs proved concurrently*)
lemma finite_r1r2_ders_list:
- shows "\<forall>r1 r2. \<exists>l.
-(length (rdistinct (rders_cond_list r2 (nullable_bools r1 (orderedPref s)) (orderedSuf s)) {})) < l "
+ shows "(\<forall>s. rsize (rders_simp r1 s) < N1 \<and> rsize (rders_simp r2 s) < N2)
+ \<Longrightarrow> \<exists>l. \<forall>s.
+(length (rdistinct (map rsimp (rders_cond_list r2 (nullable_bools r1 (orderedPref s)) (orderedSuf s))) {}) ) < l "
sorry
+(*
+\<lbrakk>s \<noteq> []\<rbrakk> \<Longrightarrow> rders_simp (RSEQ r1 r2) s =
+ rsimp (RALTS ((RSEQ (rders r1 s) r2) #
+ (rders_cond_list r2 (nullable_bools r1 (orderedPref s)) (orderedSuf s))) )
+*)
+
+lemma finite_width_alt:
+ shows "(\<forall>s. rsize (rders_simp r1 s) < N1 \<and> rsize (rders_simp r2 s) < N2)
+ \<Longrightarrow> \<exists>N3. \<forall>s. rsize (rsimp (RALTS ((RSEQ (rders r1 s) r2) #
+ (rders_cond_list r2 (nullable_bools r1 (orderedPref s)) (orderedSuf s))) )) < N3"
+
+ sorry
+
+
+lemma empty_diff:
+ shows "s = [] \<Longrightarrow>
+ (rsize (rders_simp (RSEQ r1 r2) s)) \<le>
+ (max
+ (rsize (rsimp (RALTS (RSEQ (rders r1 s) r2 # rders_cond_list r2 (nullable_bools r1 (orderedPref s)) (orderedSuf s)))))
+ (Suc (rsize r1 + rsize r2)) ) "
+ apply simp
+ done
+
lemma finite_seq:
shows "(\<forall>s. rsize (rders_simp r1 s) < N1 \<and> rsize (rders_simp r2 s) < N2)
\<Longrightarrow> \<exists>N3.\<forall>s.(rsize (rders_simp (RSEQ r1 r2) s)) < N3"
+ apply(frule finite_width_alt)
+ apply(erule exE)
+ apply(rule_tac x = "max (N3+2) (Suc (Suc (rsize r1) + (rsize r2)))" in exI)
+ apply(rule allI)
+ apply(case_tac "s = []")
+ prefer 2
+ apply (simp add: less_SucI shape_derssimp_seq(2))
+ apply (meson less_SucI less_max_iff_disj)
+ apply simp
+ done
+
+
+(*For star related error bound*)
+
+lemma star_is_a_singleton_list_derc:
+ shows " \<exists>Ss. rders_simp (RSTAR r) [c] = rsimp_ALTs (map (\<lambda>s1. rsimp_SEQ (rders_simp r s1) (RSTAR r)) Ss)"
+ apply simp
+ apply(rule_tac x = "[[c]]" in exI)
+ apply auto
+ done
+
+lemma rder_rsimp_ALTs_commute:
+ shows " (rder x (rsimp_ALTs rs)) = rsimp_ALTs (map (rder x) rs)"
+ apply(induct rs)
+ apply simp
+ apply(case_tac rs)
+ apply simp
+ apply auto
+ done
+
+lemma double_nested_ALTs_under_rsimp:
+ shows "rsimp (rsimp_ALTs ((RALTS rs1) # rs)) = rsimp (RALTS (rs1 @ rs))"
+ apply(case_tac rs1)
+ apply simp
+
+ apply (metis list.simps(8) list.simps(9) neq_Nil_conv rdistinct.simps(1) rflts.simps(1) rflts.simps(2) rsimp.simps(2) rsimp_ALTs.simps(1) rsimp_ALTs.simps(2) rsimp_ALTs.simps(3))
+ apply(case_tac rs)
+ apply simp
+ apply auto
sorry
+lemma star_seqs_produce_star_seqs:
+ shows "rsimp (rsimp_ALTs (map (rder x \<circ> (\<lambda>s1. rsimp_SEQ (rders_simp r s1) (RSTAR r))) Ss))
+ = rsimp (rsimp_ALTs (map ( (\<lambda>s1. rder x (rsimp_SEQ (rders_simp r s1) (RSTAR r)))) Ss))"
+ sledgehammer
+ by (meson comp_apply)
+
+lemma der_seqstar_res:
+ shows "rder x "
+
+
+lemma linearity_of_list_of_star_or_starseqs:
+ shows "\<exists>Ssa. rsimp (rder x (rsimp_ALTs (map (\<lambda>s1. rsimp_SEQ (rders_simp r s1) (RSTAR r)) Ss))) =
+ rsimp_ALTs (map (\<lambda>s1. rsimp_SEQ (rders_simp r s1) (RSTAR r)) Ssa)"
+ apply(simp add: rder_rsimp_ALTs_commute)
+ apply(induct Ss)
+ apply simp
+ apply (metis list.simps(8) rsimp_ALTs.simps(1))
+
+ sledgehammer
+ sorry
+
+lemma starder_is_a_list_of_stars_or_starseqs:
+ shows "s \<noteq> [] \<Longrightarrow> \<exists>Ss. rders_simp (RSTAR r) s = rsimp_ALTs (map (\<lambda>s1. rsimp_SEQ (rders_simp r s1) (RSTAR r)) Ss)"
+ apply(induct s rule: rev_induct)
+ apply simp
+ apply(case_tac "xs = []")
+ using star_is_a_singleton_list_derc
+ apply(simp)
+ apply auto
+ apply(simp add: rders_simp_append)
+ using linearity_of_list_of_star_or_starseqs by blast
+
lemma finite_star:
shows "(\<forall>s. rsize (rders_simp r0 s) < N0 )
\<Longrightarrow> \<exists>N3. \<forall>s.(rsize (rders_simp (RSTAR r0) s)) < N3"
+
sorry
@@ -1805,7 +2047,6 @@
prefer 2
apply (simp add: finite_star)
-sledgehammer
sorry