src/HOL/List.thy
changeset 35603 c0db094d0d80
parent 35510 64d2d54cbf03
child 35608 db4045d1406e
equal deleted inserted replaced
35602:e814157560e8 35603:c0db094d0d80
  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)