src/HOL/Library/Multiset.thy
changeset 11549 e7265e70fd7c
parent 11464 ddea204de5bc
child 11655 923e4d0d36d5
equal deleted inserted replaced
11548:0028bd06a19c 11549:e7265e70fd7c
   329 
   329 
   330 lemma rep_multiset_induct_aux:
   330 lemma rep_multiset_induct_aux:
   331   "P (\<lambda>a. 0) ==> (!!f b. f \<in> multiset ==> P f ==> P (f (b := f b + 1')))
   331   "P (\<lambda>a. 0) ==> (!!f b. f \<in> multiset ==> P f ==> P (f (b := f b + 1')))
   332     ==> \<forall>f. f \<in> multiset --> setsum f {x. 0 < f x} = n --> P f"
   332     ==> \<forall>f. f \<in> multiset --> setsum f {x. 0 < f x} = n --> P f"
   333 proof -
   333 proof -
   334   case antecedent
   334   case rule_context
   335   note prems = this [unfolded multiset_def]
   335   note premises = this [unfolded multiset_def]
   336   show ?thesis
   336   show ?thesis
   337     apply (unfold multiset_def)
   337     apply (unfold multiset_def)
   338     apply (induct_tac n)
   338     apply (induct_tac n)
   339      apply simp
   339      apply simp
   340      apply clarify
   340      apply clarify
   341      apply (subgoal_tac "f = (\<lambda>a.0)")
   341      apply (subgoal_tac "f = (\<lambda>a.0)")
   342       apply simp
   342       apply simp
   343       apply (rule prems)
   343       apply (rule premises)
   344      apply (rule ext)
   344      apply (rule ext)
   345      apply force
   345      apply force
   346     apply clarify
   346     apply clarify
   347     apply (frule setsum_SucD)
   347     apply (frule setsum_SucD)
   348     apply clarify
   348     apply clarify
   356      apply blast
   356      apply blast
   357     apply (subgoal_tac "f = (f (a := f a - 1'))(a := (f (a := f a - 1')) a + 1')")
   357     apply (subgoal_tac "f = (f (a := f a - 1'))(a := (f (a := f a - 1')) a + 1')")
   358      prefer 2
   358      prefer 2
   359      apply (rule ext)
   359      apply (rule ext)
   360      apply (simp (no_asm_simp))
   360      apply (simp (no_asm_simp))
   361      apply (erule ssubst, rule prems)
   361      apply (erule ssubst, rule premises)
   362      apply blast
   362      apply blast
   363     apply (erule allE, erule impE, erule_tac [2] mp)
   363     apply (erule allE, erule impE, erule_tac [2] mp)
   364      apply blast
   364      apply blast
   365     apply (simp (no_asm_simp) add: setsum_decr del: fun_upd_apply)
   365     apply (simp (no_asm_simp) add: setsum_decr del: fun_upd_apply)
   366     apply (subgoal_tac "{x. x \<noteq> a --> 0 < f x} = {x. 0 < f x}")
   366     apply (subgoal_tac "{x. x \<noteq> a --> 0 < f x} = {x. 0 < f x}")