# HG changeset patch # User paulson # Date 1434055315 -3600 # Node ID 5e9de4faef986a334fde37193d05f428ef05161d # Parent b4b672f09270cb293e901b314dd5e6a61b6eb453 fixed several "inside-out" proofs diff -r b4b672f09270 -r 5e9de4faef98 src/HOL/Multivariate_Analysis/Integration.thy --- a/src/HOL/Multivariate_Analysis/Integration.thy Thu Jun 11 18:24:44 2015 +0200 +++ b/src/HOL/Multivariate_Analysis/Integration.thy Thu Jun 11 21:41:55 2015 +0100 @@ -1,5 +1,5 @@ (* Author: John Harrison - Author: Robert Himmelmann, TU Muenchen (Translation from HOL light) + Author: Robert Himmelmann, TU Muenchen (Translation from HOL light); proofs reworked by LCP *) section \Kurzweil-Henstock Gauge Integration in many dimensions.\ @@ -1042,7 +1042,7 @@ next case False note p = division_ofD[OF assms(1)] - have *: "\k\p. \q. q division_of cbox a b \ k \ q" + have div_cbox: "\k\p. \q. q division_of cbox a b \ k \ q" proof case goal1 obtain c d where k: "k = cbox c d" @@ -1056,7 +1056,7 @@ unfolding k by auto qed obtain q where q: "\x. x \ p \ q x division_of cbox a b" "\x. x \ p \ x \ q x" - using bchoice[OF *] by blast + using bchoice[OF div_cbox] by blast { fix x assume x: "x \ p" have "q x division_of \q x" @@ -1075,44 +1075,37 @@ have "d \ p division_of cbox a b" proof - have te: "\s f t. s \ {} \ \i\s. f i \ i = t \ t = \(f ` s) \ \s" by auto - have *: "cbox a b = \((\i. \(q i - {i})) ` p) \ \p" + have cbox_eq: "cbox a b = \((\i. \(q i - {i})) ` p) \ \p" proof (rule te[OF False], clarify) fix i assume i: "i \ p" show "\(q i - {i}) \ i = cbox a b" using division_ofD(6)[OF q(1)[OF i]] using q(2)[OF i] by auto qed - show "d \ p division_of (cbox a b)" - unfolding * - apply (rule division_disjoint_union[OF d assms(1)]) - apply (rule inter_interior_unions_intervals) - apply (rule p open_interior ballI)+ - apply assumption - proof - fix k + { fix k assume k: "k \ p" - have *: "\u t s. u \ s \ s \ t = {} \ u \ t = {}" + have *: "\u t s. t \ s = {} \ u \ s \ u \ t = {}" by auto - show "interior (\ ((\i. \(q i - {i})) ` p)) \ interior k = {}" - apply (rule *[of _ "interior (\(q k - {k}))"]) - defer - apply (subst Int_commute) - apply (rule inter_interior_unions_intervals) - proof - + have "interior (\i\p. \(q i - {i})) \ interior k = {}" + proof (rule *[OF inter_interior_unions_intervals]) note qk=division_ofD[OF q(1)[OF k]] show "finite (q k - {k})" "open (interior k)" "\t\q k - {k}. \a b. t = cbox a b" using qk by auto show "\t\q k - {k}. interior k \ interior t = {}" using qk(5) using q(2)[OF k] by auto - have *: "\x s. x \ s \ \s \ x" - by auto - show "interior (\ ((\i. \(q i - {i})) ` p)) \ interior (\(q k - {k}))" - apply (rule interior_mono *)+ + show "interior (\i\p. \(q i - {i})) \ interior (\(q k - {k}))" + apply (rule interior_mono)+ using k apply auto done - qed - qed + qed } note [simp] = this + show "d \ p division_of (cbox a b)" + unfolding cbox_eq + apply (rule division_disjoint_union[OF d assms(1)]) + apply (rule inter_interior_unions_intervals) + apply (rule p open_interior ballI)+ + apply simp_all + done qed then show ?thesis by (meson Un_upper2 that) @@ -1144,51 +1137,40 @@ show ?thesis proof (cases "cbox a b \ cbox c d = {}") case True - have *: "\a b. {a, b} = {a} \ {b}" by auto show ?thesis apply (rule that[of "{cbox c d}"]) - unfolding * + apply (subst insert_is_Un) apply (rule division_disjoint_union) - using \cbox c d \ {}\ True assms - using interior_subset + using \cbox c d \ {}\ True assms interior_subset apply auto done next case False obtain u v where uv: "cbox a b \ cbox c d = cbox u v" unfolding inter_interval by auto - have *: "cbox u v \ cbox c d" using uv by auto + have uv_sub: "cbox u v \ cbox c d" using uv by auto obtain p where "p division_of cbox c d" "cbox u v \ p" - by (rule partial_division_extend_1[OF * False[unfolded uv]]) + by (rule partial_division_extend_1[OF uv_sub False[unfolded uv]]) note p = this division_ofD[OF this(1)] - have *: "cbox a b \ cbox c d = cbox a b \ \(p - {cbox u v})" "\x s. insert x s = {x} \ s" + have "interior (cbox a b \ \(p - {cbox u v})) = interior(cbox u v \ \(p - {cbox u v}))" + apply (rule arg_cong[of _ _ interior]) + using p(8) uv by auto + also have "\ = {}" + unfolding interior_inter + apply (rule inter_interior_unions_intervals) + using p(6) p(7)[OF p(2)] p(3) + apply auto + done + finally have [simp]: "interior (cbox a b) \ interior (\(p - {cbox u v})) = {}" by simp + have cbe: "cbox a b \ cbox c d = cbox a b \ \(p - {cbox u v})" using p(8) unfolding uv[symmetric] by auto show ?thesis apply (rule that[of "p - {cbox u v}"]) - unfolding *(1) - apply (subst *(2)) + apply (simp add: cbe) + apply (subst insert_is_Un) apply (rule division_disjoint_union) - apply (rule, rule assms) - apply (rule division_of_subset[of p]) - apply (rule division_of_union_self[OF p(1)]) - defer - unfolding interior_inter[symmetric] - proof - - have *: "\cd p uv ab. p \ cd \ ab \ cd = uv \ ab \ p = uv \ p" by auto - have "interior (cbox a b \ \(p - {cbox u v})) = interior(cbox u v \ \(p - {cbox u v}))" - apply (rule arg_cong[of _ _ interior]) - apply (rule *[OF _ uv]) - using p(8) - apply auto - done - also have "\ = {}" - unfolding interior_inter - apply (rule inter_interior_unions_intervals) - using p(6) p(7)[OF p(2)] p(3) - apply auto - done - finally show "interior (cbox a b \ \(p - {cbox u v})) = {}" . - qed auto + apply (simp_all add: assms division_of_self) + by (metis Diff_subset division_of_subset p(1) p(8)) qed qed @@ -1248,10 +1230,8 @@ from bchoice[OF this] obtain q where "\x\p. insert (cbox a b) (q x) division_of (cbox a b) \ x" .. note q = division_ofD[OF this[rule_format]] let ?D = "\{insert (cbox a b) (q k) | k. k \ p}" - show thesis - apply (rule that[of "?D"]) - apply (rule division_ofI) - proof - + show thesis + proof (rule that[OF division_ofI]) have *: "{insert (cbox a b) (q k) |k. k \ p} = (\k. insert (cbox a b) (q k)) ` p" by auto show "finite ?D" @@ -1842,12 +1822,11 @@ using assms(1,3) by metis then have ab: "\i. i\Basis \ a \ i \ b \ i" by (force simp: mem_box) - { - fix f - have "finite f \ - \s\f. P s \ - \s\f. \a b. s = cbox a b \ - \s\f.\t\f. s \ t \ interior s \ interior t = {} \ P (\f)" + { fix f + have "\finite f; + \s. s\f \ P s; + \s. s\f \ \a b. s = cbox a b; + \s t. s\f \ t\f \ s \ t \ interior s \ interior t = {}\ \ P (\f)" proof (induct f rule: finite_induct) case empty show ?case @@ -1859,9 +1838,9 @@ apply (rule assms(2)[rule_format]) using inter_interior_unions_intervals [of f "interior x"] apply (auto simp: insert) - using insert.prems(3) insert.hyps(2) by fastforce - qed - } note * = this + by (metis IntI empty_iff insert.hyps(2) insert.prems(3) insert_iff) + qed + } note UN_cases = this let ?A = "{cbox c d | c d::'a. \i\Basis. (c\i = a\i) \ (d\i = (a\i + b\i) / 2) \ (c\i = (a\i + b\i) / 2) \ (d\i = b\i)}" let ?PP = "\c d. \i\Basis. a\i \ c\i \ c\i \ d\i \ d\i \ b\i \ 2 * (d\i - c\i) \ b\i - a\i" @@ -1873,47 +1852,35 @@ } assume as: "\c d. ?PP c d \ P (cbox c d)" have "P (\ ?A)" - apply (rule *) - apply (rule_tac[2-] ballI) - apply (rule_tac[4] ballI) - apply (rule_tac[4] impI) - proof - + proof (rule UN_cases) let ?B = "(\s. cbox (\i\Basis. (if i \ s then a\i else (a\i + b\i) / 2) *\<^sub>R i::'a) (\i\Basis. (if i \ s then (a\i + b\i) / 2 else b\i) *\<^sub>R i)) ` {s. s \ Basis}" have "?A \ ?B" proof case goal1 - then obtain c d where x: "x = cbox c d" - "\i. i \ Basis \ - c \ i = a \ i \ d \ i = (a \ i + b \ i) / 2 \ - c \ i = (a \ i + b \ i) / 2 \ d \ i = b \ i" by blast - have *: "\a b c d. a = c \ b = d \ cbox a b = cbox c d" - by auto + then obtain c d + where x: "x = cbox c d" + "\i. i \ Basis \ + c \ i = a \ i \ d \ i = (a \ i + b \ i) / 2 \ + c \ i = (a \ i + b \ i) / 2 \ d \ i = b \ i" by blast show "x \ ?B" - unfolding image_iff + unfolding image_iff x apply (rule_tac x="{i. i\Basis \ c\i = a\i}" in bexI) - unfolding x - apply (rule *) - apply (simp_all only: euclidean_eq_iff[where 'a='a] inner_setsum_left_Basis mem_Collect_eq simp_thms - cong: ball_cong) - apply safe - proof - - fix i :: 'a - assume i: "i \ Basis" - then show "c \ i = (if c \ i = a \ i then a \ i else (a \ i + b \ i) / 2)" - and "d \ i = (if c \ i = a \ i then (a \ i + b \ i) / 2 else b \ i)" - using x(2)[of i] ab[OF i] by (auto simp add:field_simps) - qed + apply (rule arg_cong2 [where f = cbox]) + using x(2) ab + apply (auto simp add: euclidean_eq_iff[where 'a='a]) + by fastforce qed then show "finite ?A" by (rule finite_subset) auto + next fix s assume "s \ ?A" - then obtain c d where s: - "s = cbox c d" - "\i. i \ Basis \ - c \ i = a \ i \ d \ i = (a \ i + b \ i) / 2 \ - c \ i = (a \ i + b \ i) / 2 \ d \ i = b \ i" + then obtain c d + where s: "s = cbox c d" + "\i. i \ Basis \ + c \ i = a \ i \ d \ i = (a \ i + b \ i) / 2 \ + c \ i = (a \ i + b \ i) / 2 \ d \ i = b \ i" by blast show "P s" unfolding s @@ -2179,28 +2146,18 @@ next assume as: "\ (\p. p tagged_division_of (cbox a b) \ g fine p)" obtain x where x: - "x \ (cbox a b)" - "\e. 0 < e \ - \c d. - x \ cbox c d \ - cbox c d \ ball x e \ - cbox c d \ (cbox a b) \ - \ (\p. p tagged_division_of cbox c d \ g fine p)" - apply (rule interval_bisection[of "\s. \p. p tagged_division_of s \ g fine p",rule_format,OF _ _ as]) - apply (rule_tac x="{}" in exI) - defer - apply (erule conjE exE)+ - proof - - show "{} tagged_division_of {} \ g fine {}" - unfolding fine_def by auto - fix s t p p' - assume "p tagged_division_of s" "g fine p" "p' tagged_division_of t" "g fine p'" - "interior s \ interior t = {}" - then show "\p. p tagged_division_of s \ t \ g fine p" - apply (rule_tac x="p \ p'" in exI) - apply (simp add: tagged_division_union fine_union) - done - qed blast + "x \ (cbox a b)" + "\e. 0 < e \ + \c d. + x \ cbox c d \ + cbox c d \ ball x e \ + cbox c d \ (cbox a b) \ + \ (\p. p tagged_division_of cbox c d \ g fine p)" + apply (rule interval_bisection[of "\s. \p. p tagged_division_of s \ g fine p", OF _ _ as]) + apply (simp add: fine_def) + apply (metis tagged_division_union fine_union) + apply (auto simp: ) + done obtain e where e: "e > 0" "ball x e \ g x" using gaugeD[OF assms, of x] unfolding open_contains_ball by auto from x(2)[OF e(1)] @@ -2388,35 +2345,30 @@ from pos_bounded obtain B where B: "0 < B" "\x. norm (h x) \ norm x * B" by blast - have *: "e / B > 0" using goal1(2) B by simp - obtain g where g: "gauge g" - "\p. p tagged_division_of (cbox a b) \ g fine p \ - norm ((\(x, k)\p. content k *\<^sub>R f x) - y) < e / B" - using "*" goal1(1) by auto - show ?case - apply (rule_tac x=g in exI) - apply rule - apply (rule g(1)) - apply rule - apply rule - apply (erule conjE) - proof - - fix p + have "e / B > 0" using goal1(2) B by simp + then obtain g + where g: "gauge g" + "\p. p tagged_division_of (cbox a b) \ g fine p \ + norm ((\(x, k)\p. content k *\<^sub>R f x) - y) < e / B" + using goal1(1) by auto + { fix p assume as: "p tagged_division_of (cbox a b)" "g fine p" - have *: "\x k. h ((\(x, k). content k *\<^sub>R f x) x) = (\(x, k). h (content k *\<^sub>R f x)) x" + have hc: "\x k. h ((\(x, k). content k *\<^sub>R f x) x) = (\(x, k). h (content k *\<^sub>R f x)) x" by auto - have "(\(x, k)\p. content k *\<^sub>R (h \ f) x) = setsum (h \ (\(x, k). content k *\<^sub>R f x)) p" - unfolding o_def unfolding scaleR[symmetric] * by simp + then have "(\(x, k)\p. content k *\<^sub>R (h \ f) x) = setsum (h \ (\(x, k). content k *\<^sub>R f x)) p" + unfolding o_def unfolding scaleR[symmetric] hc by simp also have "\ = h (\(x, k)\p. content k *\<^sub>R f x)" using setsum[of "\(x,k). content k *\<^sub>R f x" p] using as by auto - finally have *: "(\(x, k)\p. content k *\<^sub>R (h \ f) x) = h (\(x, k)\p. content k *\<^sub>R f x)" . - show "norm ((\(x, k)\p. content k *\<^sub>R (h \ f) x) - h y) < e" - unfolding * diff[symmetric] + finally have "(\(x, k)\p. content k *\<^sub>R (h \ f) x) = h (\(x, k)\p. content k *\<^sub>R f x)" . + then have "norm ((\(x, k)\p. content k *\<^sub>R (h \ f) x) - h y) < e" + apply (simp add: diff[symmetric]) apply (rule le_less_trans[OF B(2)]) using g(2)[OF as] B(1) apply (auto simp add: field_simps) done - qed + } + with g show ?case + by (rule_tac x=g in exI) auto qed { presume "\ (\a b. s = cbox a b) \ ?thesis" @@ -2696,27 +2648,23 @@ lemma has_integral_null[dest]: assumes "content(cbox a b) = 0" shows "(f has_integral 0) (cbox a b)" - unfolding has_integral - apply rule - apply rule - apply (rule_tac x="\x. ball x 1" in exI) - apply rule - defer - apply rule - apply rule - apply (erule conjE) -proof - - fix e :: real - assume e: "e > 0" - then show "gauge (\x. ball x 1)" +proof - + have "gauge (\x. ball x 1)" by auto - fix p - assume p: "p tagged_division_of (cbox a b)" - have "norm ((\(x, k)\p. content k *\<^sub>R f x) - 0) = 0" - unfolding norm_eq_zero diff_0_right - using setsum_content_null[OF assms(1) p, of f] . - then show "norm ((\(x, k)\p. content k *\<^sub>R f x) - 0) < e" - using e by auto + moreover + { + fix e :: real + fix p + assume e: "e > 0" + assume p: "p tagged_division_of (cbox a b)" + have "norm ((\(x, k)\p. content k *\<^sub>R f x) - 0) = 0" + unfolding norm_eq_zero diff_0_right + using setsum_content_null[OF assms(1) p, of f] . + then have "norm ((\(x, k)\p. content k *\<^sub>R f x) - 0) < e" + using e by auto + } + ultimately show ?thesis + by (auto simp: has_integral) qed lemma has_integral_null_real[dest]: @@ -3259,9 +3207,7 @@ unfolding xl' by auto show "x \ l" "l \ cbox a b \ {x. x \ k \ c}" unfolding xl' - using p(4-6)[OF xl'(3)] - using xl'(4) - using lem0(2)[OF xl'(3-4)] + using p(4-6)[OF xl'(3)] xl'(4) lem0(2)[OF xl'(3-4)] by auto show "\a b. l = cbox a b" unfolding xl' @@ -3391,32 +3337,17 @@ norm ((setsum (\(x,k). content k *\<^sub>R f x) p1 + setsum (\(x,k). content k *\<^sub>R f x) p2) - i) < e" proof - guess d using has_integralD[OF assms(1-2)] . note d=this - show ?thesis - apply (rule that[of d]) - apply (rule d) - apply rule - apply rule - apply rule - apply (elim conjE) - proof - - fix p1 p2 + { fix p1 p2 assume "p1 tagged_division_of (cbox a b) \ {x. x \ k \ c}" "d fine p1" note p1=tagged_division_ofD[OF this(1)] this assume "p2 tagged_division_of (cbox a b) \ {x. c \ x \ k}" "d fine p2" note p2=tagged_division_ofD[OF this(1)] this note tagged_division_union_interval[OF p1(7) p2(7)] note p12 = tagged_division_ofD[OF this] this - have "norm ((\(x, k)\p1. content k *\<^sub>R f x) + (\(x, k)\p2. content k *\<^sub>R f x) - i) = - norm ((\(x, k)\p1 \ p2. content k *\<^sub>R f x) - i)" - apply (subst setsum.union_inter_neutral) - apply (rule p1 p2)+ - apply rule - unfolding split_paired_all split_conv - proof - - fix a b + { fix a b assume ab: "(a, b) \ p1 \ p2" have "(a, b) \ p1" using ab by auto - from p1(4)[OF this] guess u v by (elim exE) note uv = this + with p1 obtain u v where uv: "b = cbox u v" by auto have "b \ {x. x\k = c}" using ab p1(3)[of a b] p2(3)[of a b] by fastforce moreover @@ -3447,17 +3378,19 @@ qed ultimately have "content b = 0" unfolding uv content_eq_0_interior - apply - - apply (drule interior_mono) - apply auto - done - then show "content b *\<^sub>R f a = 0" + using interior_mono by blast + then have "content b *\<^sub>R f a = 0" by auto - qed auto + } + then have "norm ((\(x, k)\p1. content k *\<^sub>R f x) + (\(x, k)\p2. content k *\<^sub>R f x) - i) = + norm ((\(x, k)\p1 \ p2. content k *\<^sub>R f x) - i)" + by (subst setsum.union_inter_neutral) (auto simp: p1 p2) also have "\ < e" by (rule k d(2) p12 fine_union p1 p2)+ - finally show "norm ((\(x, k)\p1. content k *\<^sub>R f x) + (\(x, k)\p2. content k *\<^sub>R f x) - i) < e" . - qed + finally have "norm ((\(x, k)\p1. content k *\<^sub>R f x) + (\(x, k)\p2. content k *\<^sub>R f x) - i) < e" . + } + then show ?thesis + by (auto intro: that[of d] d elim: ) qed lemma integrable_split[intro]: @@ -3483,46 +3416,32 @@ p2 tagged_division_of (cbox a b) \ A \ d fine p2 \ norm ((\(x, k)\p1. content k *\<^sub>R f x) - (\(x, k)\p2. content k *\<^sub>R f x)) < e)" show "?P {x. x \ k \ c}" - apply (rule_tac x=d in exI) - apply rule - apply (rule d) - apply rule - apply rule - apply rule - proof - + proof (rule_tac x=d in exI, clarsimp simp add: d) fix p1 p2 - assume as: "p1 tagged_division_of (cbox a b) \ {x. x \ k \ c} \ d fine p1 \ - p2 tagged_division_of (cbox a b) \ {x. x \ k \ c} \ d fine p2" + assume as: "p1 tagged_division_of (cbox a b) \ {x. x \ k \ c}" "d fine p1" + "p2 tagged_division_of (cbox a b) \ {x. x \ k \ c}" "d fine p2" show "norm ((\(x, k)\p1. content k *\<^sub>R f x) - (\(x, k)\p2. content k *\<^sub>R f x)) < e" - proof - - guess p using fine_division_exists[OF d(1), of a' b] . note p=this - show ?thesis - using norm_triangle_half_l[OF d(2)[of p1 p] d(2)[of p2 p]] - using as unfolding interval_split[OF k] b'_def[symmetric] a'_def[symmetric] - using p using assms + proof (rule fine_division_exists[OF d(1), of a' b] ) + fix p + assume "p tagged_division_of cbox a' b" "d fine p" + then show ?thesis + using as norm_triangle_half_l[OF d(2)[of p1 p] d(2)[of p2 p]] + unfolding interval_split[OF k] b'_def[symmetric] a'_def[symmetric] by (auto simp add: algebra_simps) qed qed show "?P {x. x \ k \ c}" - apply (rule_tac x=d in exI) - apply rule - apply (rule d) - apply rule - apply rule - apply rule - proof - + proof (rule_tac x=d in exI, clarsimp simp add: d) fix p1 p2 - assume as: "p1 tagged_division_of (cbox a b) \ {x. x \ k \ c} \ d fine p1 \ - p2 tagged_division_of (cbox a b) \ {x. x \ k \ c} \ d fine p2" + assume as: "p1 tagged_division_of (cbox a b) \ {x. x \ k \ c}" "d fine p1" + "p2 tagged_division_of (cbox a b) \ {x. x \ k \ c}" "d fine p2" show "norm ((\(x, k)\p1. content k *\<^sub>R f x) - (\(x, k)\p2. content k *\<^sub>R f x)) < e" - proof - - guess p using fine_division_exists[OF d(1), of a b'] . note p=this - show ?thesis - using norm_triangle_half_l[OF d(2)[of p p1] d(2)[of p p2]] - using as + proof (rule fine_division_exists[OF d(1), of a b'] ) + fix p + assume "p tagged_division_of cbox a b'" "d fine p" + then show ?thesis + using as norm_triangle_half_l[OF d(2)[of p p1] d(2)[of p p2]] unfolding interval_split[OF k] b'_def[symmetric] a'_def[symmetric] - using p - using assms by (auto simp add: algebra_simps) qed qed @@ -3547,9 +3466,6 @@ opp (f (cbox a b \ {x. x\k \ c})) (f (cbox a b \ {x. x\k \ c}))" using assms unfolding operative_def by auto -lemma operative_trivial: "operative opp f \ content (cbox a b) = 0 \ f (cbox a b) = neutral opp" - unfolding operative_def by auto - lemma property_empty_interval: "\a b. content (cbox a b) = 0 \ P (cbox a b) \ P {}" using content_empty unfolding empty_as_interval by auto @@ -3559,12 +3475,6 @@ subsection \Using additivity of lifted function to encode definedness.\ -lemma forall_option: "(\x. P x) \ P None \ (\x. P (Some x))" - by (metis option.nchotomy) - -lemma exists_option: "(\x. P x) \ P None \ (\x. P (Some x))" - by (metis option.nchotomy) - fun lifted where "lifted (opp :: 'a \ 'a \ 'b) (Some x) (Some y) = Some (opp x y)" | "lifted opp None _ = (None::'b option)" @@ -3587,19 +3497,13 @@ lemma monoidal_ac: assumes "monoidal opp" - shows "opp (neutral opp) a = a" - and "opp a (neutral opp) = a" + shows [simp]: "opp (neutral opp) a = a" + and [simp]: "opp a (neutral opp) = a" and "opp a b = opp b a" and "opp (opp a b) c = opp a (opp b c)" and "opp a (opp b c) = opp b (opp a c)" using assms unfolding monoidal_def by metis+ -lemma monoidal_simps[simp]: - assumes "monoidal opp" - shows "opp (neutral opp) a = a" - and "opp a (neutral opp) = a" - using monoidal_ac[OF assms] by auto - lemma neutral_lifted[cong]: assumes "monoidal opp" shows "neutral (lifted opp) = Some (neutral opp)" @@ -3630,7 +3534,7 @@ lemma monoidal_lifted[intro]: assumes "monoidal opp" shows "monoidal (lifted opp)" - unfolding monoidal_def forall_option neutral_lifted[OF assms] + unfolding monoidal_def split_option_all neutral_lifted[OF assms] using monoidal_ac[OF assms] by auto @@ -3687,7 +3591,8 @@ case True show ?thesis unfolding iterate_def if_not_P[OF x] support_clauses if_P[OF True] - unfolding True monoidal_simps[OF assms(1)] + unfolding True + using assms by auto next case False