src/HOL/Algebra/Divisibility.thy
changeset 62430 9527ff088c15
parent 61382 efac889fccbc
child 63167 0909deb8059b
equal deleted inserted replaced
62429:25271ff79171 62430:9527ff088c15
  2167   from bfs have birr: "\<forall>b \<in> set bs. irreducible G b" by (fast elim: wfactorsE)
  2167   from bfs have birr: "\<forall>b \<in> set bs. irreducible G b" by (fast elim: wfactorsE)
  2168 
  2168 
  2169   have "\<exists>c cs. c \<in> carrier G \<and> set cs \<subseteq> carrier G \<and> wfactors G cs c \<and> fmset G cs = fmset G bs - fmset G as"
  2169   have "\<exists>c cs. c \<in> carrier G \<and> set cs \<subseteq> carrier G \<and> wfactors G cs c \<and> fmset G cs = fmset G bs - fmset G as"
  2170   proof (intro mset_wfactorsEx, simp)
  2170   proof (intro mset_wfactorsEx, simp)
  2171     fix X
  2171     fix X
  2172     assume "count (fmset G as) X < count (fmset G bs) X"
  2172     assume "X \<in># fmset G bs - fmset G as"
  2173     hence "0 < count (fmset G bs) X" by simp
  2173     hence "X \<in># fmset G bs" by (rule in_diffD)
  2174     hence "X \<in> set_mset (fmset G bs)" by simp
       
  2175     hence "X \<in> set (map (assocs G) bs)" by (simp add: fmset_def)
  2174     hence "X \<in> set (map (assocs G) bs)" by (simp add: fmset_def)
  2176     hence "\<exists>x. x \<in> set bs \<and> X = assocs G x" by (induct bs) auto
  2175     hence "\<exists>x. x \<in> set bs \<and> X = assocs G x" by (induct bs) auto
  2177     from this obtain x
  2176     from this obtain x
  2178         where xbs: "x \<in> set bs"
  2177         where xbs: "x \<in> set bs"
  2179         and X: "X = assocs G x"
  2178         and X: "X = assocs G x"
  2593 
  2592 
  2594   have "\<exists>c cs. c \<in> carrier G \<and> set cs \<subseteq> carrier G \<and> wfactors G cs c \<and> 
  2593   have "\<exists>c cs. c \<in> carrier G \<and> set cs \<subseteq> carrier G \<and> wfactors G cs c \<and> 
  2595                fmset G cs = fmset G as #\<inter> fmset G bs"
  2594                fmset G cs = fmset G as #\<inter> fmset G bs"
  2596   proof (intro mset_wfactorsEx)
  2595   proof (intro mset_wfactorsEx)
  2597     fix X
  2596     fix X
  2598     assume "X \<in> set_mset (fmset G as #\<inter> fmset G bs)"
  2597     assume "X \<in># fmset G as #\<inter> fmset G bs"
  2599     hence "X \<in> set_mset (fmset G as)" by (simp add: multiset_inter_def)
  2598     hence "X \<in># fmset G as" by simp
  2600     hence "X \<in> set (map (assocs G) as)" by (simp add: fmset_def)
  2599     hence "X \<in> set (map (assocs G) as)" by (simp add: fmset_def)
  2601     hence "\<exists>x. X = assocs G x \<and> x \<in> set as" by (induct as) auto
  2600     hence "\<exists>x. X = assocs G x \<and> x \<in> set as" by (induct as) auto
  2602     from this obtain x
  2601     from this obtain x
  2603         where X: "X = assocs G x"
  2602         where X: "X = assocs G x"
  2604         and xas: "x \<in> set as"
  2603         and xas: "x \<in> set as"
  2671 
  2670 
  2672   have "\<exists>c cs. c \<in> carrier G \<and> set cs \<subseteq> carrier G \<and> wfactors G cs c \<and> 
  2671   have "\<exists>c cs. c \<in> carrier G \<and> set cs \<subseteq> carrier G \<and> wfactors G cs c \<and> 
  2673                fmset G cs = (fmset G as - fmset G bs) + fmset G bs"
  2672                fmset G cs = (fmset G as - fmset G bs) + fmset G bs"
  2674   proof (intro mset_wfactorsEx)
  2673   proof (intro mset_wfactorsEx)
  2675     fix X
  2674     fix X
  2676     assume "X \<in> set_mset ((fmset G as - fmset G bs) + fmset G bs)"
  2675     assume "X \<in># (fmset G as - fmset G bs) + fmset G bs"
  2677     hence "X \<in> set_mset (fmset G as) \<or> X \<in> set_mset (fmset G bs)"
  2676     hence "X \<in># fmset G as \<or> X \<in># fmset G bs"
  2678        by (cases "X :# fmset G bs", simp, simp)
  2677       by (auto dest: in_diffD)
  2679     moreover
  2678     moreover
  2680     {
  2679     {
  2681       assume "X \<in> set_mset (fmset G as)"
  2680       assume "X \<in> set_mset (fmset G as)"
  2682       hence "X \<in> set (map (assocs G) as)" by (simp add: fmset_def)
  2681       hence "X \<in> set (map (assocs G) as)" by (simp add: fmset_def)
  2683       hence "\<exists>x. x \<in> set as \<and> X = assocs G x" by (induct as) auto
  2682       hence "\<exists>x. x \<in> set as \<and> X = assocs G x" by (induct as) auto