diff -r 92ca2410b3d9 -r 04caf0ccb3ae Moment.thy --- a/Moment.thy Wed Jan 13 14:20:58 2016 +0000 +++ b/Moment.thy Wed Jan 13 15:16:59 2016 +0000 @@ -5,27 +5,22 @@ definition moment :: "nat \ 'a list \ 'a list" where "moment n s = rev (take n (rev s))" -definition restm :: "nat \ 'a list \ 'a list" -where "restm n s = rev (drop n (rev s))" - value "moment 3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9::int]" value "moment 2 [5, 4, 3, 2, 1, 0::int]" -value "restm 3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9::int]" - -lemma moment_restm_s: "(restm n s) @ (moment n s) = s" - unfolding restm_def moment_def -by (metis append_take_drop_id rev_append rev_rev_ident) - +(* lemma length_moment_le: assumes le_k: "k \ length s" shows "length (moment k s) = k" using le_k unfolding moment_def by auto +*) +(* lemma length_moment_ge: assumes le_k: "length s \ k" shows "length (moment k s) = (length s)" using assms unfolding moment_def by simp +*) lemma moment_app [simp]: assumes ile: "i \ length s" @@ -148,56 +143,23 @@ by auto qed -lemma moment_plus_split: - shows "moment (m + i) s = moment m (restm i s) @ moment i s" -unfolding moment_def restm_def -by (metis add.commute rev_append rev_rev_ident take_add) +lemma moment_Suc_tl: + assumes "Suc i \ length s" + shows "tl (moment (Suc i) s) = moment i s" + using assms unfolding moment_def +sorry -lemma moment_prefix: - "(moment i t @ s) = moment (i + length s) (t @ s)" -proof - - from moment_plus_split [of i "length s" "t@s"] - have " moment (i + length s) (t @ s) = moment i (restm (length s) (t @ s)) @ moment (length s) (t @ s)" - by auto - have "moment (i + length s) (t @ s) = moment i t @ moment (length s) (t @ s)" - by (simp add: moment_def) - with moment_app show ?thesis by auto -qed -lemma moment_plus: - "Suc i \ length s \ moment (Suc i) s = (hd (moment (Suc i) s)) # (moment i s)" -proof(induct s, simp+) - fix a s - assume ih: "Suc i \ length s \ moment (Suc i) s = hd (moment (Suc i) s) # moment i s" - and le_i: "i \ length s" - show "moment (Suc i) (a # s) = hd (moment (Suc i) (a # s)) # moment i (a # s)" - proof(cases "i= length s") - case True - hence "Suc i = length (a#s)" by simp - with moment_eq have "moment (Suc i) (a#s) = a#s" by auto - moreover have "moment i (a#s) = s" - proof - - from moment_app [OF le_i, of "[a]"] - and True show ?thesis by simp - qed - ultimately show ?thesis by auto - next - case False - from False and le_i have lti: "i < length s" by arith - hence les_i: "Suc i \ length s" by arith - show ?thesis - proof - - from moment_app [OF les_i, of "[a]"] - have "moment (Suc i) (a # s) = moment (Suc i) s" by simp - moreover have "moment i (a#s) = moment i s" - proof - - from lti have "i \ length s" by simp - from moment_app [OF this, of "[a]"] show ?thesis by simp - qed - moreover note ih [OF les_i] - ultimately show ?thesis by auto - qed - qed +lemma moment_plus: + assumes "Suc i \ length s" + shows "(moment (Suc i) s) = (hd (moment (Suc i) s)) # (moment i s)" +proof - + have "(moment (Suc i) s) \ []" + using assms by (auto simp add: moment_def) + hence "(moment (Suc i) s) = (hd (moment (Suc i) s)) # tl (moment (Suc i) s)" + by auto + with moment_Suc_tl[OF assms] + show ?thesis by metis qed end