definition is_first :: "'a ==> 'a list ==> bool" where "is_first x u = (∃ v. u = [x]@v)"
definition is_last :: "'a ==> 'a list ==> bool" where "is_last x u = (∃ v. u = v@[x])"
definition is_prefix :: "'a list ==> 'a list ==> bool" where "is_prefix u v = (∃ w. u@w = v)"
definition is_proper_prefix :: "'a list ==> 'a list ==> bool" where "is_proper_prefix u v = (∃ w. w ≠ [] ∧ u@w = v)"
lemma is_prefix_eq_proper_prefix: "is_prefix a b = (a = b ∨ is_proper_prefix a b)" by (metis append_Nil2 is_prefix_def is_proper_prefix_def)
lemma is_proper_prefix_eq_prefix: "is_proper_prefix a b = (a ≠ b ∧ is_prefix a b)" by (metis append_self_conv is_prefix_eq_proper_prefix is_proper_prefix_def)
definition is_suffix :: "'a list ==> 'a list ==> bool" where "is_suffix u v = (∃ w. w@u = v)"
definition is_proper_suffix :: "'a list ==> 'a list ==> bool" where "is_proper_suffix u v = (∃ w. w ≠ [] ∧ w@u = v)"
lemma is_suffix_eq_proper_suffix: "is_suffix a b = (a = b ∨ is_proper_suffix a b)" by (metis append_Nil is_proper_suffix_def is_suffix_def)
lemma is_proper_suffix_eq_suffix: "is_proper_suffix a b = (a ≠ b ∧ is_suffix a b)" by (metis is_proper_suffix_def is_suffix_eq_proper_suffix self_append_conv2)
lemma is_prefix_unsplit: "is_prefix u a ==> u @ (drop (length u) a) = a" by (metis append_eq_conv_conj is_prefix_def)
lemma le_take_same: "i ≤ j ==> take j a = take j b ==> take i a = take i b" by (metis min.absorb1 take_take)
lemma is_first_drop_length: assumes"k ≤ length a" and"k > length u" and"v = X#w" and"take k a = take k (u@v)" shows"is_first X (drop (length u) a)" proof - let ?d = "k - length u" from assms have pos_d': "?d > 0"by auto from assms have take_d'_v: "take ?d (drop (length u) a) = take ?d v" by (metis append_eq_conv_conj drop_take) thenhave"take 1 (drop (length u) a) = take 1 v" by (metis One_nat_def Suc_leI le_take_same pos_d') thenhave"take 1 (drop (length u) a) = [X]" by (simp add: assms) thenshow ?thesis by (metis append_take_drop_id is_first_def) qed
lemma is_first_cons: "is_first x (y#ys) = (x = y)" by (auto simp add: is_first_def)
lemma list_all_pos_neg_ex: "list_all P D ==>¬ (list_all Q D) ==> ∃ k. k < length D ∧ P(D ! k) ∧¬(Q(D ! k))" using list_all_length by blast
lemma split_list_at: "k < length D ==> D = (take k D)@[D ! k]@(drop (Suc k) D)" by (metis append_Cons append_Nil id_take_nth_drop)
lemma take_eq_take_append: "i ≤ j ==> j ≤ length a ==>∃ u. take j a = take i a @ u" by (metis le_Suc_ex take_add)
lemma is_proper_suffix_length_cmp: "is_proper_suffix a b ==> length a < length b" by (metis add_diff_cancel_right' append_Nil append_eq_append_conv
diff_is_0_eq is_proper_suffix_def leI length_append list.size(3))
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.