# HG changeset patch # User nipkow # Date 1590303865 -7200 # Node ID 86cfb9fa3da82b14c3bcb5e2a247ae422b9d01d6 # Parent 059d2cf529d422738101d66c417a8c712b38f56e reorganised sorted_set_of_list diff -r 059d2cf529d4 -r 86cfb9fa3da8 src/HOL/List.thy --- a/src/HOL/List.thy Sun May 24 08:20:23 2020 +0200 +++ b/src/HOL/List.thy Sun May 24 09:04:25 2020 +0200 @@ -410,11 +410,11 @@ "stable_sort_key sk = (\f xs k. filter (\y. f y = k) (sk f xs) = filter (\y. f y = k) xs)" +lemma strict_sorted_iff: "strict_sorted l \ sorted l \ distinct l" +by (induction l) (auto iff: antisym_conv1) + end -lemma strict_sorted_iff: "strict_sorted l \ sorted l \ distinct l" -by (induction l) (use less_le in auto) - subsubsection \List comprehension\ @@ -6050,9 +6050,12 @@ case False thus ?thesis by simp qed -lemma length_sorted_list_of_set[simp]: - "finite A \ length(sorted_list_of_set A) = card A" -by(simp flip: distinct_card) +lemma length_sorted_list_of_set [simp]: "length (sorted_list_of_set A) = card A" +proof (cases "finite A") + case True + then show ?thesis + by(metis distinct_card distinct_sorted_list_of_set set_sorted_list_of_set) +qed auto lemmas sorted_list_of_set = set_sorted_list_of_set sorted_sorted_list_of_set distinct_sorted_list_of_set @@ -6074,25 +6077,18 @@ with assms show ?thesis by simp qed -end - -lemma sorted_list_of_set_range [simp]: - "sorted_list_of_set {m..\<^sub>\\<^sub>1xs. strict_sorted xs \ list.set xs = A" +lemma strict_sorted_equal_Uniq: "\\<^sub>\\<^sub>1xs. strict_sorted xs \ set xs = A" by (simp add: Uniq_def strict_sorted_equal) - -lemma length_sorted_list_of_set [simp]: - fixes A :: "'a::linorder set" - shows "length (sorted_list_of_set A) = card A" -proof (cases "finite A") - case True - then show ?thesis - by(metis distinct_card distinct_sorted_list_of_set set_sorted_list_of_set) -qed auto - lemma sorted_list_of_set_inject: - fixes A :: "'a::linorder set" assumes "sorted_list_of_set A = sorted_list_of_set B" "finite A" "finite B" shows "A = B" using assms set_sorted_list_of_set by fastforce lemma sorted_list_of_set_unique: - fixes A :: "'a::linorder set" assumes "finite A" - shows "strict_sorted l \ List.set l = A \ length l = card A \ sorted_list_of_set A = l" + shows "strict_sorted l \ set l = A \ length l = card A \ sorted_list_of_set A = l" using assms strict_sorted_equal by force +end + +lemma sorted_list_of_set_range [simp]: + "sorted_list_of_set {m..