# HG changeset patch # User fleury # Date 1474308459 -7200 # Node ID 9aed2da07200121cc79fa0e13535451b7293e6e1 # Parent 6bf55e6e0b754c35b857db935227d6e1c3f8baf0 # after multiset intersection and union symbol diff -r 6bf55e6e0b75 -r 9aed2da07200 NEWS --- a/NEWS Mon Sep 19 20:06:21 2016 +0200 +++ b/NEWS Mon Sep 19 20:07:39 2016 +0200 @@ -635,6 +635,11 @@ msetsum ~> sum_mset msetprod ~> prod_mset +* The symbols for intersection and union of multisets have been changed: + #\ ~> \# + #\ ~> \# +INCOMPATIBILITY. + * The lemma one_step_implies_mult_aux on multisets has been removed, use one_step_implies_mult instead. INCOMPATIBILITY. diff -r 6bf55e6e0b75 -r 9aed2da07200 src/HOL/Algebra/Divisibility.thy --- a/src/HOL/Algebra/Divisibility.thy Mon Sep 19 20:06:21 2016 +0200 +++ b/src/HOL/Algebra/Divisibility.thy Mon Sep 19 20:07:39 2016 +0200 @@ -2306,10 +2306,10 @@ by (fast elim: wfactorsE) have "\c cs. c \ carrier G \ set cs \ carrier G \ wfactors G cs c \ - fmset G cs = fmset G as #\ fmset G bs" + fmset G cs = fmset G as \# fmset G bs" proof (intro mset_wfactorsEx) fix X - assume "X \# fmset G as #\ fmset G bs" + assume "X \# fmset G as \# fmset G bs" then have "X \# fmset G as" by simp then have "X \ set (map (assocs G) as)" by (simp add: fmset_def) @@ -2328,7 +2328,7 @@ where ccarr: "c \ carrier G" and cscarr: "set cs \ carrier G" and csirr: "wfactors G cs c" - and csmset: "fmset G cs = fmset G as #\ fmset G bs" + and csmset: "fmset G cs = fmset G as \# fmset G bs" by auto have "c gcdof a b" diff -r 6bf55e6e0b75 -r 9aed2da07200 src/HOL/Library/Multiset.thy --- a/src/HOL/Library/Multiset.thy Mon Sep 19 20:06:21 2016 +0200 +++ b/src/HOL/Library/Multiset.thy Mon Sep 19 20:07:39 2016 +0200 @@ -656,40 +656,40 @@ subsubsection \Intersection\ -definition inf_subset_mset :: "'a multiset \ 'a multiset \ 'a multiset" (infixl "#\" 70) where +definition inf_subset_mset :: "'a multiset \ 'a multiset \ 'a multiset" (infixl "\#" 70) where multiset_inter_def: "inf_subset_mset A B = A - (A - B)" interpretation subset_mset: semilattice_inf inf_subset_mset "op \#" "op \#" proof - have [simp]: "m \ n \ m \ q \ m \ n - (n - q)" for m n q :: nat by arith - show "class.semilattice_inf op #\ op \# op \#" + show "class.semilattice_inf op \# op \# op \#" by standard (auto simp add: multiset_inter_def subseteq_mset_def) qed \ \FIXME: avoid junk stemming from type class interpretation\ lemma multiset_inter_count [simp]: fixes A B :: "'a multiset" - shows "count (A #\ B) x = min (count A x) (count B x)" + shows "count (A \# B) x = min (count A x) (count B x)" by (simp add: multiset_inter_def) lemma set_mset_inter [simp]: - "set_mset (A #\ B) = set_mset A \ set_mset B" + "set_mset (A \# B) = set_mset A \ set_mset B" by (simp only: set_eq_iff count_greater_zero_iff [symmetric] multiset_inter_count) simp lemma diff_intersect_left_idem [simp]: - "M - M #\ N = M - N" + "M - M \# N = M - N" by (simp add: multiset_eq_iff min_def) lemma diff_intersect_right_idem [simp]: - "M - N #\ M = M - N" + "M - N \# M = M - N" by (simp add: multiset_eq_iff min_def) -lemma multiset_inter_single[simp]: "a \ b \ {#a#} #\ {#b#} = {#}" +lemma multiset_inter_single[simp]: "a \ b \ {#a#} \# {#b#} = {#}" by (rule multiset_eqI) auto lemma multiset_union_diff_commute: - assumes "B #\ C = {#}" + assumes "B \# C = {#}" shows "A + B - C = A - C + B" proof (rule multiset_eqI) fix x @@ -702,7 +702,7 @@ qed lemma disjunct_not_in: - "A #\ B = {#} \ (\a. a \# A \ a \# B)" (is "?P \ ?Q") + "A \# B = {#} \ (\a. a \# A \ a \# B)" (is "?P \ ?Q") proof assume ?P show ?Q @@ -722,46 +722,46 @@ fix a from \?Q\ have "count A a = 0 \ count B a = 0" by (auto simp add: not_in_iff) - then show "count (A #\ B) a = count {#} a" + then show "count (A \# B) a = count {#} a" by auto qed qed lemma add_mset_inter_add_mset[simp]: - "add_mset a A #\ add_mset a B = add_mset a (A #\ B)" + "add_mset a A \# add_mset a B = add_mset a (A \# B)" by (metis add_mset_add_single add_mset_diff_bothsides diff_subset_eq_self multiset_inter_def subset_mset.diff_add_assoc2) lemma add_mset_disjoint [simp]: - "add_mset a A #\ B = {#} \ a \# B \ A #\ B = {#}" - "{#} = add_mset a A #\ B \ a \# B \ {#} = A #\ B" + "add_mset a A \# B = {#} \ a \# B \ A \# B = {#}" + "{#} = add_mset a A \# B \ a \# B \ {#} = A \# B" by (auto simp: disjunct_not_in) lemma disjoint_add_mset [simp]: - "B #\ add_mset a A = {#} \ a \# B \ B #\ A = {#}" - "{#} = A #\ add_mset b B \ b \# A \ {#} = A #\ B" + "B \# add_mset a A = {#} \ a \# B \ B \# A = {#}" + "{#} = A \# add_mset b B \ b \# A \ {#} = A \# B" by (auto simp: disjunct_not_in) -lemma empty_inter[simp]: "{#} #\ M = {#}" +lemma empty_inter[simp]: "{#} \# M = {#}" by (simp add: multiset_eq_iff) -lemma inter_empty[simp]: "M #\ {#} = {#}" +lemma inter_empty[simp]: "M \# {#} = {#}" by (simp add: multiset_eq_iff) -lemma inter_add_left1: "\ x \# N \ (add_mset x M) #\ N = M #\ N" +lemma inter_add_left1: "\ x \# N \ (add_mset x M) \# N = M \# N" by (simp add: multiset_eq_iff not_in_iff) -lemma inter_add_left2: "x \# N \ (add_mset x M) #\ N = add_mset x (M #\ (N - {#x#}))" +lemma inter_add_left2: "x \# N \ (add_mset x M) \# N = add_mset x (M \# (N - {#x#}))" by (auto simp add: multiset_eq_iff elim: mset_add) -lemma inter_add_right1: "\ x \# N \ N #\ (add_mset x M) = N #\ M" +lemma inter_add_right1: "\ x \# N \ N \# (add_mset x M) = N \# M" by (simp add: multiset_eq_iff not_in_iff) -lemma inter_add_right2: "x \# N \ N #\ (add_mset x M) = add_mset x ((N - {#x#}) #\ M)" +lemma inter_add_right2: "x \# N \ N \# (add_mset x M) = add_mset x ((N - {#x#}) \# M)" by (auto simp add: multiset_eq_iff elim: mset_add) lemma disjunct_set_mset_diff: - assumes "M #\ N = {#}" + assumes "M \# N = {#}" shows "set_mset (M - N) = set_mset M" proof (rule set_eqI) fix a @@ -787,85 +787,85 @@ qed lemma inter_iff: - "a \# A #\ B \ a \# A \ a \# B" + "a \# A \# B \ a \# A \ a \# B" by simp lemma inter_union_distrib_left: - "A #\ B + C = (A + C) #\ (B + C)" + "A \# B + C = (A + C) \# (B + C)" by (simp add: multiset_eq_iff min_add_distrib_left) lemma inter_union_distrib_right: - "C + A #\ B = (C + A) #\ (C + B)" + "C + A \# B = (C + A) \# (C + B)" using inter_union_distrib_left [of A B C] by (simp add: ac_simps) lemma inter_subset_eq_union: - "A #\ B \# A + B" + "A \# B \# A + B" by (auto simp add: subseteq_mset_def) subsubsection \Bounded union\ -definition sup_subset_mset :: "'a multiset \ 'a multiset \ 'a multiset"(infixl "#\" 70) +definition sup_subset_mset :: "'a multiset \ 'a multiset \ 'a multiset"(infixl "\#" 70) where "sup_subset_mset A B = A + (B - A)" \ \FIXME irregular fact name\ interpretation subset_mset: semilattice_sup sup_subset_mset "op \#" "op \#" proof - have [simp]: "m \ n \ q \ n \ m + (q - m) \ n" for m n q :: nat by arith - show "class.semilattice_sup op #\ op \# op \#" + show "class.semilattice_sup op \# op \# op \#" by standard (auto simp add: sup_subset_mset_def subseteq_mset_def) qed \ \FIXME: avoid junk stemming from type class interpretation\ -interpretation subset_mset: bounded_lattice_bot "op #\" "op \#" "op \#" - "op #\" "{#}" +interpretation subset_mset: bounded_lattice_bot "op \#" "op \#" "op \#" + "op \#" "{#}" by standard auto lemma sup_subset_mset_count [simp]: \ \FIXME irregular fact name\ - "count (A #\ B) x = max (count A x) (count B x)" + "count (A \# B) x = max (count A x) (count B x)" by (simp add: sup_subset_mset_def) lemma set_mset_sup [simp]: - "set_mset (A #\ B) = set_mset A \ set_mset B" + "set_mset (A \# B) = set_mset A \ set_mset B" by (simp only: set_eq_iff count_greater_zero_iff [symmetric] sup_subset_mset_count) (auto simp add: not_in_iff elim: mset_add) -lemma empty_sup: "{#} #\ M = M" +lemma empty_sup: "{#} \# M = M" by (fact subset_mset.sup_bot.left_neutral) -lemma sup_empty: "M #\ {#} = M" +lemma sup_empty: "M \# {#} = M" by (fact subset_mset.sup_bot.right_neutral) -lemma sup_union_left1 [simp]: "\ x \# N \ (add_mset x M) #\ N = add_mset x (M #\ N)" +lemma sup_union_left1 [simp]: "\ x \# N \ (add_mset x M) \# N = add_mset x (M \# N)" by (simp add: multiset_eq_iff not_in_iff) -lemma sup_union_left2: "x \# N \ (add_mset x M) #\ N = add_mset x (M #\ (N - {#x#}))" +lemma sup_union_left2: "x \# N \ (add_mset x M) \# N = add_mset x (M \# (N - {#x#}))" by (simp add: multiset_eq_iff) -lemma sup_union_right1 [simp]: "\ x \# N \ N #\ (add_mset x M) = add_mset x (N #\ M)" +lemma sup_union_right1 [simp]: "\ x \# N \ N \# (add_mset x M) = add_mset x (N \# M)" by (simp add: multiset_eq_iff not_in_iff) -lemma sup_union_right2: "x \# N \ N #\ (add_mset x M) = add_mset x ((N - {#x#}) #\ M)" +lemma sup_union_right2: "x \# N \ N \# (add_mset x M) = add_mset x ((N - {#x#}) \# M)" by (simp add: multiset_eq_iff) lemma sup_union_distrib_left: - "A #\ B + C = (A + C) #\ (B + C)" + "A \# B + C = (A + C) \# (B + C)" by (simp add: multiset_eq_iff max_add_distrib_left) lemma union_sup_distrib_right: - "C + A #\ B = (C + A) #\ (C + B)" + "C + A \# B = (C + A) \# (C + B)" using sup_union_distrib_left [of A B C] by (simp add: ac_simps) lemma union_diff_inter_eq_sup: - "A + B - A #\ B = A #\ B" + "A + B - A \# B = A \# B" by (auto simp add: multiset_eq_iff) lemma union_diff_sup_eq_inter: - "A + B - A #\ B = A #\ B" + "A + B - A \# B = A \# B" by (auto simp add: multiset_eq_iff) lemma add_mset_union: - \add_mset a A #\ add_mset a B = add_mset a (A #\ B)\ + \add_mset a A \# add_mset a B = add_mset a (A \# B)\ by (auto simp: multiset_eq_iff max_def) @@ -1096,7 +1096,7 @@ using assms by (simp add: Sup_multiset_def Abs_multiset_inverse Sup_multiset_in_multiset) -interpretation subset_mset: conditionally_complete_lattice Inf Sup "op #\" "op \#" "op \#" "op #\" +interpretation subset_mset: conditionally_complete_lattice Inf Sup "op \#" "op \#" "op \#" "op \#" proof fix X :: "'a multiset" and A assume "X \ A" @@ -1220,10 +1220,10 @@ with assms show ?thesis by (simp add: in_Sup_multiset_iff) qed -interpretation subset_mset: distrib_lattice "op #\" "op \#" "op \#" "op #\" +interpretation subset_mset: distrib_lattice "op \#" "op \#" "op \#" "op \#" proof fix A B C :: "'a multiset" - show "A #\ (B #\ C) = A #\ B #\ (A #\ C)" + show "A \# (B \# C) = A \# B \# (A \# C)" by (intro multiset_eqI) simp_all qed @@ -1263,10 +1263,10 @@ lemma filter_diff_mset [simp]: "filter_mset P (M - N) = filter_mset P M - filter_mset P N" by (rule multiset_eqI) simp -lemma filter_inter_mset [simp]: "filter_mset P (M #\ N) = filter_mset P M #\ filter_mset P N" +lemma filter_inter_mset [simp]: "filter_mset P (M \# N) = filter_mset P M \# filter_mset P N" by (rule multiset_eqI) simp -lemma filter_sup_mset[simp]: "filter_mset P (A #\ B) = filter_mset P A #\ filter_mset P B" +lemma filter_sup_mset[simp]: "filter_mset P (A \# B) = filter_mset P A \# filter_mset P B" by (rule multiset_eqI) simp lemma filter_mset_add_mset [simp]: @@ -2687,10 +2687,10 @@ lemma mult_cancel_max: assumes "trans s" and "irrefl s" - shows "(X, Y) \ mult s \ (X - X #\ Y, Y - X #\ Y) \ mult s" (is "?L \ ?R") + shows "(X, Y) \ mult s \ (X - X \# Y, Y - X \# Y) \ mult s" (is "?L \ ?R") proof - - have "X - X #\ Y + X #\ Y = X" "Y - X #\ Y + X #\ Y = Y" by (auto simp: count_inject[symmetric]) - thus ?thesis using mult_cancel[OF assms, of "X - X #\ Y" "X #\ Y" "Y - X #\ Y"] by auto + have "X - X \# Y + X \# Y = X" "Y - X \# Y + X \# Y = Y" by (auto simp: count_inject[symmetric]) + thus ?thesis using mult_cancel[OF assms, of "X - X \# Y" "X \# Y" "Y - X \# Y"] by auto qed @@ -2699,37 +2699,37 @@ text \ Predicate variants of \mult\ and the reflexive closure of \mult\, which are executable whenever the given predicate \P\ is. Together with the standard - code equations for \op #\\ and \op -\ this should yield quadratic + code equations for \op \#\ and \op -\ this should yield quadratic (with respect to calls to \P\) implementations of \multp\ and \multeqp\. \ definition multp :: "('a \ 'a \ bool) \ 'a multiset \ 'a multiset \ bool" where "multp P N M = - (let Z = M #\ N; X = M - Z in + (let Z = M \# N; X = M - Z in X \ {#} \ (let Y = N - Z in (\y \ set_mset Y. \x \ set_mset X. P y x)))" definition multeqp :: "('a \ 'a \ bool) \ 'a multiset \ 'a multiset \ bool" where "multeqp P N M = - (let Z = M #\ N; X = M - Z; Y = N - Z in + (let Z = M \# N; X = M - Z; Y = N - Z in (\y \ set_mset Y. \x \ set_mset X. P y x))" lemma multp_iff: assumes "irrefl R" and "trans R" and [simp]: "\x y. P x y \ (x, y) \ R" shows "multp P N M \ (N, M) \ mult R" (is "?L \ ?R") proof - - have *: "M #\ N + (N - M #\ N) = N" "M #\ N + (M - M #\ N) = M" - "(M - M #\ N) #\ (N - M #\ N) = {#}" by (auto simp: count_inject[symmetric]) + have *: "M \# N + (N - M \# N) = N" "M \# N + (M - M \# N) = M" + "(M - M \# N) \# (N - M \# N) = {#}" by (auto simp: count_inject[symmetric]) show ?thesis proof assume ?L thus ?R - using one_step_implies_mult[of "M - M #\ N" "N - M #\ N" R "M #\ N"] * + using one_step_implies_mult[of "M - M \# N" "N - M \# N" R "M \# N"] * by (auto simp: multp_def Let_def) next - { fix I J K :: "'a multiset" assume "(I + J) #\ (I + K) = {#}" + { fix I J K :: "'a multiset" assume "(I + J) \# (I + K) = {#}" then have "I = {#}" by (metis inter_union_distrib_right union_eq_empty) } note [dest!] = this assume ?R thus ?L - using mult_implies_one_step[OF assms(2), of "N - M #\ N" "M - M #\ N"] + using mult_implies_one_step[OF assms(2), of "N - M \# N" "M - M \# N"] mult_cancel_max[OF assms(2,1), of "N" "M"] * by (auto simp: multp_def) qed qed @@ -2738,9 +2738,9 @@ assumes "irrefl R" and "trans R" and "\x y. P x y \ (x, y) \ R" shows "multeqp P N M \ (N, M) \ (mult R)\<^sup>=" proof - - { assume "N \ M" "M - M #\ N = {#}" + { assume "N \ M" "M - M \# N = {#}" then obtain y where "count N y \ count M y" by (auto simp: count_inject[symmetric]) - then have "\y. count M y < count N y" using `M - M #\ N = {#}` + then have "\y. count M y < count N y" using `M - M \# N = {#}` by (auto simp: count_inject[symmetric] dest!: le_neq_implies_less fun_cong[of _ _ y]) } then have "multeqp P N M \ multp P N M \ N = M" @@ -3020,13 +3020,13 @@ lemma mset_subset_trans: "(M::'a multiset) \# K \ K \# N \ M \# N" by (fact subset_mset.less_trans) -lemma multiset_inter_commute: "A #\ B = B #\ A" +lemma multiset_inter_commute: "A \# B = B \# A" by (fact subset_mset.inf.commute) -lemma multiset_inter_assoc: "A #\ (B #\ C) = A #\ B #\ C" +lemma multiset_inter_assoc: "A \# (B \# C) = A \# B \# C" by (fact subset_mset.inf.assoc [symmetric]) -lemma multiset_inter_left_commute: "A #\ (B #\ C) = B #\ (A #\ C)" +lemma multiset_inter_left_commute: "A \# (B \# C) = B \# (A \# C)" by (fact subset_mset.inf.left_commute) lemmas multiset_inter_ac = @@ -3097,24 +3097,24 @@ by (rule sym, induct ys arbitrary: xs) (simp_all add: diff_add diff_right_commute diff_diff_add) lemma [code]: - "mset xs #\ mset ys = + "mset xs \# mset ys = mset (snd (fold (\x (ys, zs). if x \ set ys then (remove1 x ys, x # zs) else (ys, zs)) xs (ys, [])))" proof - have "\zs. mset (snd (fold (\x (ys, zs). if x \ set ys then (remove1 x ys, x # zs) else (ys, zs)) xs (ys, zs))) = - (mset xs #\ mset ys) + mset zs" + (mset xs \# mset ys) + mset zs" by (induct xs arbitrary: ys) (auto simp add: inter_add_right1 inter_add_right2 ac_simps) then show ?thesis by simp qed lemma [code]: - "mset xs #\ mset ys = + "mset xs \# mset ys = mset (case_prod append (fold (\x (ys, zs). (remove1 x ys, x # zs)) xs (ys, [])))" proof - have "\zs. mset (case_prod append (fold (\x (ys, zs). (remove1 x ys, x # zs)) xs (ys, zs))) = - (mset xs #\ mset ys) + mset zs" + (mset xs \# mset ys) + mset zs" by (induct xs arbitrary: ys) (simp_all add: multiset_eq_iff) then show ?thesis by simp qed diff -r 6bf55e6e0b75 -r 9aed2da07200 src/HOL/Number_Theory/Factorial_Ring.thy --- a/src/HOL/Number_Theory/Factorial_Ring.thy Mon Sep 19 20:06:21 2016 +0200 +++ b/src/HOL/Number_Theory/Factorial_Ring.thy Mon Sep 19 20:07:39 2016 +0200 @@ -541,7 +541,7 @@ by simp with A B C have subset: "A \# B + C" by (subst (asm) prod_mset_dvd_prod_mset_primes_iff) auto - define A1 and A2 where "A1 = A #\ B" and "A2 = A - A1" + define A1 and A2 where "A1 = A \# B" and "A2 = A - A1" have "A = A1 + A2" unfolding A1_def A2_def by (rule sym, intro subset_mset.add_diff_inverse) simp_all from subset have "A1 \# B" "A2 \# C" @@ -1440,10 +1440,10 @@ definition "gcd_factorial a b = (if a = 0 then normalize b else if b = 0 then normalize a - else prod_mset (prime_factorization a #\ prime_factorization b))" + else prod_mset (prime_factorization a \# prime_factorization b))" definition "lcm_factorial a b = (if a = 0 \ b = 0 then 0 - else prod_mset (prime_factorization a #\ prime_factorization b))" + else prod_mset (prime_factorization a \# prime_factorization b))" definition "Gcd_factorial A = (if A \ {0} then 0 else prod_mset (Inf (prime_factorization ` (A - {0}))))" @@ -1457,24 +1457,24 @@ lemma prime_factorization_gcd_factorial: assumes [simp]: "a \ 0" "b \ 0" - shows "prime_factorization (gcd_factorial a b) = prime_factorization a #\ prime_factorization b" + shows "prime_factorization (gcd_factorial a b) = prime_factorization a \# prime_factorization b" proof - have "prime_factorization (gcd_factorial a b) = - prime_factorization (prod_mset (prime_factorization a #\ prime_factorization b))" + prime_factorization (prod_mset (prime_factorization a \# prime_factorization b))" by (simp add: gcd_factorial_def) - also have "\ = prime_factorization a #\ prime_factorization b" + also have "\ = prime_factorization a \# prime_factorization b" by (subst prime_factorization_prod_mset_primes) auto finally show ?thesis . qed lemma prime_factorization_lcm_factorial: assumes [simp]: "a \ 0" "b \ 0" - shows "prime_factorization (lcm_factorial a b) = prime_factorization a #\ prime_factorization b" + shows "prime_factorization (lcm_factorial a b) = prime_factorization a \# prime_factorization b" proof - have "prime_factorization (lcm_factorial a b) = - prime_factorization (prod_mset (prime_factorization a #\ prime_factorization b))" + prime_factorization (prod_mset (prime_factorization a \# prime_factorization b))" by (simp add: lcm_factorial_def) - also have "\ = prime_factorization a #\ prime_factorization b" + also have "\ = prime_factorization a \# prime_factorization b" by (subst prime_factorization_prod_mset_primes) auto finally show ?thesis . qed @@ -1527,8 +1527,8 @@ lemma normalize_gcd_factorial: "normalize (gcd_factorial a b) = gcd_factorial a b" proof - - have "normalize (prod_mset (prime_factorization a #\ prime_factorization b)) = - prod_mset (prime_factorization a #\ prime_factorization b)" + have "normalize (prod_mset (prime_factorization a \# prime_factorization b)) = + prod_mset (prime_factorization a \# prime_factorization b)" by (intro normalize_prod_mset_primes) auto thus ?thesis by (simp add: gcd_factorial_def) qed @@ -1541,7 +1541,7 @@ from that False have "?p c \# ?p a" "?p c \# ?p b" by (simp_all add: prime_factorization_subset_iff_dvd) hence "prime_factorization c \# - prime_factorization (prod_mset (prime_factorization a #\ prime_factorization b))" + prime_factorization (prod_mset (prime_factorization a \# prime_factorization b))" using False by (subst prime_factorization_prod_mset_primes) auto with False show ?thesis by (auto simp: gcd_factorial_def prime_factorization_subset_iff_dvd [symmetric]) @@ -1553,12 +1553,12 @@ case False let ?p = "prime_factorization" from False have "prod_mset (?p (a * b)) div gcd_factorial a b = - prod_mset (?p a + ?p b - ?p a #\ ?p b)" + prod_mset (?p a + ?p b - ?p a \# ?p b)" by (subst prod_mset_diff) (auto simp: lcm_factorial_def gcd_factorial_def prime_factorization_mult subset_mset.le_infI1) also from False have "prod_mset (?p (a * b)) = normalize (a * b)" by (intro prod_mset_prime_factorization) simp_all - also from False have "prod_mset (?p a + ?p b - ?p a #\ ?p b) = lcm_factorial a b" + also from False have "prod_mset (?p a + ?p b - ?p a \# ?p b) = lcm_factorial a b" by (simp add: union_diff_inter_eq_sup lcm_factorial_def) finally show ?thesis .. qed (auto simp: lcm_factorial_def) @@ -1750,12 +1750,12 @@ lemma prime_factorization_gcd: assumes [simp]: "a \ 0" "b \ 0" - shows "prime_factorization (gcd a b) = prime_factorization a #\ prime_factorization b" + shows "prime_factorization (gcd a b) = prime_factorization a \# prime_factorization b" by (simp add: gcd_eq_gcd_factorial prime_factorization_gcd_factorial) lemma prime_factorization_lcm: assumes [simp]: "a \ 0" "b \ 0" - shows "prime_factorization (lcm a b) = prime_factorization a #\ prime_factorization b" + shows "prime_factorization (lcm a b) = prime_factorization a \# prime_factorization b" by (simp add: lcm_eq_lcm_factorial prime_factorization_lcm_factorial) lemma prime_factorization_Gcd: