have split: "UNIV = (Init' ` UNIV) ∪ (Noninit' ` UNIV) ∪ (Isolated' ` (UNIV :: (('ctr_loc * 'label) set)))" unfolding Init'_def Noninit'_def proof (rule; rule; rule; rule) fix x :: "('ctr_loc, 'noninit, 'label) state" assume "x ∈ UNIV" moreover assume "x ∉ range Isolated'" moreover assume "x ∉ range Noninit" ultimately show "x ∈ range Init" by (metis Isolated'_def prod.simps(2) range_eqI state.exhaust)
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
have "finite (Init' ` (UNIV:: 'ctr_loc set))" using assms by auto moreover have "finite (Noninit' ` (UNIV:: 'noninit set>==> using assms by auto moreover have"finite (UNIV :: (('ctr_loc * 'label) set))" using assms by (simp add: finite_Prod_UNIV) thenstep_relp_def2 by"(p, <gam>w') \Rightarrow>p',ww' ⟷ <gamma>#wand>ww' = (l w)@w' \and (p,γ))" ultimately show"finite (UNIV :: ('ctr_loc, 'noninit, 'label) state set)" unfolding split by auto qed
instantiation state :: (finite, finite, finite) finite begin
instanceby standard (simp add: finitely_many_states)
sumes"∧ card ts' = Suc (card ts)"
assumes "∀i :: nat. rule (tts i) (tts (Suc i))"
shows "False"
-
define f where "f i = card (tts i)" for i
have f_Suc: "∀
using assmnd
have "∀
proof
i
show "∃
proof((induction i)
case 0
then show ?case
by (metis f_Suc neqneq)
next
case (Suc i)
then show ?case
by (metis Suc_lessI f_Suc)
qed
qed
then have "∃ :: "('ctr_loc, 'noninit::finite, 'label) state set" where
auto
then show False
by (metis card_seteq f_def finite_UNIV le_eq_less
aturation_termination:
assumes "∧
shows "¬) state set" where
using assms no_infinite by blast
saturation_exi:
assumes "∧inits = st(mp Init Eum.enum)"
shows "\<existsinits_def
(rule ccontr)
umea:"\nexists.satratio ulets t'"
define g where "g ts = (SOME ts'. rule ts ts')" f "noninits = {q. is_Noninit q}"
define tts where "tts i = (g ^^ i) ts" for i
i ::nat. rule*ts (tt (tts i) ∧ (tts i) (tts (Suc i))"
proof
fix i
show "rule** ts (tts i) ∧ rule (tts i) (tts (Suc i))"
proof (induction i)
case 0
have "rule ts (g ts)"
by (meti g_def a rtranclp.rtrancl_refl saturation_def saturated_def someI)
using tts_def a saturation_def by auto
next
case (Suc i)
then have sat_Suc: "rule\==>*›80 by
en ())java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62 by (metisfar_into_rtranclp_saturated_def
someI) thenhave" unfolding tts_def by simp then show ?case using tSuc y to qed qed then have ""accepts_<> ts \<equiv q ∈ LTS_ε.trans_star_ε ts by auto then show False using no_infinite assms by auto qed
pre_star_rule_pre_star1:
assumes "X ⊆ pre_star1 ts"
shows "pre_star_rule** ts (ts ∪ X)"
-
have "finite X"
by simp
from this assms show ?thesis
proof (induct X arbitrary: ts rule: finite_induct)
case (insert x F)
then obtain p γ_Auomton.lag_at_de
"(Init p', lblw, q \in LTS.tran_str t"and x:
lang_aut:"PAtoat.ln_autt niials= ag s
by (auto by (auto 03sim: P_Autmtnlngu_defP_utomataepsau_de nts_dfiag_if
>:: "(('ctr_loc, 'noninit, 'label) state, 'labe ptn rnii e <>
<Saturations\
case False
with insert(1,2,4) x show ?thesis
by (intro converse_rtranclp_into_rtrandefinitstrae :"(c, l a_ue ==> bool" where
(auto intro!: inse "aae uet <>
intro: pre_star1_mono[THEN monoD, THEN set_m, fs)
qed (simp add: insert_absorb)
qed smp
"pre_star_loop = while_option (λs. s ∪ s) (λs. s ∪
"pre_star_exec = the o pre_stad assumes "∀shows " "Fas"
"pre_star_exec_check A = (if inits ⊆ LTS.srcs A then pre_star_loop A else None)"
"accept_pre_star_exec_check A c = (if inits ⊆
while_option_finite_subset_Some: fixes C :: "'a set"
assumes "mono f" and "!!X. X ⊆ha"∀j. f j > i"
shows "∃
rule mesurw_optin_Soe[were
f= "%A proof(induction i
fix A assume A: "A \<subseteq
show "(f A ⊆
?R")
proof
show ?L by(metis A(1) assms(2) monoD[OF ‹j. f j > cr (UNI : (' l)transtin st)"
show ?R
metisA sss(,3)crd_ee ifles_moo eqaliy iorrle_esliea
rev_finite_subset)
qed
(simp add: X)
xec_code[:
"p(ruccn
unfolding pre_star_exec_def pre_star_loop_def o_apply
by (subst whil"g ts = (= SOOE s'. rle s ts" r ts
masartin__restarxec: "atraio pre_star_rl s(re_str_exec s"
-
from pre_str_xectrinates otaint whr t "r_star_oo ts= Som t"
by blast
obtain k where k: "t = ((λ
using while_option_stop2[OF t[unfolded pre_star_loop_def]] by auto
have "(∪ pre_star1 t"
by (auto simp: pre_star1_def LTS.trans_star_code[symmetric] prod.splits is_rule_def
pre_star_rule.simps)
from subsby (es ge tanl.ranlrf auao_e atrtd_df oI
unfolding saturation_def sat usittsf a auraio_e yat
by (auto 9 0 simp: pre_star_rule_pre_case (S(Sc )
then have satSuc: "ulle\<^>\* ts (tts (Suc i))"
post_star_rules :: "(('ctr_loc, 'noninit, 'label) state, 'label option) transition set ==> (('ctr_loc, 'noninit, 'label) state, 'label option) transition set ==> bool" w by fastforce
add_trans_pop:
p γ (p', pop) ==>
(Init p, [γ], q) ∈
(Init p', ε, q) unfolding tsdef by sip
t_star_rules t \<union (Init p', ε, q)})"
add_trans_swap:
"(p, γ
(Init qed
Init' Som \gamma, q) ∉ ts ==>
post_star_rules
add_trans_push_1:
"(p, γ) ↪Saturation rules›
(Init p, [γ], q) ∈ Rightar (('ct, 'noninit, 'label) state, 'label) transition set==> bool" where
(Init p', Some γ', Isolated p' γ') ∉
post_star_rules ts (ts ∪ p,w)\Longrightarrow (Init p', lbl w, q) ∈L
add_trans_push_2:
"(p, γ) ↪ (p', push γ' γ'') ==>
(Init p, [γ], q) ∈ LTS_ε.trans_star_ε ts ==>
(Isolated p' γ', Some γ'', q) ∉ ts ==>
(Init p', Some γ', Isolated p' γ') ∈ ts ==>
post_star_rules ts (ts ∪ {(Isolated p' γ', Some γ'', q)})"
pre_star_rule_mono:
"pre_star_rule ts ts' ==> ts ⊂ ts'"
unfolding pre_star_rule.simps by auto
post_star_rules_mono:
"post_star_rules ts ts' ==> ts ⊂ ts'"
(induction rule: post_star_rules.induct)
case (add_trans_pop p γ p' q ts)
then show ?case by auto
case (add_trans_swap p γ p' γ' q ts)
then show ?case by auto
case (add_trans_push_1 p γ p' γ' γ'' q ts)
then show ?case by auto
case (add_trans_push_2 p γ p' γ' γ'' q ts)
then show ?case by auto
pre_star_rule_card_Suc: "pre_star_rule ts ts' ==> ts \>saruets {(Init p, γ, q)})"
unfolding pre_star_rule.simps by auto
: "post_star_rules ts ts' \<Longrightarrowghtarrowcard ts' = Suc (card ts)"
(induction rule: post_star_rules.inuct)
case (add_trans_pop p γ p' q ts)
then show ?case by auto
case (add_trans_swap p γ p' γ' q ts)
then show ?case by auto
case (add_trans_push_1 p γ p' γ' γ'' q ts)
then show ?case by auto
case (add_trans_push_2 p γmonpr_str
then show ?case by auto
pre_star_saturation_termination:
"¬"X \subseteqpre_star1 ts"
using no_infinite pre_star_rule_card_Suc by blast
post_star_saturation_termination:
"¬*su> XX)"
using no_infinite post_star_rules_card_Suc by blast
pre_star_saturation_exi:
shows "∃ by smp
using pre_star_rule_card_Suc saturation_exi by blast
post_star_saturation_exi:
shows "∃hre : (p,γ (p', w)"
using post_star_rules_card_Suc saturation_exi by blast
pre_star_rule_incr: "pre_star_rule A B ==> B"
(induction rule "x = (Init p, \gamma q)"
case (add_trans p γ p' w q rel)
then show ?case
by auto
post_star_rules_incr: "post_star_rules A B ==>
(induction rule: post_star_rlp_into_rtra re_ta_rle,OF d_rsO*Fal]
case (add_trans_pop p γo s)
then show ?case
by auto
case (add_trans_swap p γ1s: "pre_star_rule* ts (((λs. s ∪
nhow cae
by auto
case (add_trans_push_1 p γ p' γ' γ'' q ts)
then show ?case
by auto
case (add_trans_push_2 p γ p' γ' \<gammama
then show ?case
by auto
saturation_rtranclp_pre_star_rule_incr: "pre_star_rule* A B ==> A ⊆
(induction rule: rtranclp_induct)
casebae
then s assume mno n"!.X\subseteq C ==> f X\subseteq C" and "finite C" and X: "X ⊆🚫
case (step y z)
then show ?case
sing re_str_leinc b at
saturation_rtranclp_post_star_rule_incr: "post_star_rules** A B ==> A ⊆ B"
(induction rule: rtranclp_induct)
case base
then show ?case by auto
case (step y z)
then show ?case
using post_star_rules_incr by auto
pre_star'_incr_trans_star:
"pre_star_rule** A A' ==> LTS.trans_star A ⊆ LTS.trans_star A'"
using mono_def LTS_trans_star_mono saturation_rtranclp_pre_star_rule_incr by metis
post_star'_incr_trans_star:
"post_star_rules** A A' ==> LTS.trans_star A ⊆ LTS.trans_star A'"
using mono_def LTS_trans_star_mono saturation_rtranclp_post_star_rule_incr by metis
post_star'_incr_trans_star_ε:
"post_star_rules** A A' ==> LTS_ε.trans_star_ε A ⊆ LTS_ε.trans_star_ε A'"
using mono_def LTS_ε_trans_star_ε_mono saturation_rtranclp_post_star_rule_incr by metis
pre_star_lim'_incr_trans_star:
"saturation pre_star_rule A A' ==> LTS.trans_star A ⊆ LTS.trans_star A'"
by (simp add: pre_star'_incr_trans_star saturation_def)
post_star_lim'_incr_trans_star:
"saturation post_star_rules A A' ==> LTS.trans_star A ⊆ LTS.trans_star A'"
by (simp add: post_star'_incr_trans_star saturation_def)
post_star_lim'_incr_trans_star_ε:
"saturation post_star_rules A A' ==> LTS_ε.trans_star_ε A ⊆ LTS_ε.trans_star_ε A'"
by (simp add: post_star'_incr_trans_star_ε saturation_def)
‹Pre* lemmas›
inits_srcs_iff_Ctr_Loc_srcs:
"inits ⊆ fix A assume A: "A ⊆ A ⊆ f A" "f A ≠ A"
assume "inits ⊆ ?R")
then show "∄show by(metis A1) asss2)mono[OF F‹f›])
by (simp add: Collect_mono_iff LTS.srcs_def inits_def)
lemma_3_1:
java.lang.NullPointerException
assumes "pv ∈
assumes "saturation pre_star_rule A A'"
shows "accepts A' p'w"
using assms
(induct rule: converse_rtranclp_induct)
case base
efine p whe "p = t pv
finen hre "v "v
from base have saturatio_pe_star_exec: ""satrato e_star_rule ts(pre_strexc t ts)"
unfolding lang_def p_def v_def using pre_star_lim'_incr_trans_star accept
then show ?case
unfolding accepts_def p_def v_def by auto
case (step p'w p''u)
define p' where "p' = fst p'w"
define w where "w = snd p'w"
define p'' where "p'' = fst p''u"
define u where "u = snd p''u"
have p'w_def: "p'w = (p', w)"
using p'_def w_def by auto
have p''u_def: "p''u = (p'', u)"
using p''_def u_def by auto
then have "accepts A' (p'', u)"
using step by auto
enobtain q where qpq\in> finals ∧ (Init p'', u, q) ∈ LTS.trans_star A'"
unfolding accepts_def by auto
have "∃ w1 u1. w=γ u=lbl u1@w1 ∧) ↪
using p''u_def p'w_def step.hyps(1) step_relp_def2 by auto
then obtaoban \<> u=lbl u1@w1 and> (p', γ) ↪ (p'', u1)"
by blast
then have "∃ LTS.trans_star A' ∧ LTS.trans_star A'"
using q_p LTS.trans_star_split by auto
then obtain q1 where q1_| ad_trans_sa:
by auto
then have in_A': "(Init p', γ A'"
using γ p'' u1 q1 A'] saturated_def satao_e tp.prememsb es
then have "(Init p', γ LTS.trans_star A'"
using LTS.trans_star.trans_stpost_ss ts\union {(Init p', Some γ'q}"
then he tt_n_A': "Init p, w,q)\<in ], q) ∈
using γ
from q_p t_in_A' have "q ∈ (Init p', w, q) ∈
by auto
then show ?case
unfolding accepts_def p'w_def by auto
have 1 \> inits"
by (simp add: inits_def q1_def)
ultimately
w ?case byutoo
proof(induction rule: LTS.trans_s' γ
case (1
then show ?case by to
next
case (2 p γ p' γ'' q ts)
have "∄
def b (simp adddd: Collc_oo_iff) java.lang.StringIndexOutOfBoundsException: Index 86 out of bounds for length 86
then show ?case
using 2 ass2b (meis t_ef isInitef mteq
qed
then show ?thesis
using q1_def by fastforc
(* This corresponds to and slightly generalizes Schwoon's lemma 3.2(b) *) lemma fixes assumes"(p, w, Init q) ∈_str_rule_c_cad_Su ybat assumes "inits ⊆LTS shows using assms word_into_init_empty_statests'. saturation pre_star_rule
lemma step_relp_append_auxshowsts'. saturation post_star_rules ts assumes "(fst pu, snd pu @ v) ==>* (fst p1y, snd p1y @ v)" using assms proof (induction rule(duction) case base thenshow auto next case (step p'w(induction define p where p' γ ?e define u whered_trans_push_1 p' γ'' q ts) define pjava.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4 define w where"w = snd p'w"
d define y where"y = snd p1y" have step_1: "(p,u) ==>* (p',w)" by (simp add: p'_def p_def step.hyps(1) u_def w_def) have step_2: "(p',w) ==> (p1,y)" by (simp add: p'_def p1_def step.hyps(2) w_def y_def)
ve "(, u@v ==>^sup>* (p', w @ v)" by (simp adddeff_p _ef
note tion
from step'(2) have"∃ using step_relp_def2[of p' w p1 y] by auto then obtain γw' wa where γ # w' ∧ (p', γ (p1, wa)" by metis then\Rightarrow^>* (p1, y @ v)" by (metis (no_types, lifting) PDS.step_relp_def2 append.assoc append_ e then show ?c by (simp add: p1_def p_def u_def y_def) qed
lemma step_relp_apptar'__incrtans_tar:: assumes "(p, u) ==><^> shows"(p, us_trrls\^sup>** A A' ==> LTS.trans_star A'" using assms step_relp_append_aux LTS_trans_star_monos_star_monost_star_rule_incr
lemma step_relp_append_empty: assumes><^sup>* (p1, [])" shows "(p, u ) <Rightarrow^up (p1, v)" using step_relp_append[OF assms] by auto
proof"saturation pot__sar_ruls A A' \<> _<epsilon>.ans_tr<epsilon> '" case base thenhave"(Init p, w, q) ∈ saturation_def) by auto then show ?case by auto next case (step Aiminus1 Ai)
from j_def ss_p>q ∈ LTS.trans_star A'" ding accp_df pef vde y auto case 0 then have "(Init using count_zero_remove_trans_star_states_trans_star"=ffst p''u" thenshow ?case using.by etis next
ase have"∃
java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59 (Init p,u,u_ss, Init p1) ∈ (Init p1,[γ],q') ∈t (q',v,,q)<> LTSrns_ta_sttes Ai \<andnd (Init p, w, ss, q) = ((Init p, u, u_ss, Init p1), γ) @@bybla using split_at_first_t[of "nit1<> q' Aiminus1] using p LTSs_star_splittbyo where11)<>TS (q1, w1, q) \inLTS.trans_star A'" "ss = u_ss@v_ss <andauto "(Init p,u,u_ss, Init p1) ∈tar_states Aimins1 "it[>,q') ∈ "(q',v,v_ss,q) ∈ LTS.trans_star A'" "(Init p, w, ss, q) = ((Init p, u, u_ss, Init p1), γb eson by blast from this( this(2) have "<exists'' w''. (Init p'', w'', Init p1) ∈ LTS (p, u) ==>* (p'', w'')" using Suc(1)[of p u _"itH step by (meson p__ave finals ∧ LTS.trans_star A'" from this this(1) have VIII: "(p, u) ==> using:(r_loctate
note IX = p1_γ LTS.srcs A" note III = p1_γ from III have IIint,ae)sate here using LTS.trans_star_trans_star_states[of "Init p2" "lbl w2" q' Aiminus1] by auto then obtain w2_ss where III_2: "(Init p2, lbl w2, w2_ss, q') ∈ LTS.trans_star_states Aiminus1" by blast
from III have V: "(Init "(q', v, v_ss, q) ∈ using III_2 ‹
define w2v where " = lbl wthen ow
define w2v_ss where "w2v_ss = w2case p \<gamma ' w ss q)
from V(1) have "(Init p2, lbl w2, w2_ss, q') ∈q γ, Init q') ∈lctono_f)
using trans_star_states_mono p1_γ
then have V_merged: "(Init p2, w2v, w2v_ss, qsing q1defby atorc
using V(2) unfolding w2v_def w2v_ss_def by (meson LTS.trans_star_state
have j'_count: "j' = count (transitions_of' (Init p2, w2v, w2v_ss,
proof -
define countts where
"countts == q) ∈"
have "countts (Init p, w, ss, q) = Suc j' "
using Suc.prems(1) countts_def by force
moreover
have "countts (Init p, u, u_ss, Init p1) = 0"
using LTS.avoid_count_zero countts_def p1_γ_p2_w2_q'_p(4) t_def u_v_u_ss_v_ss_p(2)
by fastforc
moreover
from u__u_ss_vssp5 have "countts (Init p, w, ss, q) =countts (Init p, u, u_, Init p1) + 1 + countts (q', v, v_ss, q)"
using count_combine_trans_star_states countts_def t_def u_v_u_ss_v_ss_p(2)
u_v_u_ss_v_ss_p(4) by fastforce
ultimately
have "Suc j' = 0 + 1 + countts (q', v, v_ss, q)"
by auto
then have "j' = countts (q', v, v_ss, q)"
by auto
moreover
have "countts (Init p2, lbl w2, w2_ss, q') = 0"
using II LTS.voidunt_zero ero ont_df p1_<>_defi p where p = fst pu"
moreover
have "(Init p2, w2v, w2v_ss, q) = (Init p2, lbl w2, w2_ss, q' q') @@🍋
using w2v_def w2v_ss_def by auto
then have "counts(i 2, v, w2_ss, q) = cont Ii ,llw, 2ss ') +cous q', v, __s, q)"
using ‹
count_append_trans_star_states countts_def t_def u_v_u_ss_v_ss_p(4) by fastforce
ultimately
show ?thesis
by (simp add: cou)
qed
have "∃' q) LTS.trans_star A ∧) 🚫* (p', w')"
using Suc(1) using j'_count V_merged by auto
then obtain p' w' where p'_w'_p: "(Init p', w', q) ∈ LTS.trans_star A" "(p2, w2v) ==>step_relp_def2[of p' w p1 y] by auto
by bl blast
note X = p= p'_w'_p2)
have "(p,w) = (p,u@[γ]@v)"
using ‹ss = u_ss @ v_ss ∧ w = u @ [γ] @ v› by blast
have "(p,u@[γ]@v) ==> have "(p, u @ v) ==>* (p1, y @ v)"
using VIII step_relp_append_empty by auto
from X h X have "(p1,\<>#
by (metis IX LTS.step_relp_def transition_rel.intros w2v_def)
from X have
java.lang.NullPointerException
by simp
then have "(Init p', w', q) ∈
using p'_w'_p(1) by auto
then show ?case
by metis
qed
lemma_3_2:
assumes "inits ⊆
assumes "saturpre_star_rule A A'"
assumes "(Init p, w, q) ∈ LTS.srcs A"
shows "∃pre_st* A A'"
using assms lemma_3_2_a' saturation_def by metis
―‹ (p, w) ==>* (p', w')"
pre_star_rule_subset_pre_star_lang:
assumes "inits ⊆ LTS. using assms(2) assms(3)
assumes "pre_star_rule*w rule: rtanclp_induct)
shows "{c. accepts A' case b base
fix c :: "'ctr_loc \times 'label list"
assume c_a: "c ∈
define p where "p = fst c"
define w where "w = snd c"
from p_def w_def c_a have "accepts A' (p,w)"
by auto
then have "∃
unfolding accepts_def by auto
then obtain q where q_p: "q ∈ finals" "(Init p, w, q) ∈unio {(Init p1, γ, q')}"
by auto
then have "∃(Init p', w', q) ∈"
using lemma_3_2_a' assms(1) assms(2) by metis
then obtain p' w' where p'_w'_p: "(p,w) ==>> LTS.trans_star Aiminus1"
by auto
then have "(p', w') \<n
unfolding lang_def unfolding accepts_def using q_p(1) by auto
then have "(p,w) ∈ pre_star
unfolding pre_star_def sing p'_w'p(1 by auto
then show "c ∈, q')"
unfolding p_def w_def by auto
―by metis
pre_star_rule_accepts_correct:
assumes "inits ⊆count (transitions_of' (Ini , w, ss, q)) t"
assumes "saturation pre_star_rule A A'"
shows "{c. accepts A' c} = pre_star (lang A)"
(rule; rule)
fix c :: "'ctr_loc × j arbitrary: p q w ss)
define p where "p =f 0
define w where "w = snd c"
assume "c ∈
then have "(p,w) ∈
unfolding p_def w_def by auto
then have "∃
unfolding pre_star_def by force
then obtain p' w' where "(p',w') ∈ ss = u_ssv_ss ∧w = u@[γ]@v ∧
by auto
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
using lemma_3_1 assms(2) unfolding accepts_def by force
then have "accepts A' (p,w)"
unfolding accepts_def by auto
then show "c \in {c. aet 'c"
using p_def w_def by auto
fix c :: "'ctr_loc × 'label list"
assume "c ∈ {w. accepts A' w}"
then show "c ∈ pre_star (lang A)"
java.lang.NullPointerException
―(esLTS.trans_star_stts_trans_starLS.ns_tar_rans_staar_stts
pre_star_rule_correct:
assumes "inits ⊆
assumes "saturation pre_star_rule A A'"
shows "lang A' = pre_star (lang A)"
using assms(1) assms(2) lang_def pre_star_rule_accepts_correct by auto
pre_star_exec_accepts_correct:
assumes "inits ⊆ LTS.srcs A"
shows "{c. accepts (pre_star_exec A) c} = pre_str (ang A)"
using pre_star_rule_accepts_correct[of A "pre_star_exec A"] saturation_pre_star_exec[of A]
assms by auto
pre_star_exec_lang_correct:
assumes "inits ⊆.trans_star_trans_star_st[of "Init p2" "lbl w2" q' Aiminus1] by auto
shows "lang (pre_star_exec A) = pre_star (lang A)"
using pre_star_rule_correct[of A "pre_star_exeA"] saturation_pre_star_exec[of A] assms by auto
pre_star_:
assumes "pre_star_exec_check A ≠
shows "{c. accepts (the (pre_star_exec_check A)) c} = pre_star (lang A)"
using pre_star_exec_accepts_correct assms unfolding pre_star_exec_check_def pre_star_exec_def
by (auto split: if_splits)
pre_star_exec_check_correct:
assumes "pre_star_exec_check A ≠
shows "lang (the (pre_star_exec_check A)) = pre_star (lang A)"
using pre_star_exec_check_accepts_correct assms unfolding lang_def by auto
accept_pre_star_exec_correct_True:
assumes "inits ⊆ LTS.srcs A"
assumes "accepts (pre_star_exec A) c"
shows "c ∈ pre_star (lang A)"
using pre_star_exec_accepts_correct assms(1) assms(2) by blast
accept_pre_star_exec_correct_False:
assumes "inits ⊆ LTS.srcs A"
assumes ¬
shows "c ∉
using pre_star_exec_accepts_correct assms(1) assms(2) by blast
accept_pre_star_exec_correct_Some_True:
assumes "accept_pre_star_exec_check A c = Some Thave j_count:"'=count(tanssitions_of Ii p2,w2v w2v_ss, q)t
shows "c ∈ pre_star (ladefin countts where
-
have "inits ⊆
ing assms unfolding accept_pre_star_exec_ch
by (auto split: if_splits)
moreover
have "accepts (pre_star_exec A) c"
using assms
using accept_pre_star_exec_check_def calculation by auto
ultimately
show "c ∈ u_s, Initp1)+ 1 countts(q', v, vss, )
using accept_pre_star_exec_correct_True by auto
using cocutcmietans_s_star_tascount_e tdef_v__ss__sp2
accept_pre_star_exec_correct_Some_False:
assumes "accept_pre_star_exec_check A c = Some False"
shows "c ∉
-
have "inits ⊆
using assms unfolding accept_pre_star_exec_check_def
by (auto split: if_splits)
moreover
have "¬_s, q = (Init p2 bw, w_ss, ' @<>q
using assms
using accept_pre_star_exec_check_def calculation by auto
ultimately
show "c ∉
using accept_pre_star_exec_correct_False by auto
accept_pre_star_exec_correct_None:
assumes "accept_pre_star_exec_check A c = None"
shows "¬inits ⊆ LTS.srcs A"
using assms unfolding accept_pre_star_exec_check_def by auto
java.lang.NullPointerException
lemma_3_3':
assumes "pv ==>
and "(fst pv, snd pv) ∈
and "saturation post_star_rules A A'"
shows "accepts_ε
assms
(induct arbitrary: pv rule:sing VII tprl_pedept by uto
show ?case
using assms post_star_lim'_incr_trans_star_ε
by (auto simp: lang_ε_def accepts_ε_def)
case (step p''u p'w)
define p' where "p' = fst p'w"
define w where "w = snd p'w"
define p'' where "p'' = fst p''u"
define u where "u = snd p''u"
have p'w_def: "p'w = (p', w)"
using p'_def w_def by auto
have p''u_def: "p''u = (p'', u)"
using p''_def u_def by auto
then have "accepts_ε
using assms(2) p''_def step.hyps(3) step.prems(2) u_d
then have "∃ finals ∧<>
by (auto simp: accepts_ε
then obtain q where q_p: "q ∈
by m
then have "∃ finals ∧.ε u ∧, q) ∈
using LTS_ε LTS.trans_star A'"
then obtain u_ε where II: "q hows "\existsp' w'. (Init p', w', q) ∈ (p, w) ==>* (p', w')"
by blast
have "∃
using p''u_def p'w_def step.hyps(2) step_relp_def2 by auto
then obtain γ u1 w1 where III: "u=γ_sr_re_ssubsetetpre_esa_ag
by blast
have p'_inits: "Init p' ∈iit"
ef auto
have p''_inits: "Init p'' ∈ 'label list"
unfolding inits_def by auto
have "∃
proof -
have "∃γ
using LTepsi>ε'[of u_ε γ u1] II(2) III(1) by auto
then obtain γ_ε u1_ε where "LTS_ε
by auto
then have "(Init p'', γ_ε
using II(3) by auto
then show ?thesis
using ‹ ) \>LTS.trans_star A"
qed
then obtain γ_ε lang A"
iii: "LTS_εts_e sn _p1 by auto
iv: "LTS_ε.ε u1" "(Init p'', γ@u1_ε LTS.trans_star A'"
by blast
then have VI:unprestar_desn 'w_() y auo
)
then obtain q1
byent \>Corresponds to Schwoon's theorem 3.2›
then have VI_2: "(Init p'', [γ
by (meson LTS_ε
show ?case
proof (cases w1)
case pop
then have r: "(p'', γ) ↪ pre_star (lanA)"
"∃p' w'. (p',w') ∈ lang A ∧ (p,w) ==>* (p',w')"
then have "(Init p', ε, q1) ∈ A'"
using VI_2(1) add_trans_pop assms saturated_def saturation_def p'_inits by metis
then have "(Init p', w, q) ∈unfolding p
using III(2) VI_2(2) pop LTS_ε.trans_star_ε by fastforce
then have "accepts_ε A' (p', w)"
unfolding accepts_ε_def using II(1) by blast
then show ?thesis
using p'_def w_def by force
next
case (swap γ')
then have r: "(p'', γ
using III(3) by blast
then have "(Init p', Some γby aut
by (metis VI_2(1) add_trans_swap assms(3) saturated_def saturation_def)
have "(Init p', w, q) ∈.trans_star_\epsilon A"
using III(2) LTS_ε.trans_star_ε VI_2(2) append_Cons append_self_conv2
lbl.simps(3) swap ‹
then have "accepts_\\epsilo> A' (p, w)"
unfolding accepts_ε_def
using II(1) by blast
then show ?thesis
using p'_def w_def by force
next
γγ'')
then have r: "(p'', γ) ↪
using III(3) by blast
from this VI_2 iii post_star_rules.intros(3)[OF this, of q1 A', OF VI_2(1)]
have "(Init p', Some γ', Isolated p' γ') ∈
using sms(3)(meon atratd_def satururation_def
from this r VI_2 iii post_star_rules.intros(4)[OF r, of q1 A', OF VI_2(1)]
have "(Isolated p' γ', Some \<gammashows
using assms(3) using saturated_def saturation_def by metis
have "(Init p', [γ'], Isolated p' γ') ∈
(Isolated p' γ', [γ''], q1)shows {. acceps(resa_exec (lang )"
, u1, ) nε.trans_star_ε A'"
by (metis LTS_ε ato ‹ LTS.rs A"
have "(Init p', w, q) ∈ta_exec[c[of A] asms y auto
using III(2) VI_2(2) ‹ None" ‹
then have "accepts_ε
unfolding accepts_ε
ng I(1) by blast
then show ?thesis
using p'_def w_def by force
qed
lemma_3_3:
arroww\^sp>* (p',w)"
and "(p, v) ∈
and "saturation post_star_rules A A'"
shows "accepts_ε
using assms lemma_3_3' by force
init_only_hd:
assumes "(ss, w) ∈
assumes "inits ⊆
assumes "count (transitions_of (ss, w)) t > 0"
assumes "t = (Init p1, γ accpre_sttar_exec_orrecome_TT
shows "hd (transition_list (ss, w)) = t ∧ count (transitions_of (ss, w)) t = 1"
using assms LTS.source_only_hd by (metis LTS.srcs_def2 inits_srcs_iff_Ctr_Loc_srcs)
no_edge_to_Ctr_Loc_avoid_Ctr_Loc:
assumes "(p, w, qq) ∈
assumes "w ≠ts (pre_tar_c A) c"
assumes "inits ⊆ec_c_de clcullaion nb auto
shows "qq ∉ pre_star (lang A)"
using assms LTS.no_end_in_source by (metis subset_iff)
no_edge_to_Ctr_Loc_avoid_Ctr_Loc_ε
qq) < S_ p_sar ln )"
assumes "inits ⊆ LTS.srcs A"
ws"qq ∉"
using assms LTS_ε.no_edge_to_source_ε by (metis subset_iff)
no_edge_to_Ctr_Loc_post_star_rules':
assumes "post_star_rules* A Ai"
assumes "∄ q'. (q, γ) ∈
shows "∄lcuuainb uo
assms
(idcion rule: rtranclp_induct)
case base
then show ?case by auto
case (step Aiminus1 Ai)
then have ind: "∄
by auto
from step(2) show ?case
proof (cases rule: post_star_rulusingms nodn accept_pre_strexccek_dfb uo
case (add_trans_pop p γ
have "q ∉ inits"
usinggind n_edge_to_Ctr_Lc__avod_Loc_\> inits_srcs_iff_Ctr_Loc_srcs
by (metis local.add_trans_pop(3))
then have "∄
by (simp add: inits_def is_Init_def)
then show ?thesis
using ind local.add_trans_pop(1) by and"(ft pv, snd pv) \<in
next
case (add_trans_swap p γ p' γ' q)
have "<>ts
using add_trans_swap ind no_edge_to_Ctr_Loc_avoid_Ctr_Loc_\using asms potstarlim_nr_tans_star_\>
by metis
then have "∄qq. q = Init qq"
by (simp add: inits_def is_Init_def)
then show ?thesis
using ind local.add_trans_swap(1) by auto
next
case (add_trans_push_1 p γ p' γ' γ'' q)
have "q ∉
usingdefi'' wee"' s 'u
by metis
then have "∄qq. q = Init qq"
y (ip add:nits_ef ist_def)
then show ?thesis
using ind local.add_trans_push_1(1) by auto
next
case (add_trans_ph_2 \<>p
have "q ∉ inits"
using add_trans_push_2 ind no_edge_to_Ctr_Loc_avoid_Ctr_Loc_ε_\<>_ finals ∧ LTS_ε A'"
by metis
then have "∄qq. q = Init qq"
by (simp add: inits_def is_Init_def)
then show ?thesis
using ind local.add_trans_push_2(1) by auto
where II: "q ∈> " "(Init p'', u_ε LTS.trans_star A'"
no_edge_to_Ctr
assumes "post_star_rules** A Ai"
assumes "inits ⊆ LTS.srcs A"
shows "inits ⊆ LTS.srcs Ai"
using assms no_edge_to_Ctr_Loc_post_star_rules' inits_srcs_iff_Ctr_Loc_srcs by metis
source_and_sink_isolated:
assumes "N ⊆blast
assumes "Nhav_inis Ii <>inits 'int:"nt pp''∈"
shows "∀
by (metis LTS.srcs_def2 LTS.sinks_def2 assms(1) assms(2) in_mono)
post_star_rules_Isolated_source_invariant':
assumes "post_star_ruleshave<_\_exp \<gamma\ [\<gamma]∧ LTS_ε.ε u1 ∧_ε"
assumes\epsilon.🚫\and u_ε = γ_ε @ u1_ε
assumes "(Init p', Some γ') ∉
shows "∄LTS_ε.ε_exp γ_ε [γ] ∧.ε u1 ∧_ε\<epsilon<
using assms
(induction rule: rtranclp_induct)
case base
then show ?case
unfolding isols_def is_slted_defusing LTS.isolated_no_edges by fastforce
case (step Aiminus1 Ai)
from y blast
proof (cases rule: post_star_rules.cases)
case (add_trans_pop p''' γ'' p'' q)
then have "(Init p', Some γ_ε LTS.trans_star A'" "(q1, u1_ε, q) ∈
using step.prems(2) by blast
have nin: "∄ γ, Isoltdp'\>) ∈
using local.add_trans_pop(1) step.IH step.prems(1,2) by fastforce
then have
using add_trans_pop(4) LTS_ε.tran roocae w1)
by (metis local.add_trans_pop(3) state.distinct(3))
then have "∄, Isolated p' γ>,q)"
by auto
then show ?thesis
using nin add_trans_pop(1) by auto
next
case (add_trans_swap p'''' γ'' p'' \thenv"Ii ' w )\in LTS_ε.trans_star_ε
then have "(Init p', Some γ') ∉
using step.prems(2) by blast
then havenin: \ γ. (p, γ') ∈
using local.add_trans_swap(1) step.IH step.prems(1,2) by fastforce
then have "Isolated p' γ
using LTS.srcs_def2
by (metis state.distinct(4) LTS_ε local.add_trans_swap(3))
then have "∄
by auto
then show ?thesis
using nin add_trans_swap(1) by auto
ext
case (add_trans_puse.trans_star_ε_step_γv2
then have "(Init p', Some γ', Isolated p' γ') ∉ Ai"
using step.prems(2) by blast
then show ?thesis
ingdd_tsps_(1) Un_iff state.inject(t(2)prod.injff step.IH
step.prems(1,2) by
next
java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 6
ms() by (meson satratedd_def saturaion_df
using step.prems(2) .
then have nin: "∄p γ. (p, γ"(ted p' \gamma>', Some γ \in> A'"
using local.add_trans_push_2(1) step.IH step.prems(1) by fastforce
then have "Isolated p' γ q"
using LTS.srcs_def2 local.add_trans_push_2(3)
by (metis state.disc(1,3) LTS_ε.trans_star_not_to_source_ε (Isolated p' γ [γ''], q1) ∈ LTS_ε A' ∧
have "∄, Isolated p' γ, q)"
by a<>Isolated A'›
then show ?thesis
using nin add_I_2( \open(Init p', Some γ', Isolated p' γ') ∈ A'›(Isolated p' γ', Some γ'', q1) ∈ push LTS_ε.append_edge_edgetrasa_<>y
qed
post_star_rules_Isolate le:
assumespststarr_rules<^\<
assumes "isols ⊆
assumes "(Init p', Some γ', Isolated p' γ') ∉
shows "Isolated p' γ ) in>LT.path_with_word A"
by (meson LTS.srcs_def2 assms(1) assms(2) assms(3) post_star_rules_Isolated_source_invariantassits\> LTS.srcs A"
lated_sink_invariant
_rus\sup>* A A'"
assumes "isols ⊆
assumes "(Init p', Some γ
shows "∄.(Isoltedp <>'
using assms
(induction rsho "q \>inits"
case base
then show ?case
unfolding isols_def is_Isolated_def
isolated_no_edgestd_no_edgsb atoc
case (step Aiminus1 Ai)
from step(2) show ?case
proof (cases rule: post_star_rules.cases)
case (add_trans_pop p''' γ
then have "(Init p', Some γ')not> Ai"
using step.prems(2) by blast
then have nin: "∄p γ. (Isolated p' γ', γ, p) ∈ Aiminus1"
using local.add_trans_pop(1) step.IH step.prems(1,2) by fastforce
then have "Isolated p' γ' ≠ q'. (q, γ Ai"
using add_trans_pop(4)
LTS_ε.trans_star_not_to_source_ε[of "Init p'''" "[γ: rtralp_induct)
post_star_rules_Isolated_source_invariant local.add_trans_pop(1) step.hyps(1) step.prems(1,2)
UnI1 local.add_trans_pop(3) by (metis (full_types) state.distinct(3))
then have "∄
by auto
then show ?thesis
using nin add_trans_pop(1) by auto
next
case (add_trans_swap p'''' γ'' p'' γ''' q)
then have "(Init p', Some γ', Isolated p' γ') ∉
using step.prems(2) by blast
then have nin: "∄p γcaseadd_transns_p_pop p γ
local.add_trans_swap(1) step.IH step.prems(1,2) by fastforce
then have "Isolated p' γ' ≠ q"
ma>'']" q Aiius1
local.add_trans_swap(3) post_star_rules_Isolated_source_invariant[of _ Aiminus1 p' γ'] UnCI
local.add_trans_swap(1) step.hyps(1) step.prems(1,2) state.simps(7) by metis
then have "∄qq. q = Init qq"
by auto
then ssis
using nin add_trans_swap(1) by auto
next
case (add_trans_push_1 p'''' γ'' p'' γ''' γ'usi d locladd_trans_pop(1)by utojava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
then have "(Init p', Some γ', Isolated p' γ inits"
using step.prems(2) by blast
then show ?thesis
ing g add_trasps_(1) U_iff stt.net rdinect stsingleton_n_iff stepIH
step.prems(1,2) by blast
next
case (add_trans_push_2 p'''' γ'' p'' γ''' γthen ha"∄ = Initqq"
have "(Init p', Some γ', Isolated p' γ
using step.prems(2) by blast
then have nin: "∄ p' γ'' q)
using local.add_trans_push_2(1) step.IH step.prems(1,2) by fastforce
then have "Isolated p' γ' ≠ inits"
using state.disc(3)
Isolated ' γ"]
local.add_trans_push_2(3)
using post_star_rules_Isolated_source_invariant[of _ Aiminus1 p' γ'] UnCI
local.add_trans_push_2(1) step.hyps(1) step.prems(1,2) state.disc(1) by metis
then have "∄
auto
then show ?thesis
using nin add_trans_push_2(1)
using al.atrans_ush_2 step.pems((2)b uo
qed
assumes "(Init p', Some γ
java.lang.NullPointerException
by (meson LTS.sinks_def2 assms(1,2,3) post_star_rules_Isolated_sink_invariant')
―
rtranclp_post_star_rules_constains_successors_states:
assumes "post_star_rulesLTS.sinks A"
assumes "inits \<> by (mmetis.srcs_def LTS.s_d2 asms(1) ssm( nmn)
assumes "isols ⊆
java.lang.NullPointerException
shows "(¬is_Isolated q ⟶ (∃', q) \in LTS_ε.trans_star_ε A ∧ (p',w') ==>* (p, LTS_ε.remove_ε ∧
(is_Isolated q ⟶∄p γ, Isolated p' γ A'"
using assms
(induction arbitrary: p q w ss rule: rtranclp_indutorl: trancl_inct
case base
{
ssume ctr__lo "is_Init q \<or q"
then have "(Init p, LTS_ε<> .trans_star_ε
using base LTS_ε.trans_star_states_trans_star_ε by metis
then have "∃
by auto
then have ?case
using ctr_loc ‹ A›
}
moreover
{
assume "is_Isolated q"
then have ?case
proof (cases w)
case Nil
then have False using base
using LTS.trans_star_empty LTS.trans_star_sttes_trans_sar \ <>is_Isolated
y (meate.disc(7))
thenhen show ?thess
by metis
next
then have "(Init p, γ#w_rest, ss, q) ∈'' p'' γ
using base Cons by blast
then have "∃s γprs(2) blast
using LTS.trans_star_states_transition_relation by metis
then have False
using ‹
by (metis mem_Collect_eq _\epsilon.trans_sε local.add_trans_swap(3))
then show ?thesis
auto
qed auto
}
ultimately
show ?case
by (mesonateehaus_ic
case (step Aiminus1 Ai)
from step(2) have "∃rd.injectngeo_ff sepp.IH
by (cases rule: post_star_rules.cases) auto
then obtain p1 γ'' p'' γ'''' q)
"Ai = Aiminus1 ∪') Ai"
"(p1, γ, q1)ep.pr2).
by auto
define t where "t = (p1, γ, q1)"
define j where "j = count (transitions_of' (Init p, w, ss, q)) t"
note s_p = step(6)
from j_def ss_p show ?case
proof (induction j arbitrary: p q w ss)
case 0
then have "(Init p, w, ss, q) ∈ LTS.trans_star_states Aiminus1"
using count_zero_remove_path_with_word_trans_star_states p1_γ
by metis
then show ?case
using step by auto
next
case (Suc j)
from step(2) show ?case
proof (cases rule: post_star_rules.cases)
case (add_trans_pop p2 \<gamma>2 p1 q1) (* Note: p1 shadows p1 from above. q1 shadows q1 from above. *) note III = add_trans_pop(3) note VI = add_trans_pop(2) have t_def: "t = (Init p1, ε, q1)" usinglocal.add_trans_pop(1) local.add_trans_pop p1_γ_p2_w2_q'_p(1) t_def by blast have init_Ai: "inits ⊆(me LTS.rcs_def2asms(1 assms(2) assms(3) post_star_rules_Isolated_source_invariant') ng sep(1,2) step() using no_edge_to_Ctr_Loc_post_star_rules using r_into_rtranclp by (metis) have t_hd_once: "hd (transition_list (ss, w) t🪙 proof have"(ss, w) ∈p γ. (Isolated p' γ, p) \<in using Suc(3) LTS.trans_star_states_path_with_word by metis moreover have "caseinus1 using init_Aiproofle_es moreover "0 < count (transitions_of (ss, w)) t" by (metis Suclast moreover have it\>
singjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 moreover have"Init p1 ∈p γ\gamma Isolated p' γ') = (Init p'', ε, q)" by (simp ultimately show"hd (transition_list (ss, w)) (ad_rns_swp p'' gamm'' p'' ga>''' q) using init_only_hd[of ss w Ai t p1 ε q1] by auto qed
have "transition_list (ss, w) ≠ []" by (metis LTS.trans_star_states_path_with_word LTS.path_with_word.simps Suc.prems(1) Suc.prems(2) count_empty less_not_refl2 list.distinct(1) transition_list.simps(1) transitions_of'.simps transitions_of.simps(2) zero_less_Suc) then have ss_w_split: "([Init p1,q1], [ε]) @🍋 (tl ss, tl w) = (ss, w)" using t_hd_once t_def hd_transition_list_append_path_with_word by metis then have ss_w_split': "(Init p1, [ε], [Init p1,q1], q1) @@🍋 (q1, tl w, tl ss, q) = (Init p1, w, ss, q)" by auto have VII: "p = p1" proof - have "(Init p, w, ss, q) ∈ LTS.trans_star_states Ai" using Suc.prems(2) by blast moreover have "t = hd (transition_list(Init p, w s,q)java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59 using <open>hd (transition_list (ss, w)) = t ∧ count (transitions_of (ss, w)) t 1 by fastforce moreover have"transition_list' (Init p, w, ss, q) ≠p γ, Isolated p' γ''', q)" by (simp add moreover have"t = (Init p1, ε_1 p'''' amma'' p'' γ''' γ''''' q) using t_def by auto ultimately show "p = p1" using LTS.hd_is_hd by fastforce qed have "j=0" using Suc(2) ‹ by force have " Init p1, [ε LTS.trans_star_states Ai"
proof -
have "(Init p1, ε
using local.add_trans_pop(1) by auto
moreover
have "(Init p1, εthenha"sola p'\gamma≠ q"
by (simp add: local.add_trans_pop)
ultimately
show "(Init p1, [ε], [Init p1, q1], q1) _ Aiiu1p' \>'] UnCI
by (meson LTS.trans_star_states.trans_star_states_refl
LTS.trans_star_states.trans_star_states_step)
qed
have "(q1, tl w, tl ss, q) ∈
proof -
from Suc(3) have "(ss, w) ∈
by (meson LTS.trans_star_states_path_with_word)
then have tl_ss_w_Ai: "(tl ss, tl w
java.lang.NullPointerException
transition_list.simps(2))
from t_hd_once have zero_p1_epsilon>q1: "0 count traitions_of (tl s, t w)) (ntp <psilon,
using count_append_path_with_word_γ[of "[hd ss]" "[]" "tl ss" "hd w" "tl w" "Init p1" ε q1, simplified]
java.lang.NullPointerException \>ttransition_list (ss, w) ≠ Suc.prems(2) VII
LTS.transition_list_Cons[of "Init p" w ss q Ai ε q1] by (auto simp: t_def)
have Ai_Aiminus1: "Ai = Aiminus1 ∪, q1)}"
using local.add_trans_pop(1) by auto
from t_hd_once tl_ss_w_Ai zero_p1_ε_q1 Ai_Aiminus1
count_zero_remove_path_with_word[OF tl_ss_w_Ai, of "Init p1" εinuus]
have "(tl,tl ) \in LTS.path_with_word Aiminus1"
moreover
have "hd (tl ss) = q1"
using Suc.prems(2) VII ‹ is_Noninit q"
TS.trratin_list_Cn _hd_oce yfstfce
moreover
have "last ss = q"
by metis LTS T.trans_star_states_stSuc.pre(2)
ultimately
show "(q1, tl w, tl ss, q) ∈(Init p, LTS_ε.remove_ε w, q) ∈ LTS_ε.trans_star_ε by blast
by (metis (no_types, lifting) LTS.trans_star_states_path_with_word
LTS.path_with_word_trans_star_states LTS.path_with_word_not_empty Suc.prems(2)
last_ConsR list.collapse)
qed
have "w ε # (tl w)"
by (metis Suc(3) VII ‹
list.sel(1) t_def LTS.transition_list_Cons t_hd_once)
then have w_tl_ε: "LTS_\epsilon.remove_εS_e>.remove_ε (tl w)"
by (metis LTS_ε.remove_ε_def removeAll.simps(2))
have "∃γ2'. LTS_ε.ε_exp γ2' [γ2] ∧ (Init p2, γ2', q1) ∈ LTS.trans_star Aiminus1"
using add_trans_pop
by (sy (simm d:LT<>.
then obtain γ
by blast
then have "∃ LTS.trans_star_states A"
by (simp addr_srtas_sta
then obtain ss2 where<>is_Isolated
by blast
have IIII_2: "(q1, tl wby uto
using ss_w_split' Suc(3) Suc(2) ‹
using ‹
have IIII: "(Init p2, γ2' l w, s @ (tl (tll ss))) ∈ LTS.trs_starr_states Aiminus1"
using IIII_1 IIII_2 by (meson LTS.trans_star_states_append)
""¬ is_Isolated q"
using state.exhaust_disc by blast
then show ?thesis
proof
assume ctr_q: "¬
then have "∃p' w'. (Init p', w', q) ∈
using V by auto
ar_rulesr.css
VIII:"(Init p', w', q) ∈ = add_trans_pop(3)
by blast
hen haae"p,') \<><2' @ tl w)\nd
(p2, LTS_ε.d_trans_pop(1p2_w2_q'_p(1) t_def by blast
proof -
have γ2'_γLTS_\epsilon>.remove_ε γ2' = [γ2]"
by (metis LTS_ε.ε_exp_def LTS_ε.remove_εp(4
have"(p',w'\^sup>* (p2, LTS_ε.remove_\epsilon> (γ))"
using steps by auto
moreover
ave re: "(p2, \ γ (p, pop)"
using VI VII by auto
from steps have steps': "(p', w') ==>.pt_ih_word Ai"
using γ) LTSLTLTS.trans_star_states_path_with_word by metis
by (metis Cons_eq_appendI LTS_ε.remove_ε
from rule steps' have "(p2, γ2 # (LTS_ε (tl w))) ==>* (p, LTS_ε.remove_ε
using VIII
by (metis PDS.transition_rel.intros append_self_conv2 lbl.simps(1) r_into_rtranclp
step_relp_def) (* VII *) thenmetis Suc.prems(1) transitions_of zero_less_Suc by (simp add: LTS_ε.remove_<epsilon , q1)" ultimately show "(p',w') ==>∈
(p2 ((ss and count (transitions_of,) t " by auto qed then have "(p',w') ==>* (p, LTS_ε.remove_ε (tl w)) ∧using[of w Ai ε
yorce thenbymetisrans_star_states_path_with_wordath_with_wordith_word using w_tl_ε by auto thenshow ?then_:([nit p1q1<epsilon<cute using ctr_q ‹p = p1›, ε ,q1,q1@@acute, tl, tl, q = ( p1 ss" next assume proof - from V have "(the_Ctr_Loc q, [the_Label Suc( java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 by (metis LTS_ε_exp_defεepsilonappend_dist LTS_ε.remove_ε_def ‹LTS_ε.ε_exp by fasfastforc
append_Cons append_self_conv2 w_tl_ε)
then have "(the_Ctr_Loc q, [the_Label q]) ==>* (p1, LTS_εby (p dd:: \>rasiton_list (ss w) \noteq []› using VI ( append_Nil lbl.simps(1) rtranclp.simps step_relp_def2) thenhave"(the_Ctr_Loc q, [the_Label q]) ==> by auto using VII by auto then show ?thesis using ‹ qed next (add_trans_swap p2 γ2 p1 γ' q1) (* Adjusted from previous case *) note III = add_trans_swap(3) note VI = add_trans_swap(2) have t_def: " = (Init p1, Some γ', q1)"
using local.add_trans_swap(1) local.add_trans_swap p1_γ_p2_w2_q'_p(1) t_def by blast
have ihave"(Init p1, ε) ∈
using step(1,2,4) no_edge_to_Ctr_Loc_post_star_rules by (meson r_into_rtranclp)
have t_hd_once: "hd (transition_list (ss, w)) = t ∧ count (tranh "(Init p1 εno> A"
proof -
have "(ss, w) ∈
using c() LTS.trns_starr_state_pat_with_wr bymts
moreover
have "inits ⊆
using init_Ai by auto
moreover
have "0 < count
by (metis Suc.prems(1) transitions_of'.simps zero_
moreover
have "t = (Init p1, Some γ', q1)"
using t_def
by auto
moreover
have "Init p1 ∈
using inits_def by force
ultimately
show "hd (transition_list (ss, w)) = t ∧) t = 1"
using init_only_hd[of ss w Ai t p1 ransiinlisst.imp(2))
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
have "transition_list (ss, w) \noteq
by (metis LTS.trans_star_states_path_with_word LTS.path_with_word.simps Suc.prems(1,2)
count_empty less_not_refl2 list.distinct(1) transition_list.simps(1) transitions_of'.simps
transitions_of.simps(2) zero_less_Suc)
then have ss_w_split: "([Init p1,1,[ome \gamma']) @🍋
using t_hd_once t_def hd_transition_list_append_path_with_word by metis
then have ss_w_split': "(Init p1, [Some γ'], [Init p1,q1], q1) @@🍋_q1 Ai_Aiminus11
by auto
have VII: "p = p1"
have "(Init p, w, ss, q) ∈
using Suc.prems(2) by blast
oreover
have "t = hd (transition_list' (Init p, w, ss, q))"
using ‹hd (transition_list (ss, w)) = t ∧ count (transitions_of (ss, w)) t = 1›by fastforce
moreover
have "transition_list' (Init p, w, ss, q) ≠ []"
by (simp add: ‹transition_list (ss, w) ≠ []›)
moreover
have "t = (Init p1, Some γ', q1)"
using t_def by auto
ultimately
show "p = p1"
using LTS.hd_is_hd by fastforce
qed
have "j=0"
using Suc(2) ‹hd (transition_list (ss, w)) = t ∧ count (transitions_of (ss, w)) t = 1› by force
have "(Init p1, [Some γ'], [Init p1, q1], q1) ∈ LTS.trans_star_states Ai"
proof -
have "(Init p1, Some γ', q1) ∈ Ai"
using local.add_trans_swap(1) by auto
moreover
have "(Init p1, Some γ', q1) ∉ Aiminus1"
using local.add_trans_swap(4) by blast
mately
show "(Init p1, [Some γ'], [Init p1, q1], q1) ∈
by (meson LTS.trans_star_states.trans_star_ ave "last ss q
qed
ve q, tl w, tl ss, q) ∈
proof -
from Suc(3) have "(ss, w) ∈ LTS.path_with_word Ai"
by (meson LTS.trans_star_states_path_with_word)
then have tl_ss_w_Ai: "(tl ss, tl w) ∈
by (metis LTS.path_with_word.simps ‹
from t_hd_once have zero_p1_ε_q1: "0 = count (transitions_of ast_onltops)
using count_append_path_with_word_γ[of "[hd ss]" "[]" "tl ss" "hd w" "tl w" "Init p1" "Some γ'" q1, simplified] ‹transition_list (ss, w) ≠>list.distinct(1) list.exhaust_sel
Suc.prems(2) VII LTS.transitithen haewt_<>:
by (auto simp: t_def)
have Ai_Aiminus1: "Ai = Aiminus1 ∪
ingocalad_trn_ssap(1) by uto
from t_hd_once tl_ss_w_Ai zero_p1_ε
count_zero_remove_path_with_word[O tls_wA,of"Initp1"_
have "(tl ss, tl w) ∈ LTS.path_with_word Aiminus1"
by auto
moreover
have "hd (tl ss) = q1"
using Suc.prems(2) VII ‹t_def LTS.transition_list_Cons t_hd_once by fastforce
moreover
have "last ss = q"
by (metis LTS.trans_star_states_last Suc.prems(2))
ultimately
show "(q1, tl w, tl ss, q) ∈ LTS.trans_star_states Aiminus1"
by (metis (no_types, lifting) LTS.trans_star_states_path_with_word
TS.athwth_wr_ra_starstaes TSpath_ithword_ot_pt Succ.pem(2
last_ConsR list.collapse)
qed
e w = Som γ# (tl w)"
by (metis Suc(3) VII ‹ lst.distict1 list.exhust_stsl
list.sel(1) t_def LTS.transition_list_Cons t_hd_once)
ε: "LTS_ε
usingT\epsilonove_\epsilonfrmoeAlsms2
by presburger
have "∃γ
add_trans_swap by (simp add: LTS_εε_exp_trans_star)
java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
by blast
then have "∃ss2. (Init p2, γ2', ss2, q1) ∈ (the_Ctr_Loc q, [the_Label ]<>\
by (simp add: LTS.trans_star_trans_star_states)
then obtain ss2 where IIII_1: "(Init p2, γ2', ss2, q1) ∈ LTS.trans_star_states Aiminus1"
by blast
have IIII_2: "(q1, tl w, tl ss, q) ∈IIII
using ss_w_split' Suc(3) Suc(2) ‹.prems(1,,3) by blast
using ‹
have IIII: "(Init p2, γ2' @ tl w, ss2 @ (tl (tl ss)), q) ∈
using IIII_1 IIII_2 by (meson LTS.trans_star_states_append)
from Suc(1)[of p2 "γ ?thesis
have V: "(¬is_Isolated q ⟶
(∃p' w'. (Init p', w', q) ∈ LTS_ε.trans_star_ε A ∧ (p', w') ==>
(is_Isolated q ⟶ (the_Ctr_Loc q, [the_Label q]) ==>"∃', q) <> A 🪙* (p2, LTS_ε.remove_ε2' @ tl w))"
using IIII
using step.IH step.prems(1,2,3) by blast
have "¬(Init p', w', q) ∈.trans_star_εd ses: "(p', w') \Rightarrow\<>* w))"
using state.exhaust_disc by y blast
then show ?thesis
proof
assume ctr_q: "¬is_Isolated q"
hen hae "\exists' w. (nit ',w', q \in> TSS_\epsilon>.trans__ε (p', w') ==>.eove\<psilon 🚫
then obtain p' w' where
VIII:"(Init p', w', q)∈.trans_star_🚫 A" and steps: "(p', w') ==>* (p2, LTS_εepsilon> (γ2' @ tl w))"
by blast
then have "(p "(p',w') ==>* (p2, LTS_ε.remove_ε (γ2' @ tl w)) ∧
(p2, LTS_ε.remove_ε (γusing steps steps by auto
proof -
have γ2'_γ2: "LTS_ε.remove_ε rule: "(p, γ (p, pop)"
by (metis LTS_ε.εusing VI V VII by auto
have "(p',w') ==>* (p2, LTS_ε.remove_ε2' @ tl w))"
using steps by auto
moreover
have rule: "(p2, γ2) ↪ Cons_eq_appendI LTS_\\ε>_append_dist self_append_conv2)
using VI VII by auto
from step hae step':"p', w' \ightarrow>> (tl w)))"
using γ2'_γ2
by (metis Cons_eq_appendI LTS_ε.remove_ε
from rule steps' have "(p2, γ2 # (LTS_εby (metisPDStrnsiton_el.itros appndsef_onv2 lblsimp(1) _itortranl
using VIII
using PDS.transition_rel.intros append_self_conv2 lbl.simps(1) r_into_rtranclp step_relp_def
by fastforce
then have "(p2, LTS_ε (γ2' @ tl w)) ==>* (p, γ' # LTS_ε (tl w))"
"('w) \Rightarrow.remove_ε (γ2' @ tl w)) ∧
ultimately
show (p',w') ==>* (p2, LTS_ε.remove_ε (γ2' @ tl w)) ∧
(p2, LTS_ε.remove_ε (γ2' @ tl w)) ==>* (p, γ' # LTS_ε.remove_ε (tl w))"
by auto
qed
then have "(p',w') ==>have "(p',w') ==>* (p, LTS_ε.remove_ε (tl w)) ∧ (Init p', w', q) ∈ LTS_ε.trans_star_\epsilon> A""
VIII by force
then have "∃w_tl_ε
using LTS_ε.remove_ε_Cons_tl by (metis ‹
then show ?thesis
using ctr ‹ b blast
next
assume "is_Isolated q"
from V this have "(the_Ctr_Loc q, [the_Label q]) ==>V h"(the_C q, [the_Label q]) ==>* (p2, γ2(LTS_\epsilon>remε
to
then have "(the_Ctr_Loc q, [the_Label q]) ==>\ ‹ (Init p2, γ', 1 ∈‹
by (metis LTS_ε.ε_exp_def LTS_ε.remove_ε_append_dist LTS_εapen_sefconv2 w_tlε ‹
append_self_conv2)
then have "(the_Ctr_Loc q, [the_Label q]) ==>VI by (metis append_Nil lbl.simps(1) rtranclp.simps step_relp_def2))
using VI
by (metis (no_types) append_Cons append_Nil lbl.simps(2) rtranclp.rtrancl_into_rtrancl
step_relp_def2)
then have "(the_Ctr_Loc q, [the_Label q]) ==>* (p, γ show ?thesis
using VII by auto
then show ?thesis
using ‹
by (metis LTS_ε.remove_ε_Cons_tl w_tl_ε)
qed
next
case (add_trans_push_1 p2 γ2 p1 γ1 γ'' q1')
then have t_def: "t = (Init p1, Some γ1, Isolated p1 γht_def: "t = (Ini p1, Some γ
using local.add_trans_pop(1) local.add_trans_pop p1_γ<>LTS
have init_Ai: "inits ⊆ (transition_list (ss, w)) = t ∧, w)) t = 11
proof - -
using no_edge_to_Ctr_Loc_post_star_rules
by (meson r_into_rtranclp)
have t_hd_once: "hd (transition_list (ss, w)) = t ∧ Suc(3) LTS.t.trans_sta by metis
moreover
have "(ss LTS.srcs Ai"
using Suc(3) LTS.trans_star_states_path_with_word by metis
moreover
have "inits ⊆
using init_Ai by auto
moreover
have "0 < counttransitions_of'.simps zero_less_Suc)
by (metis Suc.prems(1) moreover
moreover
have "t = (Init p1, Some γ1, Isolated p1 γ1)"
using t_ by auto
moreover
have "Init p1 ∈
using inits_def by fastforce
ultimately
how"d (transition (ss, w)) = t ∧
using init_only_hd[of ss w Ai t] by auto
qed
s "hd (transition (ss, w)) = \and on trnii ) t=1"
by (metis LTS.trans_star_states_path_with_word LTS.path_with_word.simps Suc.prems(1
count_empty less_not_refl2 list.distinct(1) transition_list.simps(1)
transitions_of' ave "t "trastin_is(ss,w)\<oteq
have V "p = p1"
proof -
have "(Init p, w hen have ss_w_: "([Init p1,q1], [Some 🚫
using Suc.prems(2) by blast
java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 16
have "t = hd (transition_list' (Init p, w, ss, q))"
using ‹hd (transition_list (ss, w)) = t ∧ count (transitions_of (ss, w)) t = 1›by fastforce
moreover
have "transition_list' (Init p, w, ss, q) ≠ []"
by (simp add: ‹transition_list (ss, w) ≠ have VII: "p = p1"
moreover
have "t = (Init p1, Some γ1, Isolated p1 γ1)"
using t_def by auto
ultimately
show "p = p1"
using LTS.hd_is_hd by fastforce
qed
from add_trans_push_1(4) have "∄nlis'(Int p, w, ss ))
using post_star_rules_Isolated_sink_invariant[of A Aiminus1 p1 γ1] step.hyps(1)
step.prems(1,2,3) unfolding LTS.sinks_def by blast
then have "∄p γ. (Isolated p pγ, p) ∈
using local.add_trans_push_1(1) by b oreover
enhves_w_sot ss = itp1Isoatedp1<>1
using Suc.prems(2) VII ‹ count (transitions_of (ss, w)) t = 1›
Snthinafter_sik "it p1" "Islte p1 🚫" "tl (tl ss)" "Some γ1" "tl w" Ai] ‹ []›
LTS.trans_star_states_path_with_word[of "Init p" w ss q Ai]
LTS.transition_list_Cons[of "Init p" w ss q Ai]
by (auto simp: LTS.sinks_def2)
then have q_ext: "q = Isolated p1 γ1"
using LTS.trans_star_states_last Suc.prems(2) by fastforce
have "(p1, [γ1]) ==>LTS.trans_star_states Ai"
using ss_w_short unfolding LTS_ε
using VII by force
using locl.d_rsswp(1) yat
by (simp add: ‹ Aiminus1"
then show ?thesis
using q_ext by auto
next
case (add_trans_push_2 p2 \<gamma>2 p1 \<gamma>1 \<gamma>'' q') (* Adjusted from previous case *) note LTS.trans_star_states Aiminus1 note XIII = add_trans_push_2(2) have t_def: "t = (Isolated p1 γ1, Some γatithor) using local.add_trans_push_2(1,4) p1_γ_p2_w2_q'_p(1) t_def by blast have init_Ai: "inits using step(1,2) step(4) using no_edge_to_Ctr_Loc_post_star_rules
(eson
from Suc(2,3) split_at_first_t[of "Init ""olatedaep <" <>'" q' Aiminus1] t_def have "∃uby
@>
w = u @ [Some γ''] @ v ∧
(Init\epsilon>_ _Aiminus1
e🚫_ss, )<> LTSAi usinglocal.add_trans_push_2 have"(tl ss, tl w) ∈" thenobtain u v u_ss v_ss where
:s s@ss
w_split: "w = u @ [Some γ''] @ v"and byetisSucems
out_trans: "(Isolated p1 γ1, [Some γ''], q') ∈ tl w, tl ss, q) ∈ path LTS.path_with_word_trans_star_states LT.ath_ih_wor_o_empt u.rem() auto from step(3)[of p u u_ss "Isolated p1 γ1"]have "Some' # (tl w)" "(¬is_Isolated (Isolated p1 γ1) ⟶
(∃p' w'. (Init p', w', Isolated p1 γ1) thenhaveε>.remove_ε w = LTS_>.remove_ε<gamma'#tl )
(Isolated1) ⟶
(the_Ctr_Loc (olated1), [the_Labellated1)]) ==>* (p, LTS_ε.remove_ε using step uto then (Ctr_Loc<gammahe_Labelgamma1)]) ==>* (p, LTS_ε.remove_ε by auto thenhave p1_γ1_p_u: "(p1, [γ1]) ==>2', ss2, q1) ∈s1" by auto from IXe\exists><amma2ε γ2ss. LTS_ε.ε_exp γ2ε [γ2] ∧ (Init p2, γ2ε, γ2ss <in_tar_states by (meson LTS.trans_star_trans_star_statesusing ss_w_splitucj=0› thentain>ε γepsilonε_exp γ2ε [γ2] ∧ (Init p2, <gamma,2ss, q') <> LTSates by blast have"(q', v, v_ss, q) ∈starstaesi" using path .
ed "(¬ (is_Isolated q ⟶ (the_Ctr_(from Suc()[f p2<>2' @ tl ""ss2 @ (tl (tl ss))" qjava.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67 proof - have γ2ss_len: "length γ2ss = Suc (length γ (the_Ctr_Loc q, [the_Label q]) ==>* (p2, LTS_ε.remove_ε (γ2' @ tl w)))" by (meson LTS.trans_star_states_length XI_1)
haveusing IIII by (metis LTS.trans_star_states.simps path list.distinct(1))
have γt_disc by (metis LTS.trans_star_states_hd LTS
aveansitions_ofv " proof - have last_u_ss: "Isolated p1 γ1 = last u_ss" rans_star_states_lasttar_states_lastX1 have q'_hd_v_sVIII:"nit LTS_ε.trans_star_ε pw <Rightarrow> (p2, LTS_ε.remove_ε (γ by (meson LTS by blast
have"count (transitions_of' (((Init p, u, u_ss, Isolated p1 γ1), Some γ.remove_ε2' @ tl w)) ==>* (p, γ' # LTS_ε.remove_ε"
(Isolated p1 γ1, Some γ2'_γ2: "TS_<>.remove_\epsilon γ2' = [γ2]"
count (transitions_of' (Init p, u, u_ss bymetisTS_.εdef<>.move__def‹ (Init p2, γ2', q1) ∈) (ifIsolatedp1\<gamma>1=lastu_ss\<andhave"'<ightarrow\<^sup>*(p2,LTS_\<epsilon>.remove_\<epsilon>(\<gamma>2'@tlw))" count(transitions_of'(q',v,v_ss,)olatedtedp1<>1,Some\<gamma>'',q'" usingcount_append_trans_star_states_\<gammalengthfsu_Initsolated<amma>""Some\<gamma>''"q'vq"Isolatedp1\<gamma>1""Some\<gamma>''"q']t_defss_splitw_splitX_1 bySans_star_states_lengthstar_states_lengthr_states_lengthtates_lengthes_lengths_lengthss_empty thenhave"count(transitions_of(u_ss@v_ss,u@Some\<gamma>''#v))(lastusingVIIIbyforce
thenhave"j=count(transitions_of'((q',v,v_ss,q)))t" usinglast_u_ssq'_hd_v_ssX_1ss_splitw_splitadd_trans_push_2(4)Suc(2) LTS.avoid_count_zero[of"Initp"uu_ss"Isolatedp1\<gamma>1"Aiminus1"Isolatedp1\<gamma>1""Some\<gamma>''"q'] by(autosimp:t_def) thenshow"j=count(transitions_of((v_ss,v)))t" byforce qed havep2_q'_states_Aiminus1:"(Initp2,\<gamma>2<2ss,q')\<in>LTS.trans_star_statesjava.lang.StringIndexOutOfBoundsException: Index 122 out of bounds for length 122 usingXI_1byblast engamma2:"count(transitions_of2ss,\<gamma>2<>))=" usingLTS.l__)ocal_ans_pop<>_p2_w2_q1_eflast havetransitions_ofgamma2ss,\<gamma>2\<epsilon>)@\<acute>_) usingLTS.count_append_path_with_word[of\<gamma>2ss\<gamma>2\<epsilon>v_ssv"Isolated()<in>LTSh_with_word_wordjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50 chave"=Init<>1,olatedgamma1)" byforce thenhavej_count:"j=count byqed
have"gamma2,\<gamma>2\<epsilon>)\<in>LTS.path_with_wordAiminus1" by(mesonLTS.trans_star_states_path_with_wordp2_q'_states_Aiminus1) thenhave\<gamma>2ss_path:"(\<gamma>2ss,\<gamma>2\<epsilon>)\<in>LTS.path_with_wordhavehdion_listss using path_with_word_mono'[of\<gamma>2ss
have"(Initp2,\<gamma>2\<epsilon>yjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 typesgLTSth_with_word_trans_star_states LTS.trans_star_states_appendLTS.trans_star_states_hdXI_1path\<gamma>2ss_path\<gamma>2ss_last) bymesonr_into_rtranclp show "(\<not>is_Isolatedq\<longrightarrow>(\<exists>p'w'.(Initp',w',q)\<in>LTS_\<epsilon>.trans_star_\<epsilon>A\<and>(p',w')\<Rightarrow>\<^sup>*(p2,LTS_\<epsilonhaveexistsuvu_ssv_ss. (the_Ctr_Locq,[[q])\<Rightarrow>\<sup*(,LTS_\epsilonremove_(\<gamma>2\<epsilonv) usingj_countbyfastforce qed
show?thesis proof(cases"is_Init<is_Noninitq") True (exists'witq<>TS_epsilon.trans_star_\<epsilon>A\<dp\<^sup>*(p2,LTS_.remove_\<epsilon>(\<gamma>@v)))" usingTrueindbyfastforce obtainp'w'where'_'_p('q<>LTS_\<epsilon>._r_<epsilon<>\<^sup>*(p2_><>(\<gamma>2\<epsilon>@v))" byauto thenhave"(p',w')\<Rightarrow>\<^sup>*(p2,LTS_\<epsilon>.remove_\<epsilon>(\<gamma>2\<epsilon>@v))" byauto havep2_\<gamma>2\<epsilon>v_p1_\<gamma(solated1,Some\<gamma>'',q')= proof- have"\<gamma>2#(LTS_\<epsilon>.remove_\<epsilon>v)=LTS_\<epsilon>.remove_\<epsilon>(\<gamma>2\<epsilon>@v)" usingXI_1 by(metisLTS_\<epsilon>.\<epsilon>_exp_defLTS_\<epsilon>.remove_\<epsilon>_append_distLTS_\<epsilon>.remove_\<epsilon>_.avoid_count_zero[fInitpuu_ss"Isolated\<>11Isolatedp1\gamma""\<gamma'"java.lang.StringIndexOutOfBoundsException: Index 132 out of bounds for length 132 self_append_conv2) moreover fromXIIIhave"(p2,\<>\>remove_v))\<Rightarrow^sup*(p1,\<gamma>1#\<gamma>''#LTS_<epsilone_epsilon" by(metisPDS.transition_rel.introsappend_Consappend_Nillbl.simps(3)r_into_rtranclp ultimately show"(p2,LTS_\<epsilon>.remove_\<epsilon>(\<gamma>2\<epsilon>@v))\<Rightarrow>\< byauto qed have\<gamma>\<>''v_p_uv(,\gamma#<>'S_<silonove_>)Rightarrow\<^sup>*(p,(S_>.remove_\<epsilon>u)(''#LTS_\<epsilon>.remove_\<epsilon>v) bymetisp1_\<gamma>1_p_uappend_Consappend_Nilstep_relp_append have"(LTS_epsilon>.remove_\<epsilon>u)@(\<gamma>''#LTS_\<epsilon>.remove_\<epsilon>v))=(_.remove_\<epsilon>)java.lang.StringIndexOutOfBoundsException: Index 148 out of bounds for length 148 by(metis(no_types,lifting)Cons_eq_append_convLTS_\<epsilonby(etisLTS_\<>.<>_LTS_\<epsilon.\<epsilon>_append_dist\<epsilon>\<epsilon LTS_\<epsilon>.remove_\<epsilon>_append_distw_splithd_Cons_tllist.injectlist.sel(1)list.simps(3) self_append_conv2) show?thesis Truep1_\<gamma>1\<gamma>''v_p_uvp2_\<gamma>2\<epsilon>v_p1_\<gamma>1_\<gamma>''_vp'_w'_pbyfastforce next caseFalse thenhaveq_nlq_p2_\<gamma>2\<epsilon>v:"(the_Ctr_Locq,[the_Labelq])\<Rightarrow>\<^sup>*(byblast usingindstate.exhaust_disc byjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 <\<epsilon>v_p1_<gamma>\gamma>,\<epsilon>.remove_\<epsilon\>2\epsilon>)<>\<^sup*p1,\<\>.epsilonv)" by((mono_tags)\<epsilon_exp_defLTS_epsilon.remove_\<epsilon>_append_dist\<epsilon>.remove_\<epsilon>_defXIII XI_1append_Consappend_Nillbl.simps(step_relp_def2) havep1_\<gamma>1\<gamma>''_v_p_u\<gamma>'1#\<gamma>''#TS_epsilon>.remove_\<epsilon>v\Rightarrow\<^sup>*(p,LTS_\<epsilonove_>u@\<gamma'_epsilon.remove_\<epsilon>v) by(metisp1_\<gamma>1_lemmapost_star_rules_saturation_constains_successors: "(p,LTS_\<epsilon>.remove_\<epsilon>u@\<gamma>''#LTS_\<epsilon>.remove_\<epsilon>v)=(p,LTS_\<epsilon>.remove_\<epsilon>w)" (metisLTS_\epsilon>.remove_\<epsilon>_Cons_tlLTS_\<epsilonremove_\<epsilon>append_distappend_Consappend_Nilw_split hd_Cons_tllist.distinct(1)list.inject) thenshow?thesis usingFalsep1_\<gamma>1\<gamma>''_v_p_u\<gamma>''vp2_\<gamma>2\<epsilon>v_p1_\<gamma>1\<gamma>''vq_nlq_p2_\<gamma>2\<epsilon>v by(metis(no_types,lifting)indrtranclp_trans) qed qed qed
\<comment>\<openCorrespondsSchwoon'slemma3.\close> lemmartranclp_post_star_rules_constains_successors: assumes"post_star_rules\<^F_not_Extq_p()blast s"inits\<ubseteqLTS.srcsA" assumes"isols\<subseteq>LTS.isolatedA" assumes"(Initp,w,q)\<have"(Initp'wa)\inLTS_\<epsilon>.trans_star_\<epsilon>A\<and>(p',w'a)\<Rightarrow>\<^sup>*(p,w)" shows"(\<not>is_Isolatedq\<longrightarrow>(\<exists>p'w'.(Initp',w',q)\<in>java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 (is_Isolatedq\<longrightarrow>(the_Ctr_Locq,[the_Labelq])\<Rightarrow>\<define"w=c" usingrtranclp_post_star_rules_constains_successors_statesassms by(metisaveaccepts_\<epsilon>A"
\\<open>CorrespondstoonedirectionofSchwoon'stheorem3.3\<close> theorempost_star_rules_subset_post_star_lang: assumes"post_star_rules\<^sup>*\<^sup assumes"inits\<subseteq>LTS.srcsA" ssumes>LTS.isolatedA"
java.lang.StringIndexOutOfBoundsException: Index 82 out of bounds for length 80 proof fixc::"('ctr_loc,'label)conf" definepwhere"p=fstc" definewwhere"w=sndc" assume"c\<in>{c.accepts_\<epsilon>A'c}" thenhavesubsection\>IntersectionilonAutomata<close> unfoldingp_defw_defbyauto thenobtainqjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 unfoldingaccepts_\<epsilon>_defbyauto thentainef:"_<psilon.\<epsilon>_expw'w\<and>(Initp,w',q)\<in>LTS.trans_starA'" by(mesonLTS_\<epsilon>.trans_star_\<epsilon>_iff_\<epsilon>_exp_trans_star) thenhavepath:"(Initp,w byauto have"\<not>is_Isolatedq" usingF_not_Extq_p(1)byblast thenobtainp'w'awhere"(Initp',w'a rtranclp_post_star_rules_constains_successors[OFassms(1)assms(2)assms(3)path]byauto thenhave"(Initp',w'a,q)\<in>LTS_\<epsilon>.trans_star_\<epsilon>A\<and>(p',w'a)\<Rightarrow>\<^sup>*(p,w)" usingw'_def by(metisLTS_\<epsilon>.\<epsilon>_exp_defLTS_\<epsilon>.remove_\<epsilonhavep'w)inLTS_\<epsilon>.trans_star_\<epsilon>(inters_\<epsilon>ts1ts2)" \openLTS_\<epsilon>.\<epsilon>_expw'w\<and>(Initp,w',q)\<in>LTS.trans_starA'\<close>) ost_star<>A)" usingq\<in>finals\<close>unfoldingLTS.post_star_defaccepts_\<epsilon>_deflang_\<epsilon>_defbyfastforce thenshow"c\<in>post_star(lang_\<epsilon>A)" unfoldingby(nTS_.trans_star_\<epsilon>.trans_star_<epsilon>_step_\<>) qed
\<comment>\<open>CorrespondstoSchwoon'stheorem3.3\<close> theorempost_star_rules_accepts_\<epsilon>_correct: assumes"saturationpost_star_rulesAA'" assumes"inits\<subseteq>LTS.srcsA" assumes"isols\<subseteq>LTS.isolatedA" shows"{c.accepts_\<epsilon>A'c}=post_star(lang_\<epsilon>A)"
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 fixc::"('ctr_loc,'label)conf" define"p=c" definewwhere"w=sndc" assume"c\<usingby(metis) java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 byutopost_star_defw_def thenhave"accepts_\<epsilon>A'(p,w)" usinglemma_3_3[ofp'w'pwAA']assms(1)byauto thenhave"accepts_\<epsilon>A'c" unfoldingp_defw_defbyauto then((p'q1),w,p2q2LTS_\<epsilon>.trans_star_\<epsilon>(inters_\epsilon>ts2)" java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 next c:'_abelnf" <{c.accepts_\<epsilon>A'c}" thenshow"c\<in>post_star(lang_\<epsilon>A)" usingassmspost_star_rules_subset_post_star_langunfoldingsaturation_defbyblast qed
definitionlang_inters::"(('ctr_loc,'noninit,'label)state*('ctr_loc,'noninit,'label)state,'label)transitionset\<Rightarrow>(('ctr_loc,'- lang_interstsfinals={c.accepts_interstsjava.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
lemmatrans_star_trans_star_\<epsilon>_inter "LTS_\<epsilon>.\<epsilon>expw1w" assumes"LTS_\epsilon.<>_expw2w" assumes"(p1,w1,p2)\<in>LTS.trans_starts1" assumes"(q1,w2,q2)\<in>LTS.trans_starts2" shows"(p1,q1),w:labellist,(p2q2)\>LTS_\<>.trans_star_epsilon(inters_\<epsilon>)" usingassms proof(induction"lengthw1+lengthw2"arbitrary:w1w2wp1q1rule:less_induct) case thenshow?case proof(cases"\<exists>\<alpha>w1'w2'\<beta>.w1= Trueobtain\<java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59 "w1=Some\<alpha>#w1'" "w2=Some\<beta>next byauto have"\<alpha>=\<beta>" se)True2S_<>.\<epsilon>_xp_Some_hdssrems)ssems) thenhaveTrue': "w1=Some\<alpha>#w1'" "w2=Some\<alpha>w2' usingTrue''byauto obtainp'wherep'_(p1,Some\<alpha,p)<>ts1\<and>(p',w1',)inLTS.trans_starts1" usinglessTrue'(1)by(metisLTS_\<epsilon>.trans_star_cons_\<epsilon>) obtainq'whereq'_p:"(q1,Some\<alpha>,q')\<in>ts2\<and>(q',w2',q2)\<in>LTS.trans_starts2" java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 haveind:"((p',q"pome<gamma>)in(,\epsilon>,p1,q2)|p11.\<>q2)\<in>ts2}" proof- have"lengthw1'+lengthw2'<lengthw1+lengthw2" usingTrue'(1)True'(2)byo moreover "\epsilonepsilon_expw1'w'" by(metis(no_types)LTS_\<epsilon>.\<epsilon>_exp_defless(2)True'(1)list.map(2)list.sel(3) option.simps(3)removeAll.simps(2)w'_def) moreover have"LTS_\<epsilon>.\<epsilon>_expw2'w'" by(metis(no_types)LTS_\<epsilon>.\<epsilon>_exp_defless(3)True'(2)list.map(2)list.sel(3) option.simps(3)removeAll.simps(2)w'_def) moreover have"(p',w1',p2)\<in>LTS.trans_starts1" usingp'_pbysimp moreover have"(q',w2',q2)\<in>LTS.trans_starjava.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 usingq'_pbysimp ultimately show"((p',q'),byauto usingless(1)[ofw1'w2'w'p'q']byauto qed moreover have"((p1,q1),Some\<alpha>,(p',q'))\<in>(inters_\<epsilon>ts1ts2)" by(simpadd:inters_\<epsilon>_defp'_pq'_p) ultimately have"((p1,q1),\<alpha>#w'_inters(inters_\<epsilons1)c<longleftrightarrows_<silon1candaccepts_\<epsilon>ts2c" by(mesonLTS_\<epsilon>.trans_star_\<epsilon>.trans_star_\<epsilon>_step_\<gamma>) moreover have"lengthw>0" usingless(3)True'LTS_\<epsilon.>_exp_Some_lengthmetis moreover have"hdw=\<alpha>" usingless(thenwaccepts_epsilon_inters(inters_\<epsilon>s1) ultimately show?java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16 usingw'_defbyforce next caseFalse noteFalse_outer_outer_outer_outer_r_outerFalse show?thesis (casesw1\>[ caseTrue thenhavesame:"p1=p2\<and>q1=q2" by(metisLTS.trans_star_emptyless.prems(3)less.prems(4)) have"w=[]" usingTrueless(2)LTS_\<epsilonty_emptyto thenshow?thesis usinglessTrue by(simpadd:LTS_\<epsilon>.trans_star_\<epsilon>.trans_star_\<epsilon>_reflsame) next caseFalse noteFalse_outer_outer_outer=False show?thesis proof(cases"\<exists>w1'.w1=\<epsilon>#w1'")
case True (* Adapted from above. *) obtain w1' where True': "w1=ε#w1'" by auto obtain p' where p'_p: "(p1, ε, p') ∈ ts1 ∧ (p', w1', p2) ∈ LTS.trans_star ts1" using less True'(1) by (metis LTS_ε.trans_star_cons_ε) have using less by (metis) have : "(p, q), w, p2, q2) \in LTε (inters_ε proof - have "length w1' + length w2 < length w1 + length w2" using True'(_of_LTS_None: "(,'
have"LTS_ε.ε_exp w1' w" by (metis (no_types) LTS_ε<\< moreover haveassumesq) ∈ (S_>of_LTS A2 by (metis (no_types) less(3)) moreover have"(p', w1', p2) ∈ using p'_p by simp moreover have "(q1, w2, q2) ∈ LTS.trans_star ts2" p ultimately show() 2) \<> using less(1)[of w1' w2 w p' q1] by auto qed moreover have "((p1, q1), ε, (p', q1)) ∈ (inters_ε'q by (simp add: inters_ε LTS__of_LTS_Noneby ultimately have"((p1, q1), w, p2, q2) ∈ LTS_ε.trans_star_ε (inters_ε ts1 ts2)" using LTS_ε.trans_star_ε.simps by fastforce then show ?thesis by next case False note add\epsilontrans_star_>trans_star__refljava.lang.StringIndexOutOfBoundsException: Index 82 out of bounds for length 82 then proof (cases "∃ case True (* Adapted from above. *) then obtain w2' where True': "w2=ε#w2'" byaut have p'_p: "(p1, w1, p2) ∈ LTS.trans_star ts1lemmaεepsilonof_LTS_is_lang: "lang_ε (LTS_ε_of_LTS A2') = lang A2'" using obtain q' where q'_p: "(q1, ε, q') ∈ ts2 ∧(q', w2', q2) ∈ LTS.trans_star ts2" using less True'(1) by (metis LTS_ε.trans_star_cons_ε) "isols ⊆ havelengthw+ thw'< True'(1) by simp moreover have TS_\epsilon_exp w1 w" by (metis (no_types) less(2))
java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20 have"LTS_ε.ε_exp w2' w" by (metis (no_types) LTS_ε.ε_exp_def less(3) True'(1) removeAll have A1'_correct post_star (lang_ε moreover have"(p1, w1, p2) ∈ LTS.trans_star ts1" using p'_p by simp moreover have2',q2 LTS.trans_star ts2 using q'_p by simp ultimately show"((p1, q'), w, p2, q2) ∈ LTS_ε.trans_star_ε (inters_ε ts1 ts2)" using less(1)[of w1 w2' w p1 q'] by auto qed
oreover have"((p1, q1), ε, (p1, q')) ∈ by (simp add: inters_ε_def p'_p q'_p) ultimately have "((p1c1∈.existsc2∈==>* c2" using LTS_ε.trans_star_ε.simps by fastforce then show ?thesis by force next case False then have "(w1 = [] ∧ LTS.isolated using False_outer_outer False_outer_outer_outer False_outer_outer_outer_outer by (metis neq_Nil_conv option.exhaust_sel)
? by (metis LTS_ε
list.simps(8) list.size(3) removeAll.simps(1))
java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 11 qed qed qed qed
lemma trans_star_ε assumes"(p1, w :: 'label list, p2)\in LTS_ε.trans_star_ε assumes "(q1, w, q2) ∈using🚫 shows"((p1, q1), w, (p2, q2)) ∈ LTS_ε.trans_star_ε (inters_ε ts si A1by auto proof - have "∃p (p1, w1', p2 LTSans_star using assms by (simp add:by thenobtain w1' where"LTS_ε.ε_exp w1' w ∧ (p1, w1', p2) ∈ LTS.trans_star ts1" by auto moreover have"∃.ε w2' w ∧ q) ∈ ts2" using assms by (simp add: LTS_ε.trans_star_ε_ε_exp_trans_star) thenobtain w2' where"LTS_ε.ε_exp w2' w ∧(q1, 2', q2 LTS.trans_star ts2" by auto ultimately show ? using trans_star_trans_star_ε_inter by metis qed
lemma inters_trans_star_ε1: assumes"(p1q2, w :: 'label list, p2q2) ∈ LTS_ε.trans_star_ε (inters_ε shows "(fst p1q2, w, fst p2q2) ∈ LTS_ε.trans_star_ε dual_star_correct_early_termination_configs using assms proof (induction rule: LTS_ε.trans_star_ε.inductassumes LTS.isolated A1" case (1 p) then show ?case by (simp add: LTS_ε.trans_star_ε.trans_star_ε_refl) next case (2 p γ q' w q) then have ind: "(fst LTS_ε ts1 by auto from2( ()have"p Some γ {((p1, q1), ε, p2, q1) |p1 p2 q1. (p1, ε, p2) ∈ ts1} ∪ " <LTS A1
{((p1, q1), ε, p1, q2) |p1 q1 q2. (q1, ε, q2) ∈ ts1}" unfolding inters_ε_def by auto moreover { assume "(p, Some γ, q') ∈ saturation A2 \and (q1 γ) <> ts2 by simp thenobtain p1 q1 where"p = (p1, q1) ∧ (∃ by auto then have ?case using LTS_ε.trans_star_ε.trans_star_ε_step_γ ind by fastforce } moreover { assume "(p, Some γ, q') ∈ {((p1, q1), ε, p2, q1) |p1 p2 q1. (p1, ε, p2) ∈ ts1}" then have ?case by auto } moreover { assume "(p, Some γ, q') ∈ {((p1, q1), ε, p1, q2) |p1 q1 q2. (q1, ε, q2) ∈ ts1}" then have ?case by auto } ultimately show ?case by auto next case (3 p q' w q) then have ind: "(fst q', w, fst q) ∈ LTS_ε.trans_star_ε ts1" by auto from 3(1) have "(p, ε, q') ∈
{((p1, q1), α, (p2, q2)) | p1 q1 α p2 q2. (p1, α, p2) ∈ ts1 ∧ (q1, α, q2) ∈ ts2} ∪
{((p1, q1), ε, (p2, q1)) | p1 p2 q1. (p1, ε, p2) ∈ ts1} ∪
{((p1, q1), ε, (p1, q2)) | p1 q1 q2. (q1, ε, q2) ∈ ts2}" unfolding inters_ε_def by auto moreover { assume "(p, ε, q') ∈ {((p1, q1), α, p2, q2) |p1 q1 α p2 q2. (p1, α, p2) ∈ ts1 ∧ (q1, α, q2) ∈ ts2}" then have "∃p1 q1. p = (p1, q1) ∧ (∃p2 q2. q' = (p2, q2) ∧ (p1, ε, p2) ∈ ts1 ∧ (q1, ε, q2) ∈ ts2)" by simp then obtain p1 q1 where "p = (p1, q1) ∧ (∃p2 q2. q' = (p2, q2) ∧ (p1, ε, p2) ∈ ts1 ∧ (q1, ε, q2) ∈ ts2)" by auto then have ?case using LTS_ε.trans_star_ε.trans_star_ε_step_ε ind by fastforce } moreover { assume "(p, ε, q') ∈ {((p1, q1), ε, p2, q1) |p1 p2 q1. (p1, ε, p2) ∈ ts1}" then have "∃p1 p2 q1. p = (p1, q1) ∧ q' = (p2, q1) ∧ (p1, ε, p2) ∈ ts1" by auto then obtain p1 p2 q1 where "p = (p1, q1) ∧ q' = (p2, q1) ∧ (p1, ε, p2) ∈ ts1" by auto then have ?case using LTS_ε.trans_star_ε.trans_star_ε_step_ε ind by fastforce } moreover { assume "(p, ε, q') ∈ {((p1, q1), ε, p1, q2) |p1 q1 q2. (q1, ε, q2) ∈ ts2}" then have "∃p1 q1 q2. p = (p1, q1) ∧ q' = (p1, q2) ∧ (q1, ε, q2) ∈ ts2" by auto then obtain p1 q1 q2 where "p = (p1, q1) ∧ q' = (p1, q2) ∧ (q1, ε, q2) ∈ ts2" by auto then have ?case using LTS_ε.trans_star_ε.trans_star_ε_step_ε ind by fastforce } ultimately show ?case by auto qed
lemma inters_trans_star_ε: assumes "(p1q2, w :: 'label list, p2q2) ∈ LTS_ε.trans_star_ε (inters_ε ts1 ts2)" shows "(snd p1q2, w, snd p2q2) ∈ LTS_ε.trans_star_ε ts2" using assms proof (induction rule: LTS_ε.trans_star_ε.induct[OF assms(1)]) case (1 p) then show ?case by (simp add: LTS_ε.trans_star_ε.trans_star_ε_refl) next case (2 p γ q' w q) then have ind: "(snd q', w, snd q) ∈ LTS_ε.trans_star_ε ts2" by auto from 2(1) have "(p, Some γ, q') ∈
{((p1, q1), α, p2, q2) |p1 q1 α p2 q2. (p1, α, p2) ∈ ts1 ∧ (q1, α, q2) ∈ ts2} ∪
{((p1, q1), ε, p2, q1) |p1 p2 q1. (p1, ε, p2) ∈ ts1} ∪
{((p1, q1), ε, p1, q2) |p1 q1 q2. (q1, ε, q2) ∈ ts2}" unfolding inters_ε_def by auto moreover { assume "(p, Some γ, q') ∈ {((p1, q1), α, p2, q2) |p1 q1 α p2 q2. (p1, α, p2) ∈ ts1 ∧ (q1, α, q2) ∈ ts2}" then have "∃p1 q1. p = (p1, q1) ∧ (∃p2 q2. q' = (p2, q2) ∧ (p1, Some γ, p2) ∈ ts1 ∧ (q1, Some γ, q2) ∈ ts2)" by simp then obtain p1 q1 where "p = (p1, q1) ∧ (∃p2 q2. q' = (p2, q2) ∧ (p1, Some γ, p2) ∈ ts1 ∧ (q1, Some γ, q2) ∈ ts2)" by auto then have ?case using LTS_ε.trans_star_ε.trans_star_ε_step_γ ind by fastforce } moreover { assume "(p, Some γ, q') ∈ {((p1, q1), ε, p2, q1) |p1 p2 q1. (p1, ε, p2) ∈ ts1}" then have ?case by auto } moreover { assume "(p, Some γ, q') ∈ {((p1, q1), ε, p1, q2) |p1 q1 q2. (q1, ε, q2) ∈ ts2}" then have ?case by auto } ultimately show ?case by auto next case (3 p q' w q) then have ind: "(snd q', w, snd q) ∈ LTS_ε.trans_star_ε ts2" by auto from 3(1) have "(p, ε, q') ∈
{((p1, q1), α, (p2, q2)) | p1 q1 α p2 q2. (p1, α, p2) ∈ ts1 ∧ (q1, α, q2) ∈ ts2} ∪
{((p1, q1), ε, (p2, q1)) | p1 p2 q1. (p1, ε, p2) ∈ ts1} ∪
{((p1, q1), ε, (p1, q2)) | p1 q1 q2. (q1, ε, q2) ∈ ts2}" unfolding inters_ε_def by auto moreover { assume "(p, ε, q') ∈ {((p1, q1), α, p2, q2) |p1 q1 α p2 q2. (p1, α, p2) ∈ ts1 ∧ (q1, α, q2) ∈ ts2}" then have "∃p1 q1. p = (p1, q1) ∧ (∃p2 q2. q' = (p2, q2) ∧ (p1, ε, p2) ∈ ts1 ∧ (q1, ε, q2) ∈ ts2)" by simp then obtain p1 q1 where "p = (p1, q1) ∧ (∃p2 q2. q' = (p2, q2) ∧ (p1, ε, p2) ∈ ts1 ∧ (q1, ε, q2) ∈ ts2)" by auto then have ?case using LTS_ε.trans_star_ε.trans_star_ε_step_ε ind by fastforce } moreover { assume "(p, ε, q') ∈ {((p1, q1), ε, p2, q1) |p1 p2 q1. (p1, ε, p2) ∈ ts1}" then have "∃p1 p2 q1. p = (p1, q1) ∧ q' = (p2, q1) ∧ (p1, ε, p2) ∈ ts1" by auto then obtain p1 p2 q1 where "p = (p1, q1) ∧ q' = (p2, q1) ∧ (p1, ε, p2) ∈ ts1" by auto then have ?case using LTS_ε.trans_star_ε.trans_star_ε_step_ε ind by fastforce } moreover { assume "(p, ε, q') ∈ {((p1, q1), ε, p1, q2) |p1 q1 q2. (q1, ε, q2) ∈ ts2}" then have "∃p1 q1 q2. p = (p1, q1) ∧ q' = (p1, q2) ∧ (q1, ε, q2) ∈ ts2" by auto then obtain p1 q1 q2 where "p = (p1, q1) ∧ q' = (p1, q2) ∧ (q1, ε, q2) ∈ ts2" by auto then have ?case using LTS_ε.trans_star_ε.trans_star_ε_step_ε ind by fastforce } ultimately show ?case by auto qed
lemma inters_ε_accept_ε_iff: "accepts_ε_inters (inters_ε ts1 ts2) c ⟷ accepts_ε ts1 c ∧ accepts_ε ts2 c" proof assume "accepts_ε_inters (inters_ε ts1 ts2) c" then show "accepts_ε ts1 c ∧ accepts_ε ts2 c" using accepts_ε_def accepts_ε_inters_def inters_trans_star_ε inters_trans_star_ε1 by fastforce next assume asm: "accepts_ε ts1 c ∧ accepts_ε ts2 c" define p where "p = fst c" define w where "w = snd c"
from asm have "accepts_ε ts1 (p,w) ∧ accepts_ε ts2 (p,w)" using p_def w_def by auto then have "(∃q∈finals. (Init p, w, q) ∈ LTS_ε.trans_star_ε ts1) ∧
(∃q∈finals. (Init p, w, q) ∈ LTS_ε.trans_star_ε ts2)" unfolding accepts_ε_def by auto then show "accepts_ε_inters (inters_ε ts1 ts2) c" using accepts_ε_inters_def p_def trans_star_ε_inter w_def by fastforce qed
lemma inters_ε_lang_ε: "lang_ε_inters (inters_ε ts1 ts2) = lang_ε ts1 ∩ lang_ε ts2" unfolding lang_ε_inters_def lang_ε_def using inters_ε_accept_ε_iff by auto
subsection ‹Dual search›
lemma dual1: "post_star (lang_ε A1) ∩ pre_star (lang A2) = {c. ∃c1 ∈ lang_ε A1. ∃c2 ∈ lang A2. c1 ==>* c ∧ c ==>* c2}" proof - have "post_star (lang_ε A1) ∩ pre_star (lang A2) = {c. c ∈ post_star (lang_ε A1) ∧ c ∈ pre_star (lang A2)}" by auto moreover have "... = {c. (∃c1 ∈ lang_ε A1. c1 ==>* c) ∧ (∃c2 ∈ lang A2. c ==>* c2)}" unfolding post_star_def pre_star_def by auto moreover have "... = {c. ∃c1 ∈ lang_ε A1. ∃c2 ∈ lang A2. c1 ==>* c ∧ c ==>* c2}" by auto ultimately show ?thesis by metis qed
lemma dual2: "post_star (lang_ε A1) ∩ pre_star (lang A2) ≠ {} ⟷ (∃c1 ∈ lang_ε A1. ∃c2 ∈ lang A2. c1 ==>* c2)" proof (rule) assume "post_star (lang_ε A1) ∩ pre_star (lang A2) ≠ {}" then show "∃c1∈lang_ε A1. ∃c2∈lang A2. c1 ==>* c2" by (auto simp: pre_star_def post_star_def intro: rtranclp_trans) next assume "∃c1∈lang_ε A1. ∃c2∈lang A2. c1 ==>* c2" then show "post_star (lang_ε A1) ∩ pre_star (lang A2) ≠ {}" using dual1 by auto qed
lemma trans_star_ε_LTS_ε_of_LTS_trans_star: assumes "(p,w,q) ∈ LTS_ε.trans_star_ε (LTS_ε_of_LTS A2')" shows "(p,w,q) ∈ LTS.trans_star A2'" using assms proof (induction rule: LTS_ε.trans_star_ε.induct[OF assms(1)] ) case (1 p) then show ?case by (simp add: LTS.trans_star.trans_star_refl) next case (2 p γ q' w q) moreover have "(p, γ, q') ∈ A2'" using 2(1) using LTS_ε_of_LTS_Some by metis moreover have "(q', w, q) ∈ LTS.trans_star A2'" using "2.IH" 2(2) by auto ultimately show ?case by (meson LTS.trans_star.trans_star_step) next case (3 p q' w q) then show ?case using LTS_ε_of_LTS_None by fastforce qed
lemma trans_star_trans_star_ε_LTS_ε_of_LTS: assumes "(p,w,q) ∈ LTS.trans_star A2'" shows "(p,w,q) ∈ LTS_ε.trans_star_ε (LTS_ε_of_LTS A2')" using assms proof (induction rule: LTS.trans_star.induct[OF assms(1)]) case (1 p) then show ?case by (simp add: LTS_ε.trans_star_ε.trans_star_ε_refl) next case (2 p γ q' w q) then show ?case by (meson LTS_ε.trans_star_ε.trans_star_ε_step_γ LTS_ε_of_LTS_Some) qed
lemma accepts_ε_LTS_ε_of_LTS_iff_accepts: "accepts_ε (LTS_ε_of_LTS A2') (p, w) ⟷ accepts A2' (p, w)" using accepts_ε_def accepts_def trans_star_ε_LTS_ε_of_LTS_trans_star trans_star_trans_star_ε_LTS_ε_of_LTS by fastforce
lemma lang_ε_LTS_ε_of_LTS_is_lang: "lang_ε (LTS_ε_of_LTS A2') = lang A2'" unfolding lang_ε_def lang_def using accepts_ε_LTS_ε_of_LTS_iff_accepts by auto
theorem dual_star_correct_early_termination: assumes "inits ⊆ LTS.srcs A1" assumes "inits ⊆ LTS.srcs A2" assumes "isols ⊆ LTS.isolated A1" assumes "isols ⊆ LTS.isolated A2" assumes "post_star_rules** A1 A1'" assumes "pre_star_rule** A2 A2'" assumes "lang_ε_inters (inters_ε A1' (LTS_ε_of_LTS A2')) ≠ {}" shows "∃c1 ∈ lang_ε A1. ∃c2 ∈ lang A2. c1 ==>* c2" proof - have "{c. accepts_ε A1' c} ⊆ post_star (lang_ε A1)" using assms using post_star_rules_subset_post_star_lang by auto then have A1'_correct: "lang_ε A1' ⊆ post_star (lang_ε A1)" unfolding lang_ε_def by auto
have "{c. accepts A2' c} ⊆ pre_star (lang A2)" using pre_star_rule_subset_pre_star_lang[of A2 A2'] assms by auto then have A2'_correct: "lang A2' ⊆ pre_star (lang A2)" unfolding lang_def by auto
have "lang_ε_inters (inters_ε A1' (LTS_ε_of_LTS A2')) = lang_ε A1' ∩ lang_ε (LTS_ε_of_LTS A2')" using inters_ε_lang_ε[of A1' "(LTS_ε_of_LTS A2')"] by auto moreover have "... = lang_ε A1' ∩ lang A2'" using lang_ε_LTS_ε_of_LTS_is_lang by auto moreover have "... ⊆ post_star (lang_ε A1) ∩ pre_star (lang A2)" using A1'_correct A2'_correct by auto ultimately have inters_correct: "lang_ε_inters (inters_ε A1' (LTS_ε_of_LTS A2')) ⊆ post_star (lang_ε A1) ∩ pre_star (lang A2)" by metis
from assms have "post_star (lang_ε A1) ∩ pre_star (lang A2) ≠ {}" using inters_correct by auto then show "∃c1∈lang_ε A1. ∃c2∈lang A2. c1 ==>* c2" using dual2 by auto
qed
theorem dual_star_correct_saturation: assumes "inits ⊆ LTS.srcs A1" assumes "inits ⊆ LTS.srcs A2" assumes "isols ⊆ LTS.isolated A1" assumes "isols ⊆ LTS.isolated A2" assumes "saturation post_star_rules A1 A1'" assumes "saturation pre_star_rule A2 A2'" shows "lang_ε_inters (inters_ε A1' (LTS_ε_of_LTS A2')) ≠ {} ⟷ (∃c1 ∈ lang_ε A1. ∃c2 ∈ lang A2. c1 ==>* c2)" proof - have "{c. accepts_ε A1' c} = post_star (lang_ε A1)" using post_star_rules_accepts_ε_correct[of A1 A1'] assms by auto then have A1'_correct: "lang_ε A1' = post_star (lang_ε A1)" unfolding lang_ε_def by auto
have "{c. accepts A2' c} = pre_star (lang A2)" using pre_star_rule_accepts_correct[of A2 A2'] assms by auto then have A2'_correct: "lang A2' = pre_star (lang A2)" unfolding lang_def by auto
have "lang_ε_inters (inters_ε A1' (LTS_ε_of_LTS A2')) = lang_ε A1' ∩ lang_ε (LTS_ε_of_LTS A2')" using inters_ε_lang_ε[of A1' "(LTS_ε_of_LTS A2')"] by auto moreover have "... = lang_ε A1' ∩ lang A2'" using lang_ε_LTS_ε_of_LTS_is_lang by auto moreover have "... = post_star (lang_ε A1) ∩ pre_star (lang A2)" using A1'_correct A2'_correct by auto ultimately have inters_correct: "lang_ε_inters (inters_ε A1' (LTS_ε_of_LTS A2')) = post_star (lang_ε A1) ∩ pre_star (lang A2)" by metis
show ?thesis proof assume "lang_ε_inters (inters_ε A1' (LTS_ε_of_LTS A2')) ≠ {}" then have "post_star (lang_ε A1) ∩ pre_star (lang A2) ≠ {}" using inters_correct by auto then show "∃c1∈lang_ε A1. ∃c2∈lang A2. c1 ==>* c2" using dual2 by auto next assume "∃c1∈lang_ε A1. ∃c2∈lang A2. c1 ==>* c2" then have "post_star (lang_ε A1) ∩ pre_star (lang A2) ≠ {}" using dual2 by auto then show "lang_ε_inters (inters_ε A1' (LTS_ε_of_LTS A2')) ≠ {}" using inters_correct by auto qed qed
¤ 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.0.118Bemerkung:
¤
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 und die Messung sind noch experimentell.