# HG changeset patch # User nipkow # Date 1380293327 -7200 # Node ID 436649a2ed62b26cb6769d8d751094234f7fd713 # Parent ccfd22f937beeb185c928043c76a03c2fa113b3a added Bleast code eqns for RBT diff -r ccfd22f937be -r 436649a2ed62 src/HOL/Library/RBT_Set.thy --- a/src/HOL/Library/RBT_Set.thy Fri Sep 27 15:38:23 2013 +0200 +++ b/src/HOL/Library/RBT_Set.thy Fri Sep 27 16:48:47 2013 +0200 @@ -135,6 +135,9 @@ lemma [code, code del]: "List.map_project = List.map_project" .. +lemma [code, code del]: + "List.Bleast = List.Bleast" .. + section {* Lemmas *} @@ -805,6 +808,28 @@ "sorted_list_of_set (Set t) = keys t" by (auto simp add: set_keys intro: sorted_distinct_set_unique) +lemma Bleast_code [code]: + "Bleast (Set t) P = (case filter P (keys t) of + x#xs \ x | + [] \ abort_Bleast (Set t) P)" +proof (cases "filter P (keys t)") + case Nil thus ?thesis by (simp add: Bleast_def abort_Bleast_def) +next + case (Cons x ys) + have "(LEAST x. x \ Set t \ P x) = x" + proof (rule Least_equality) + show "x \ Set t \ P x" using Cons[symmetric] + by(auto simp add: set_keys Cons_eq_filter_iff) + next + fix y assume "y : Set t \ P y" + then show "x \ y" using Cons[symmetric] + by(auto simp add: set_keys Cons_eq_filter_iff) + (metis sorted_Cons sorted_append sorted_keys) + qed + thus ?thesis using Cons by (simp add: Bleast_def) +qed + + hide_const (open) RBT_Set.Set RBT_Set.Coset end