src/HOL/Library/DAList_Multiset.thy
changeset 60495 d7ff0a1df90a
parent 60397 f8a513fedb31
child 60515 484559628038
equal deleted inserted replaced
60492:db0f4f4c17c7 60495:d7ff0a1df90a
    32 
    32 
    33 lemma [code, code del]: "msetsum = msetsum" ..
    33 lemma [code, code del]: "msetsum = msetsum" ..
    34 
    34 
    35 lemma [code, code del]: "msetprod = msetprod" ..
    35 lemma [code, code del]: "msetprod = msetprod" ..
    36 
    36 
    37 lemma [code, code del]: "set_of = set_of" ..
    37 lemma [code, code del]: "set_mset = set_mset" ..
    38 
    38 
    39 lemma [code, code del]: "sorted_list_of_multiset = sorted_list_of_multiset" ..
    39 lemma [code, code del]: "sorted_list_of_multiset = sorted_list_of_multiset" ..
    40 
    40 
    41 lemma [code, code del]: "subset_mset = subset_mset" ..
    41 lemma [code, code del]: "subset_mset = subset_mset" ..
    42 
    42 
   401   show "n + x = (Suc ^^ n) x"
   401   show "n + x = (Suc ^^ n) x"
   402     by (induct n) auto
   402     by (induct n) auto
   403 qed
   403 qed
   404 
   404 
   405 
   405 
   406 lemma set_of_fold: "set_of A = fold_mset insert {} A" (is "_ = fold_mset ?f _ _")
   406 lemma set_mset_fold: "set_mset A = fold_mset insert {} A" (is "_ = fold_mset ?f _ _")
   407 proof -
   407 proof -
   408   interpret comp_fun_commute ?f by default auto
   408   interpret comp_fun_commute ?f by default auto
   409   show ?thesis by (induct A) auto
   409   show ?thesis by (induct A) auto
   410 qed
   410 qed
   411 
   411 
   412 lemma set_of_Bag[code]:
   412 lemma set_mset_Bag[code]:
   413   "set_of (Bag ms) = DAList_Multiset.fold (\<lambda>a n. (if n = 0 then (\<lambda>m. m) else insert a)) {} ms"
   413   "set_mset (Bag ms) = DAList_Multiset.fold (\<lambda>a n. (if n = 0 then (\<lambda>m. m) else insert a)) {} ms"
   414   unfolding set_of_fold
   414   unfolding set_mset_fold
   415 proof (rule comp_fun_commute.DAList_Multiset_fold, unfold_locales, (auto simp: ac_simps)[1])
   415 proof (rule comp_fun_commute.DAList_Multiset_fold, unfold_locales, (auto simp: ac_simps)[1])
   416   fix a n x
   416   fix a n x
   417   show "(if n = 0 then \<lambda>m. m else insert a) x = (insert a ^^ n) x" (is "?l n = ?r n")
   417   show "(if n = 0 then \<lambda>m. m else insert a) x = (insert a ^^ n) x" (is "?l n = ?r n")
   418   proof (cases n)
   418   proof (cases n)
   419     case 0
   419     case 0