lemma le_list_appendI: "∧b c d. a <=[r] b ==> c <=[r] d ==> a@c <=[r] b@d" apply (induct a) apply simp apply (case_tac b) apply auto done
lemma le_listI: "length a = length b ==> (∧n. n < length a ==> a!n <=_r b!n) ==> a <=[r] b" apply (unfold lesub_def Listn.le_def) apply (simp add: list_all2_conv_all_nth) done
lemma listI: "[ length xs = n; set xs <= A ]==> xs ∈ list n A" apply (unfold list_def) apply blast done
lemma listE_length [simp]: "xs ∈ list n A ==> length xs = n" apply (unfold list_def) apply blast done
lemma less_lengthI: "[ xs ∈ list n A; p < n ]==> p < length xs" by simp
lemma listE_set [simp]: "xs ∈ list n A ==> set xs <= A" apply (unfold list_def) apply blast done
lemma list_0 [simp]: "list 0 A = {[]}" apply (unfold list_def) apply auto done
lemma in_list_Suc_iff: "(xs ∈ list (Suc n) A) = (∃y∈ A. ∃ys∈ list n A. xs = y#ys)" apply (unfold list_def) apply (case_tac "xs") apply auto done
lemma Cons_in_list_Suc [iff]: "(x#xs ∈ list (Suc n) A) = (x∈ A & xs ∈ list n A)" apply (simp add: in_list_Suc_iff) done
lemma list_not_empty: "∃a. a∈ A ==>∃xs. xs ∈ list n A" apply (induct "n") apply simp apply (simp add: in_list_Suc_iff) apply blast done
lemma nth_in [rule_format, simp]: "∀i n. length xs = n ⟶ set xs <= A ⟶ i < n ⟶ (xs!i) ∈ A" apply (induct "xs") apply simp apply (simp add: nth_Cons split: nat.split) done
lemma listE_nth_in: "[ xs ∈ list n A; i < n ]==> (xs!i) ∈ A" by auto
lemma listn_Cons_Suc [elim!]: "l#xs ∈ list n A ==> (∧n'. n = Suc n' ==> l ∈ A ==> xs ∈ list n' A ==> P) ==> P" by (cases n) auto
lemma listn_appendE [elim!]: "a@b ∈ list n A ==> (∧n1 n2. n=n1+n2 ==> a ∈ list n1 A ==> b ∈ list n2 A ==> P) ==> P" proof - have"∧n. a@b ∈ list n A ==>∃n1 n2. n=n1+n2 ∧ a ∈ list n1 A ∧ b ∈ list n2 A"
(is"∧n. ?list a n ==>∃n1 n2. ?P a n n1 n2") proof (induct a) fix n assume"?list [] n" hence"?P [] n 0 n"by simp thus"∃n1 n2. ?P [] n n1 n2"by fast next fix n l ls assume"?list (l#ls) n" thenobtain n' where n: "n = Suc n'""l ∈ A"and list_n': "ls@b ∈ list n' A"by fastforce assume"∧n. ls @ b ∈ list n A ==>∃n1 n2. n = n1 + n2 ∧ ls ∈ list n1 A ∧ b ∈ list n2 A" hence"∃n1 n2. n' = n1 + n2 ∧ ls ∈ list n1 A ∧ b ∈ list n2 A"by this (rule list_n') thenobtain n1 n2 where"n' = n1 + n2""ls ∈ list n1 A""b ∈ list n2 A"by fast with n have"?P (l#ls) n (n1+1) n2"by simp thus"∃n1 n2. ?P (l#ls) n n1 n2"by fastforce qed moreover assume"a@b ∈ list n A""∧n1 n2. n=n1+n2 ==> a ∈ list n1 A ==> b ∈ list n2 A ==> P" ultimately show ?thesis by blast qed
lemma listt_update_in_list [simp, intro!]: "[ xs ∈ list n A; x∈ A ]==> xs[i := x] ∈ list n A" apply (unfold list_def) apply simp done
lemma Listn_sl_aux: assumes"semilat (A, r, f)"shows"semilat (Listn.sl n (A,r,f))" proof - interpret Semilat A r f using assms by (rule Semilat.intro) show ?thesis apply (unfold Listn.sl_def) apply (simp (no_asm) only: semilat_Def split_conv) apply (rule conjI) apply simp apply (rule conjI) apply (simp only: closedI closed_listI) apply (simp (no_asm) only: list_def) apply (simp (no_asm_simp) add: plus_list_ub1 plus_list_ub2 plus_list_lub) done qed
lemma Listn_sl: "∧L. semilat L ==> semilat (Listn.sl n L)" by(simp add: Listn_sl_aux split_tupled_all)
lemma coalesce_in_err_list [rule_format]: "∀xes. xes ∈ list n (err A) ⟶ coalesce xes ∈ err(list n A)" apply (induct n) apply simp apply clarify apply (simp add: in_list_Suc_iff) apply clarify apply (simp (no_asm) add: plussub_def Err.sup_def lift2_def split: err.split) apply force done
lemma lem: "∧x xs. x +_(#) xs = x#xs" by (simp add: plussub_def)
lemma coalesce_eq_OK1_D [rule_format]: "semilat(err A, Err.le r, lift2 f) ==> ∀xs. xs ∈ list n A ⟶ (∀ys. ys ∈ list n A ⟶ (∀zs. coalesce (xs +[f] ys) = OK zs ⟶ xs <=[r] zs))" apply (induct n) apply simp apply clarify apply (simp add: in_list_Suc_iff) apply clarify apply (simp split: err.split_asm add: lem Err.sup_def lift2_def) apply (force simp add: semilat_le_err_OK1) done
lemma coalesce_eq_OK2_D [rule_format]: "semilat(err A, Err.le r, lift2 f) ==> ∀xs. xs ∈ list n A ⟶ (∀ys. ys ∈ list n A ⟶ (∀zs. coalesce (xs +[f] ys) = OK zs ⟶ ys <=[r] zs))" apply (induct n) apply simp apply clarify apply (simp add: in_list_Suc_iff) apply clarify apply (simp split: err.split_asm add: lem Err.sup_def lift2_def) apply (force simp add: semilat_le_err_OK2) done
lemma lift2_le_ub: "[ semilat(err A, Err.le r, lift2 f); x∈ A; y∈ A; x +_f y = OK z; u∈ A; x <=_r u; y <=_r u ]==> z <=_r u" apply (unfold semilat_Def plussub_def err_def) apply (simp add: lift2_def) apply clarify apply (rotate_tac -3) apply (erule thin_rl) apply (erule thin_rl) apply force done
lemma coalesce_eq_OK_ub_D [rule_format]: "semilat(err A, Err.le r, lift2 f) ==> ∀xs. xs ∈ list n A ⟶ (∀ys. ys ∈ list n A ⟶ (∀zs us. coalesce (xs +[f] ys) = OK zs ∧ xs <=[r] us ∧ ys <=[r] us ∧ us ∈ list n A ⟶ zs <=[r] us))" apply (induct n) apply simp apply clarify apply (simp add: in_list_Suc_iff) apply clarify apply (simp (no_asm_use) split: err.split_asm add: lem Err.sup_def lift2_def) apply clarify apply (rule conjI) apply (blast intro: lift2_le_ub) apply blast done
lemma lift2_eq_ErrD: "[ x +_f y = Err; semilat(err A, Err.le r, lift2 f); x∈ A; y∈ A ] ==> ~(∃u∈ A. x <=_r u & y <=_r u)" by (simp add: OK_plus_OK_eq_Err_conv [THEN iffD1])
lemma coalesce_eq_Err_D [rule_format]: "[ semilat(err A, Err.le r, lift2 f) ] ==>∀xs. xs ∈ list n A ⟶ (∀ys. ys ∈ list n A ⟶ coalesce (xs +[f] ys) = Err ⟶ ¬(∃zs∈ list n A. xs <=[r] zs ∧ ys <=[r] zs))" apply (induct n) apply simp apply clarify apply (simp add: in_list_Suc_iff) apply clarify apply (simp split: err.split_asm add: lem Err.sup_def lift2_def) apply (blast dest: lift2_eq_ErrD) done
lemma closed_err_lift2_conv: "closed (err A) (lift2 f) = (∀x∈ A. ∀y∈ A. x +_f y ∈ err A)" apply (unfold closed_def) apply (simp add: err_def) done
lemma closed_map2_list [rule_format]: "closed (err A) (lift2 f) ==> ∀xs. xs ∈ list n A ⟶ (∀ys. ys ∈ list n A ⟶ map2 f xs ys ∈ list n (err A))" apply (unfold map2_def) apply (induct n) apply simp apply clarify apply (simp add: in_list_Suc_iff) apply clarify apply (simp add: plussub_def closed_err_lift2_conv) done
lemma closed_lift2_sup: "closed (err A) (lift2 f) ==> closed (err (list n A)) (lift2 (sup f))" by (fastforce simp add: closed_def plussub_def sup_def lift2_def
coalesce_in_err_list closed_map2_list
split: err.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.