diff --git a/checker/verified/Huffman.thy b/checker/verified/Huffman.thy index f35cfa4..bf09c77 100644 --- a/checker/verified/Huffman.thy +++ b/checker/verified/Huffman.thy @@ -83,11 +83,8 @@ datatype 'a expr = Val (the_Val: 'a) ("\_\") | Op (left_subexpr: \'a expr\) (right_subexpr: \'a expr\) (infix "\" 70) -abbreviation is_Val :: \'a expr \ bool\ where - \is_Val E \ \a. E = \a\\ - abbreviation is_Op :: \'a expr \ bool\ where - \is_Op E \ \L R. E = L \ R\ + \is_Op E \ \is_Val E\ text \The set of values in an expression is always non-empty and finite.\ @@ -226,7 +223,7 @@ proof (cases \is_Op E\) next case False then obtain e where \E = \e\\ - using expr.exhaust_sel by blast + using expr.exhaust_sel by force hence \F = E\ using expr.exhaust_sel assms(2) expr_from_list by fastforce then show ?thesis @@ -370,7 +367,7 @@ lemma tl_Min_hd_expr_list_expr_cong: shows \tl_Min_hd_expr E = tl_Min_hd_expr F\ proof - have \\E. tl (list_expr E) = list_expr (tl_expr E) \ \the_Val E\ = E\ - by (metis expr.exhaust_sel list_tl_expr) + using expr.collapse(1) list_tl_expr by fastforce then have \list_expr (tl_expr E) = list_expr (tl_expr F)\ using assms by (metis (no_types) expr.simps(7) expr_from_list) then show ?thesis @@ -806,15 +803,16 @@ lemma Min_hd_expr_sorted_2: (** TODO continue here **) lemma hd_list_rearrange_expr: - \hd (list_expr (rearrange_expr E)) = hd (sorted_list_of_multiset (mset_expr E))\ + \hd_expr (rearrange_expr E) = hd (sorted_list_of_multiset (mset_expr E))\ by (metis Min_expr_from_mset Min_hd_rearrange_expr hd_sorted_list_of_multiset list_expr_nonempty mset_zero_iff rearrange_expr_mset) lemma hd_tl_list_rearrange_expr: \hd (tl (list_expr (rearrange_expr E))) = hd (tl (sorted_list_of_multiset (mset_expr E)))\ - by (cases E; (simp add: rearrange_expr_def; fail)?; - metis (mono_tags, lifting) Min_hd_expr_sorted_2 Min_hd_rearrange_expr is_Op_by_count - list_tl_expr rearrange_expr_mset size_mset tl_Min_hd_rearrange_expr) + by (cases E; (simp add: rearrange_expr_def; fail)?; simp; + metis (mono_tags, lifting) Min_hd_expr_sorted_2 Min_hd_rearrange_expr count_expr_Op + expr.simps(8) is_Op_by_count list_tl_expr mset_append mset_eq_length rearrange_expr_mset + tl_Min_hd_rearrange_expr) lemma take_2_from_hds: assumes \length xs = length ys\ \hd xs = hd ys\ \hd (tl xs) = hd (tl ys)\