definition doc_tokens :: "tokens ==> bool" where "doc_tokens p = (wellformed_tokens p ∧ is_prefix (chars p) Doc)"
definition wellformed_item :: "item ==> bool" where "wellformed_item x = ( item_rule x ∈R∧ item_origin x ≤ item_end x ∧ item_end x ≤ length Doc ∧ item_dot x ≤ length (item_rhs x))"
definition wellformed_items :: "items ==> bool" where "wellformed_items X = (∀ x ∈ X. wellformed_item x)"
lemma is_word_terminals: "wellformed_tokens p ==> is_word (terminals p)" by (simp add: is_word_def list_all_length terminals_def wellformed_token_def wellformed_tokens_def)
lemma is_word_subset: "is_word x ==> set y ⊆ set x ==> is_word y" by (metis (mono_tags, opaque_lifting) in_set_conv_nth is_word_def list_all_length subsetCE)
lemma is_word_terminals_take: "wellformed_tokens p ==> is_word(terminals (take n p))" by (metis append_take_drop_id is_word_terminals list_all_append wellformed_tokens_def)
lemma is_word_terminals_drop: "wellformed_tokens p ==> is_word(terminals (drop n p))" by (metis append_take_drop_id is_word_terminals list_all_append wellformed_tokens_def)
definition pvalid :: "tokens ==> item ==> bool" where "pvalid p x = (∃ u γ. wellformed_tokens p ∧ wellformed_item x ∧ u ≤ length p ∧ charslength p = item_end x ∧ charslength (take u p) = item_origin x ∧ is_derivation (terminals (take u p) @ [item_nonterminal x] @ γ) ∧ derives (item_α x) (terminals (drop u p)))"
definition Gen :: "tokens set ==> items" where "Gen P = { x | x p. p ∈ P ∧ pvalid p x }"
lemma"wellformed_items (Gen P)" by (auto simp add: Gen_def pvalid_def wellformed_items_def)
lemma"wellformed_items (Init)" by (auto simp add: wellformed_items_def Init_def init_item_def wellformed_item_def)
definition pvalid_left :: "tokens ==> item ==> bool" where "pvalid_left p x = (∃ u γ. wellformed_tokens p ∧ wellformed_item x ∧ u ≤ length p ∧ charslength p = item_end x ∧ charslength (take u p) = item_origin x ∧ is_leftderivation (terminals (take u p) @ [item_nonterminal x] @ γ) ∧ leftderives (item_α x) (terminals (drop u p)))"
lemma pvalid_left: "pvalid p x = pvalid_left p x" proof - have right_imp_left: "pvalid_left p x ==> pvalid p x" by (meson CFG.leftderives_implies_derives CFG_axioms LocalLexing.pvalid_def
LocalLexing.pvalid_left_def LocalLexing_axioms leftderivation_implies_derivation) have left_imp_right: "pvalid p x ==> pvalid_left p x" proof - assume"pvalid p x" thenobtain u γ where "wellformed_tokens p ∧ wellformed_item x ∧ u ≤ length p ∧ charslength p = item_end x ∧ charslength (take u p) = item_origin x ∧ is_derivation (terminals (take u p) @ [item_nonterminal x] @ γ) ∧ derives (item_α x) (terminals (drop u p))"by (simp add: pvalid_def, blast) thus ?thesis apply (auto simp add: pvalid_left_def) apply (rule_tac x=u in exI) apply auto apply (simp add: is_leftderivation_def) apply (rule_tac derives_implies_leftderives_cons[where b=γ]) apply (erule is_word_terminals_take) apply (simp add: is_derivation_def) by (metis derives_implies_leftderives is_word_terminals_drop) qed show ?thesis by (metis left_imp_right right_imp_left) qed
lemmaLP_wellformed_tokens: "terminals p ∈LP==> wellformed_tokens p" by (metis (mono_tags, lifting) LP_is_word is_word_def length_map list_all_length
nth_map terminals_def wellformed_token_def wellformed_tokens_def)
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.