equal
deleted
inserted
replaced
3607 case 2 thus ?case by (simp add:sorted_Cons) |
3607 case 2 thus ?case by (simp add:sorted_Cons) |
3608 (metis Diff_insert_absorb antisym insertE insert_iff) |
3608 (metis Diff_insert_absorb antisym insertE insert_iff) |
3609 qed |
3609 qed |
3610 qed |
3610 qed |
3611 |
3611 |
|
3612 lemma map_sorted_distinct_set_unique: |
|
3613 assumes "inj_on f (set xs \<union> set ys)" |
|
3614 assumes "sorted (map f xs)" "distinct (map f xs)" |
|
3615 "sorted (map f ys)" "distinct (map f ys)" |
|
3616 assumes "set xs = set ys" |
|
3617 shows "xs = ys" |
|
3618 proof - |
|
3619 from assms have "map f xs = map f ys" |
|
3620 by (simp add: sorted_distinct_set_unique) |
|
3621 moreover with `inj_on f (set xs \<union> set ys)` show "xs = ys" |
|
3622 by (blast intro: map_inj_on) |
|
3623 qed |
|
3624 |
3612 lemma finite_sorted_distinct_unique: |
3625 lemma finite_sorted_distinct_unique: |
3613 shows "finite A \<Longrightarrow> EX! xs. set xs = A & sorted xs & distinct xs" |
3626 shows "finite A \<Longrightarrow> EX! xs. set xs = A & sorted xs & distinct xs" |
3614 apply(drule finite_distinct_list) |
3627 apply(drule finite_distinct_list) |
3615 apply clarify |
3628 apply clarify |
3616 apply(rule_tac a="sort xs" in ex1I) |
3629 apply(rule_tac a="sort xs" in ex1I) |