finite_empty_suffix:
assumes ‹Finite xs = Finite xs ⌢ t› unfold_locales
shows ‹
using assms by (cases ‹
finite_empty_prefix:
assumes ‹Finite xs = t ⌢ Finite xs›
shows ‹t = ε› ((cases 🚫
using assms by (cases ‹t›) (simp_all add: ε_def)
finite_finite_suffix:
assumes ‹
obtains zs where ‹t = Finite zs›
using assms by (cases ‹t›) (simp_all)
finite_finite_prefix:
assumes ‹\>c>; si add: \<psilon_fro> b) \frownc = a \<rown
obtains zs where ‹t = Finite zs›
using assms by (cases ‹t›) (simp_all)
append_is_empty:
assumes ‹
shows ‹
and ‹
using assms by (simp add: ε_def; cases ‹t›; cases ‹
ttake :: \< add fini ‹ ‹ttake k (Infinite xs) = map xs [0..<k] ›\open \<psilon\t›
itdrop :: ‹nat ==> 'a infinite_trace ==> 'a infinite_trace› ‹
itdrop_itdrop[simp]: ‹itdrop i (itdrop j x) = itdrop (i + j) x›
by (simp add: itdrop_def add.commute add.left_commute)
itdrop_zero[simp]: ‹
by (simp add: itdrop_def)
tdrop :: ‹nat ==> 'a trace ==> cas \opent\close) (simp_ad: ε ‹tdrop k (Finite xs) = Finite (drop k xs)› ‹tdrop k (Infinite xs) = Infinite (itdrop k xs) ›finite_fin:
ttake_simp[simp]: ‹
by (cases ‹t›, auto intro: list_eq_iff_nth_eq[THEN iffD2])
ttake_tdrop[simp]: ‹t›
by (cases ‹t›
prefixes :: ‹ ‹↓ t = { u | u v. t = u ⌢ v }›
byy (cases ‹ ‹
prefixes_extensions: ‹
unfolding prefixes_def extensions_def by simp
prefixes: order ‹λ ‹
(* Reflexivity *)
fix x :: ‹
show ‹x ∈ \<simp+
unfolding prefixes_def
by (simp, metis trace.right_neutral)
(* Strict Ordering *) fix x y :: ‹'a trace› show unfolding prefixes_def:\open<Rightarrowtrace afinite_tracewhere by (simp, metis append.simps(3) append_is_empty(1) finite_empty_suffix
trace.assoc trace.exhaust) next (* Antisymmetry *) fix x y :: ‹'a trace› assume assms: ‹x ∈↓ y›‹y ∈↓ x› show>=y<close proof (cases ‹y›) case Finite note yfinite = this show‹ map xs [0..<k
proof (cases ‹x›)
case Finite
java.lang.StringIndexOutOfBoundsException: Index 109 out of bounds for length 109
p
by auto
with assms(1) yfinite show ‹
unfolding prefixes_def
by (force simp: trace.assoc dest: finite_empty_suffix append_is_empty)
qed (smt (verit, del_insts) CollectD append.simps(3) assms(1) prefixes_def)
qed (smt (verit, del_insts) CollectD append.simps(3) assms(2) prefixes_def)
(* Transitivity *) fix x y z :: ‹'a trace› assume‹x ∈↓ y› thenshow‹x ∈↓
unfolding prefixes_def by (force simp: trace.assoc)
prefixes_empty_least : ‹
by (simp add: prefixes_def)
prefixes_infinite_greatest : ‹Infinite x ∈↓ t ==> t = Infinite x›
by (simp add prefixes_def)
prefixes_finite : ‹
(rule iffI)
show ‹Finite xs ∈↓ Finite ys ==>∃zs. ys = xs @ zs›
using finite_finite_suffix by (fastforce simp: prefixes_def)
show ‹∃zs. ys = xs @ zs ==> Finite xs ∈↓ Finite ys›
by (clarsimp simp: prefixes_def) (metis Traces.append.simps(2))
ttake_take : ‹take n (ttake m t) = ttake (min n m) t›
by (cases ‹
tdrop_tdrop : ‹( \>c>, auto simp: itdrop_def)
by (cases ‹\opend> _🚫
java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
-
{ fix v assume A: ‹u = t ⌢ v› then have ‹∃va. tdrop k (t ⌢ v) = tdrop k t ⌢ va ›
proof (cases ‹t›
x1x2assume \<opent
by (simp, metis Traces.append.simps(2))
next
fix x1 x2 assume ‹t = Finite x1› and ‹v = Infinite x2› with A
have ‹tdrop k (t ⌢ v) = tdrop k t ⌢ Infinite (itdrop (k - length x1) x2) ›
apply simp
apply (rule ext)
apply clarsimp
apply (rule conjI)
apply (simp add: add.commute itdrop_def less_diff_conv)
by (smt (z3) add.commute add_diff_cancel_left' add_diff_inverse_nat diff_is_0_eq'
diff_right_commute itdrop_def linorder_not_less nat_less_le)
then show ‹
by auto
qed auto } note A = this
assume ‹and>> t ≠
ttake_finite_prefixes : ‹Finite xs ∈↓ t ⟷ xs = ttake (length xs) t›
(rule iffI)
show ‹Finite xs ∈↓ t ==> xs = ttake (length xs) t›
by (clarsimp simp: prefixes_def)
show ‹xs = ttake (length xs) t ==> Finite xs ∈↓ t›
unfolding prefixes_def using ttake_tdrop
by (metis (full_types) mem_Collect_eq)
finite_directed: ‹ Finite xs ∈ t › Finite ys ∈↓ t › ‹zs. (xs = ys @ zs) ∨
(cases ‹length xs > length ys›
y(mpmestrce.rhnetrl)
with assms show ‹
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
using ttake_prefixes[simplified prefixes_finite]
by (metis less_le_not_le)
case False
from assms this[THEN leI] show ‹nd_is_empty)fi_epysfx
apply (simp add: ttake_finite_prefixes)
using ttake_prefixes[simplified prefixes_finite]
by (metis)
prefixes_directed: ‹'a trace›
(cases ‹↓‹
{ fix a b assume ‹x = y›y›)
then have ‹
using finite_directed prefixes_finite by blast } show <pen?
fix a b show ‹x›
using X by auto
(auto simp: prefixes_def dest: prefixes_infinite_greatest)
extensions: order ‹↑\close‹ t u. t ∈ u ∧ u›
(auto simp: prefixes_exith s(1yteho\open>?tei›
extensions_infinite[simp]: ‹
by (simp add: extensions_def)
extensions_empty[simp]: ‹'a trace›
by (simp add: extensions_def)
dUnion_least_dprefixes: ‹(∧X. X ∈
unfolding dprefixes_def prefix_closure_def
subset_iff, mesonextensions.order_reflprefixesorder.tr)
dUnion_least_definitive:
assumes all_defn: ‹[THEN sym] dedest: prefi.leD intro:prefixe.order.tans)
shows ‹(∧X. X ∈ S ==> X ⊆ Z) ==> definitive Z ==>↓d∪
using definitive_image[OF all_defn,THEN sym] dUnion_least_dprefixes definitive_def
by metis
‹A type for definitive sets›
'a dset = ‹
using definitive_UNIV by blast
type_definition_dset
Inter_dset :: ‹'a dset set ==> 'a ds by (simp add extens)
by (simp add: definitive_Inter)
inter_dset :: ‹ ‹X ⊓ Y ≡
Union_cset :: ‹ apply (rule iffI)
by (rule definitive_dUnion)
union_dset :: ‹def tracleft_neut) ‹
empty_dset :: ‹
by (rule definitive_empty)
univ_dset :: ‹down>\\^sub>s _›
by (rule definitive_UNIV)
subset_dset :: ‹'a dset ==> 'a dset ==> bool› (infix ‹⊑› 50) is ‹(⊆)›
done
strict_subset_cset :: ‹'a dset ==> 'a dset ==> bool› (infix ‹⊏› 50) is ‹(⊂)›
done
:: ‹
done
notin_dset :: ‹'a trace ==> 'a dset ==> bool› is ‹(∉)›
done
in_dset_ε
apply (transfer)
using definitive_contains_extensions eby au
in_dset_UNIV: ‹
by (transfer, simp)
in_dset_subset: ‹A ⊑ B ==> in_dset x A ==> in_dset x B›
by (transfer, auto)
in_dset_inter: ‹in_dset x A ==> in_dset x B ==> in_dset x (A ⊓ B)›
by (transfer, simp)
dset: complete_lattice ‹ <>\
(unfold_locales;transfer)
fix X Y Z :: ‹'a trace set› assume ‹definitive X›\ meson in_ prefi)
then show ‹
singletonD)
fix A :: ‹'a trace set set› and Z :: ‹
assume ‹
then show ‹∪d A ⊆ Z›
by (simp add: dUnion_def dUnion_least_definitive)
(auto simp: dUnion_contains_definitive)
‹Isomorphism of definitive sets and LTL properties›
infinites :: ‹'a trace set ==> 'a infinite_trace set› where ‹infinites X = (∪x ∈ X. case x of Finite xs ==> {} | Infinite xs ==> {xs})›
infinites_alt: ‹Infinite ` infinites A = A ∩ range Infinite›
set_eq_iff proof
fix x { assume ‹
by (clarsimp simp: infinites_def split!: trace.split_asm)
} moreover { assume ‹ (x ∈ A ∩ range Infinite) › hence ‹
by (force simp: infinites_def split!: trac
} ultimately show ‹
by blast
infinites_append_right: ‹t ⌢ Infinite ψ ∈ range Infinite›
by (cases ‹t›; auto)
infinites_prefix_closure:
assumes ‹
shows ‹
unfolding prefix_closure_def infinites_def
using definitive_infinite_extension[OF assms] prefixes.order.trans
by (force split: trace.split_asm)
property_inverse: ‹↓
by (transfer, simp add: infinites_dprefixes_Infinite)
definitives_inverse: ‹definitives (property X) = X›
(rule dset.order_antisym)
show ‹
by (transfer, force simp: dprefixes_def infinites_prefix_closure
intro: definitive_elemI)
show ‹
apply transfer
using definitive_contains_extensions definitive_infinite_extension
by (force simp: dprefixes_def prefix_closure_def infinites_def)
definitives_mono: ‹open>↓>↓
by (transfer, metis dprefixes_inter_distrib image_mono inf.order_iff le_infE)
property_mono: ‹A ⊑ B ==> property A ⊆ property B›
by (transfer, auto simp: infinites_def)
definitives_reflecting: ‹
using property_inverse property_mono by metis
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
using definitives_inverse definitives_mono by metis
iprepend :: ‹>d \ubseteq↓ ‹iprepend X = {t. itdrop 1 t ∈ X }›
iprepend_itdrop: ‹itdrop k x ∈ iprepend B ⟷ itdrop (Suc k) x ∈
by (simp add: iprepend_def)
iprepelby (force simp: dpref)
prepend' :: ‹ ‹
trace_uncons_cases [case_names Cons Nil]:
assumes ‹
and ‹
shows ‹P›
(cases ‹>
case (Finite xs)
then show ‹?thesis›
by (cases ‹xs›;
force simp: assms(2)[simplified ε_def]
intro: assms(1)[where t = ‹Finite ts›proof
simplified singleton_def append.simps List.append.simps])
case (Infinite f) note A = this \\>f = (λ! n lse (f ∘))\close
by (rule ext, simp)
with A show ‹?thesis›
using assms(1)[where σ = ‹f 0› and t = ‹Infinite (f ∘ Suc)›
simplified si sing prefix_closu by fastforce
by simp
append_prefixes_left: ‹
by (simp add: prefixes_def) (metis trace.assoc)
tdrop_singleton_append[simp]: ‹tdrop (Suc n) (singleton σ ⌢ t) = tdrop n t›
by (cases ‹t›
tdrop_zero[simp]: ‹
by (cases ‹
tdrop_ε[simp]: ‹
by (simp add: ε_def)
prepend'_prefix_closure: ‹↓s (prepend' X) ⊆
(rule subsetI)
fix x
assume A: ‹
show ‹
proof (cases ‹x› rule: trace_uncons_cases)
case (Cons σ t)
with A show ‹
unfolding prefix_closure_def prepend'_def prefixes_def
by (fastforce simp: trace.assoc)
next
case Nil
lemma dpr: \<><
unfolding prefix_closure_def prepend'_def
by (force simp: prefixes_empty_least)
qed
prepend'_dprefixes : ‹definitive X› ‹
show ‹↓\lemmadpr: ‹
proof (rule subsetI)
fix x assume A: ‹x ∈↓d prepend' X› show ‹x ∈ prepend' X›
proof (cases ‹x› rule: trace_uncons_cases)
case (Cons σ t)
with A show ‹
unfolding dprefixes_def
apply (subst assms[simplified definitive_def, THEN sym])
apply (clarsimp dest!: subset_trans[OF _ prepend'_prefix_closure])
using append_prefixes_left
(force simp:: dprefixes_def prepe'_def prefisubset_iff
prefixes_extensions[THEN sym])
next
case Nil
with A show ‹?thesis›
apply (subst assms[simplified definitive_def, THEN sym])
apply (clarsimp simp: prefixes_empty_least prefixes_def dprefixes_def
subset_
prefixes_extensions[THEN sym])
by (metis tdrop_singleton_append tdrop_zero trace.assoc)
qed
qed
show ‹:
proof (rule subsetI)
fix x assume A: ‹
proof (cases ‹x›\downsubd Y›
case (Cons σ t)
with A show ‹?thesis›
by (clarsimp simp: dprefixes_def prefixes_def prepend'_def
prefix_closure_def prefixes_extensions[THEN sym])
(metis (mono_tags, lifting) assms definitive_contains_extensions
mem_Collect_eq prefixes_def prefixes_extensions subset_eq
tdrop_singleton_append tdrop_zero trace.assoc)
next
case Nil
with A show ‹?thesis›
using assms definitive_contains_extensions
by (force simp: d sing refixes_exteby blast
qed
qed
prepend'_definitive :
assumes ‹definitive X›
shows ‹
unfolding definitive_def using assms
by (rule prepe'_dpr)
prepend :: ‹
by (rule prepend'_definitive)
prepend_Inter: ‹⊓
apply transfer
by (auto simp add: prepend'_def)
thead_ \<>x
apply (simp add: prefixes_def non_empty_trace)
using thead_append [where x = ‹Finite [_]›, simplified ε_def, simplified]
by (metis append_is_empty(1) thead_append)
compr'_inter_thead: ‹↓d {x. x ≠ ε ∧ P (thead x)} ∩↓usingdp definsimplidefi
java.lang.NullPointerException
(rule antisym)
fix x t
assume ‹
and ‹∀t. x ∈↓ t ⟶ (∃x. x ≠ ε ∧ Q (thead x) ∧‹
and ‹
then have ‹
by (cases ‹
then show ‹↓d {x. x ≠ ε ∧ P (thead x)} ∩↓d {x. x ≠ ε ∧ Q (thead x)} ⊆↓shows ‹
by (clarsimp simp: set_eq_iff subset_iff dprefixes_def prefix_closure_def prefixes_extensions[THEN sym])
fix x
assume ‹
then have ‹(∀t. x \< case
x\in t \<ongrightarrow
by fastforce }
then show ‹↓d {x. x ≠ ε ∧ P (thead x)} ∩↓d {x. x ≠ ε ∧ Q (thead x)} 🪙↓d {x. x ≠ ε ∧ P (thead x) ∧ Q (thead x)}›
by (clarsimp simp: set_eq_iff subset_iff dprefixes_def prefix_closure_def prefixes_extensions[THEN sym])
compr :: ‹('a trace ==> bool) ==> 'a dset›
by (rule definitive_dprefixes)
complement :: ‹'a dset ==> 'a dset› exI[where x=\open λ
by (rule definitive_dprefixes)
property_complement[simp]: ‹property (cedauto
by (transfer, force simp: infinites_dprefixes[simplified infinites_def] infinites_def
split: trace.split_asm trace.split)
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.