(* Definition of sparse grids, hierarchical bases and the up-down algorithm. * *Basedon"updown_L2-Skalarprodukt.mws"fromDirkPflüger<pflueged@in.tum.de> * *Author:JohannesHölzl<hoelzl@in.tum.de>
*) theory Up_Down imports Up Down begin
lemma updown': "[ d ≤ dm; p ∈ sparsegrid dm lm ] ==> (updown' dm lm d α) p = (∑ p' ∈ lgrid (base {0 ..< d} p) {0 ..< d} lm. α p' * (∏ d' ∈ {0 ..< d}. l2_φ (p' ! d') (p ! d')))"
(is"[ _ ; _ ]==> _ = (∑ p' ∈ ?subgrid d p. α p' * ?prod d p' p)") proof (induct d arbitrary: α p) case0hence"?subgrid 0 p = {p}"using base_empty unfolding lgrid_def and sparsegrid_def sparsegrid'_defby auto thus ?caseunfolding updown'.simps by auto next case (Suc d) let"?leafs p" = "(lgrid p {d} lm) - {p}" let"?parents" = "parents d (base {d} p) p" let ?b = "base {0..<d} p" have"d < dm"using‹Suc d ≤ dm›by auto
have p_spg: "p ∈ grid (start dm) {0..<dm}"and p_spg': "p ∈ sparsegrid' dm"and"level p < lm"using‹p ∈ sparsegrid dm lm› unfolding sparsegrid_def and sparsegrid'_defand lgrid_def by auto have p'_in_spg: "!! p'. p' ∈ ?subgrid d p ==> p' ∈ sparsegrid dm lm" using base_grid[OF p_spg'] unfolding sparsegrid'_def sparsegrid_def lgrid_def by auto
from baseE[OF p_spg', where ds="{0..<d}"] have"?b ∈ grid (start dm) {d..<dm}"and p_bgrid: "p ∈ grid ?b {0..<d}"by auto hence"d < length ?b"using‹Suc d ≤ dm›by auto have"p ! d = ?b ! d"using base_out[OF _ _ p_spg'] ‹Suc d ≤ dm›by auto
have"length p = dm"using‹p ∈ sparsegrid dm lm›unfolding sparsegrid_def lgrid_def by auto hence"d < length p"using‹d < dm›by auto
have"updown' dm lm d (up dm lm d α) p = (∑ p' ∈ ?subgrid d p. (up dm lm d α) p' * (?prod d p' p))" using Suc by auto alsohave"… = (∑ p' ∈ ?subgrid d p. (∑ p'' ∈ ?leafs p'. α p'' * ?prod (Suc d) p'' p))" proof (intro sum.cong refl) fix p' assume"p' ∈ ?subgrid d p" hence"d < length p'"unfolding lgrid_def using base_length[OF p_spg'] ‹Suc d ≤ dm›by auto
have"up dm lm d α p' * ?prod d p' p = (∑ p'' ∈ ?leafs p'. α p'' * l2_φ (p'' ! d) (p' ! d)) * ?prod d p' p" using‹p' ∈ ?subgrid d p› up ‹Suc d ≤ dm› p'_in_spg by auto alsohave"… = (∑ p'' ∈ ?leafs p'. α p'' * l2_φ (p'' ! d) (p' ! d) * ?prod d p' p)" using sum_distrib_right by auto alsohave"… = (∑ p'' ∈ ?leafs p'. α p'' * ?prod (Suc d) p'' p)" proof (intro sum.cong refl) fix p'' assume"p'' ∈ ?leafs p'" have"?prod d p' p = ?prod d p'' p" proof (intro prod.cong refl) fix d' assume"d' ∈ {0..<d}" hence d_lt_p: "d' < length p'"and d'_not_d: "d' ∉ {d}"using‹d < length p'›by auto hence"p' ! d' = p'' ! d'"using‹p'' ∈ ?leafs p'› grid_invariant[OF d_lt_p d'_not_d] unfolding lgrid_def by auto thus"l2_φ (p'!d') (p!d') = l2_φ (p''!d') (p!d')"by auto qed moreoverhave"p' ! d = p ! d" using‹p' ∈ ?subgrid d p›and grid_invariant[OF ‹d < length ?b›, where p=p' and ds="{0..<d}"] unfolding lgrid_def ‹p ! d = ?b ! d›by auto ultimatelyhave"l2_φ (p'' ! d) (p' ! d) * ?prod d p' p = l2_φ (p'' ! d) (p ! d) * ?prod d p'' p"by auto alsohave"… = ?prod (Suc d) p'' p" proof - have"insert d {0..<d} = {0..<Suc d}"by auto moreoverfrom prod.insert have"prod (λ d'. l2_φ (p'' ! d') (p ! d')) (insert d {0..<d}) = (λ d'. l2_φ (p'' ! d') (p ! d')) d * prod (λ d'. l2_φ (p'' ! d') (p ! d')) {0..<d}" by auto ultimatelyshow ?thesis by auto qed finallyshow"α p'' * l2_φ (p'' ! d) (p' ! d) * ?prod d p' p = α p'' * ?prod (Suc d) p'' p"by auto qed finallyshow"(up dm lm d α) p' * (?prod d p' p) = (∑ p'' ∈ ?leafs p'. α p'' * ?prod (Suc d) p'' p)"by auto qed alsohave"… = (∑ (p', p'') ∈ Sigma (?subgrid d p) (λp'. (?leafs p')). (α p'') * (?prod (Suc d) p'' p))" by (rule sum.Sigma, auto simp add: lgrid_finite) alsohave"… = (∑ p''' ∈ (∪ p' ∈ ?subgrid d p. (∪ p'' ∈ ?leafs p'. { (p', p'') })). (((λ p''. α p'' * ?prod (Suc d) p'' p) o snd) p''') )"unfolding Sigma_def by (rule sum.cong[OF refl], auto) alsohave"… = (∑ p'' ∈ snd ` (∪ p' ∈ ?subgrid d p. (∪ p'' ∈ ?leafs p'. { (p', p'') })). α p'' * (?prod (Suc d) p'' p))"unfolding lgrid_def by (rule sum.reindex[symmetric],
rule inj_on_subset[OF grid_grid_inj_on[OF ivl_disj_int(15)[where l=0and m="d"and u="d"], where b="?b"]])
auto alsohave"… = (∑ p'' ∈ (∪ p' ∈ ?subgrid d p. (∪ p'' ∈ ?leafs p'. snd ` { (p', p'') })). α p'' * (?prod (Suc d) p'' p))"by (auto simp only: image_UN) alsohave"… = (∑ p'' ∈ (∪ p' ∈ ?subgrid d p. ?leafs p'). α p'' * (?prod (Suc d) p'' p))"by auto finallyhave up_part: "updown' dm lm d (up dm lm d α) p = (∑ p'' ∈ (∪ p' ∈ ?subgrid d p. ?leafs p'). α p'' * (?prod (Suc d) p'' p))" .
have"down dm lm d (updown' dm lm d α) p = (∑ p' ∈ ?parents. (updown' dm lm d α p') * l2_φ (p ! d) (p' ! d))" using‹Suc d ≤ dm›and down and‹p ∈ sparsegrid dm lm›by auto alsohave"… = (∑ p' ∈ ?parents. ∑ p'' ∈ ?subgrid d p'. α p'' * ?prod (Suc d) p'' p)" proof (rule sum.cong[OF refl]) fix p' let ?b' = "base {d} p" assume"p' ∈ ?parents" hence p_lgrid: "p' ∈ lgrid ?b' {d} (level p + 1)"using parents_subset_lgrid by auto hence"p' ∈ sparsegrid dm lm"and p'_spg': "p' ∈ sparsegrid' dm"using‹level p < lm› base_grid[OF p_spg'] unfolding sparsegrid_def lgrid_def sparsegrid'_defby auto hence"length p' = dm"unfolding sparsegrid_def lgrid_def by auto hence"d < length p'"using‹Suc d ≤ dm›by auto
from p_lgrid have p'_grid: "p' ∈ grid ?b' {d}"unfolding lgrid_def by auto
have"(updown' dm lm d α p') * l2_φ (p ! d) (p' ! d) = (∑ p'' ∈ ?subgrid d p'. α p'' * ?prod d p'' p') * l2_φ (p ! d) (p' ! d)" using‹p' ∈ sparsegrid dm lm› Suc by auto alsohave"… = (∑ p'' ∈ ?subgrid d p'. α p'' * ?prod d p'' p' * l2_φ (p ! d) (p' ! d))" using sum_distrib_right by auto alsohave"… = (∑ p'' ∈ ?subgrid d p'. α p'' * ?prod (Suc d) p'' p)" proof (rule sum.cong[OF refl]) fix p'' assume"p'' ∈ ?subgrid d p'"
have"?prod d p'' p' = ?prod d p'' p" proof (rule prod.cong, rule refl) fix d' assume"d' ∈ {0..<d}" hence"d' < dm"and"d' ∉ {d}"using‹Suc d ≤ dm›by auto from grid_base_out[OF this p_spg' p'_grid] show"l2_φ (p''!d') (p'!d') = l2_φ (p''!d') (p!d')"by auto qed moreover have"l2_φ (p ! d) (p' ! d) = l2_φ (p'' ! d) (p ! d)" proof - have"d < dm"and"d ∉ {0..<d}"using‹Suc d ≤ dm› base_length p'_spg' by auto from grid_base_out[OF this p'_spg'] ‹p'' ∈ ?subgrid d p'›[unfolded lgrid_def] show ?thesis using l2_commutative by auto qed moreoverhave"?prod d p'' p * l2_φ (p'' ! d) (p ! d) = ?prod (Suc d) p'' p" proof - have"insert d {0..<d} = {0..<Suc d}"by auto moreoverfrom prod.insert have"(λ d'. l2_φ (p'' ! d') (p ! d')) d * prod (λ d'. l2_φ (p'' ! d') (p ! d')) {0..<d} = prod (λ d'. l2_φ (p'' ! d') (p ! d')) (insert d {0..<d})" by auto hence"(prod (λ d'. l2_φ (p'' ! d') (p ! d')) {0..<d}) * (λ d'. l2_φ (p'' ! d') (p ! d')) d = prod (λ d'. l2_φ (p'' ! d') (p ! d')) (insert d {0..<d})" by auto ultimatelyshow ?thesis by auto qed ultimatelyshow"α p'' * ?prod d p'' p' * l2_φ (p ! d) (p' ! d) = α p'' * ?prod (Suc d) p'' p"by auto qed finallyshow"(updown' dm lm d α p') * l2_φ (p ! d) (p' ! d) = (∑ p'' ∈ ?subgrid d p'. α p'' * ?prod (Suc d) p'' p)"by auto qed alsohave"… = (∑ (p', p'') ∈ (Sigma ?parents (?subgrid d)). α p'' * ?prod (Suc d) p'' p)" by (rule sum.Sigma, auto simp add: parents_finite lgrid_finite) alsohave"… = (∑ p''' ∈ (∪ p' ∈ ?parents. (∪ p'' ∈ ?subgrid d p'. { (p', p'') })). ( ((λ p''. α p'' * ?prod (Suc d) p'' p) o snd) p''') )"unfolding Sigma_def by (rule sum.cong[OF refl], auto) alsohave"… = (∑ p'' ∈ snd ` (∪ p' ∈ ?parents. (∪ p'' ∈ ?subgrid d p'. { (p', p'') })). α p'' * (?prod (Suc d) p'' p))" proof (rule sum.reindex[symmetric], rule inj_onI) fix x y assume"x ∈ (∪p'∈parents d (base {d} p) p. ∪p''∈lgrid (base {0..<d} p') {0..<d} lm. {(p', p'')})" hence x_snd: "snd x ∈ grid (base {0..<d} (fst x)) {0..<d}"and"fst x ∈ grid (base {d} p) {d}"and"p ∈ grid (fst x) {d}" unfolding parents_def lgrid_def by auto hence x_spg: "fst x ∈ sparsegrid' dm"using base_grid[OF p_spg'] by auto
assume"y ∈ (∪p'∈parents d (base {d} p) p. ∪p''∈lgrid (base {0..<d} p') {0..<d} lm. {(p', p'')})" hence y_snd: "snd y ∈ grid (base {0..<d} (fst y)) {0..<d}"and"fst y ∈ grid (base {d} p) {d}"and"p ∈ grid (fst y) {d}" unfolding parents_def lgrid_def by auto hence y_spg: "fst y ∈ sparsegrid' dm"using base_grid[OF p_spg'] by auto hence"length (fst y) = dm"unfolding sparsegrid'_defby auto
assume"snd x = snd y" have"fst x = fst y" proof (rule nth_equalityI) show l_eq: "length (fst x) = length (fst y)"using grid_length[OF ‹p ∈ grid (fst y) {d}›] grid_length[OF ‹p ∈ grid (fst x) {d}›] by auto show"fst x ! i = fst y ! i"if"i < length (fst x)"for i proof - have"i < length (fst y)"and"i < dm"using that l_eq and‹length (fst y) = dm›by auto show"fst x ! i = fst y ! i" proof (cases "i = d") case False hence"i ∉ {d}"by auto with grid_invariant[OF ‹i < length (fst x)› this ‹p ∈ grid (fst x) {d}›]
grid_invariant[OF ‹i < length (fst y)› this ‹p ∈ grid (fst y) {d}›] show ?thesis by auto next case True with grid_base_out[OF ‹i < dm› _ y_spg y_snd] grid_base_out[OF ‹i < dm› _ x_spg x_snd] show ?thesis using‹snd x = snd y›by auto qed qed qed show"x = y"using prod_eqI[OF ‹fst x = fst y›‹snd x = snd y›] . qed alsohave"… = (∑ p'' ∈ (∪ p' ∈ ?parents. (∪ p'' ∈ ?subgrid d p'. snd ` { (p', p'') })). α p'' * (?prod (Suc d) p'' p))"by (auto simp only: image_UN) alsohave"… = (∑ p'' ∈ (∪ p' ∈ ?parents. ?subgrid d p'). α p'' * ?prod (Suc d) p'' p)"by auto finallyhave down_part: "down dm lm d (updown' dm lm d α) p = (∑ p'' ∈ (∪ p' ∈ ?parents. ?subgrid d p'). α p'' * ?prod (Suc d) p'' p)" .
have"updown' dm lm (Suc d) α p = (∑ p'' ∈ (∪ p' ∈ ?subgrid d p. ?leafs p'). α p'' * ?prod (Suc d) p'' p) + (∑ p'' ∈ (∪ p' ∈ ?parents. ?subgrid d p'). α p'' * ?prod (Suc d) p'' p)" unfolding sum_vector_def updown'.simps down_part and up_part .. alsohave"… = (∑ p'' ∈ (∪ p' ∈ ?subgrid d p. ?leafs p') ∪ (∪ p' ∈ ?parents. ?subgrid d p'). α p'' * ?prod (Suc d) p'' p)" proof (rule sum.union_disjoint[symmetric], simp add: lgrid_finite, simp add: lgrid_finite parents_finite,
rule iffD2[OF disjoint_iff_not_equal], rule ballI, rule ballI) fix x y assume"x ∈ (∪ p' ∈ ?subgrid d p. ?leafs p')" thenobtain px where"px ∈ grid (base {0..<d} p) {0..<d}"and"x ∈ grid px {d}"and"x ≠ px"unfolding lgrid_def by auto with grid_base_out[OF _ _ p_spg' this(1)] ‹Suc d ≤ dm› base_length[OF p_spg'] grid_level_d have"lv px d < lv x d"and"px ! d = p ! d"by auto hence"lv p d < lv x d"unfolding lv_def by auto moreover assume"y ∈ (∪ p' ∈ ?parents. ?subgrid d p')" thenobtain py where y_grid: "y ∈ grid (base {0..<d} py) {0..<d}"and"py ∈ ?parents"unfolding lgrid_def by auto hence"py ∈ grid (base {d} p) {d}"and"p ∈ grid py {d}"unfolding parents_def by auto hence py_spg: "py ∈ sparsegrid' dm"using base_grid[OF p_spg'] by auto have"y ! d = py ! d"using grid_base_out[OF _ _ py_spg y_grid] ‹Suc d ≤ dm›by auto hence"lv y d ≤ lv p d"using grid_single_level[OF ‹p ∈ grid py {d}›] ‹Suc d ≤ dm›and sparsegrid'_length[OF py_spg] unfolding lv_def by auto ultimately show"x ≠ y"by auto qed alsohave"… = (∑ p' ∈ ?subgrid (Suc d) p. α p' * ?prod (Suc d) p' p)" (is"(∑ x ∈ ?in. ?F x) = (∑ x ∈ ?out. ?F x)") proof (rule sum.mono_neutral_left, simp add: lgrid_finite) show"?in ⊆ ?out" (is"?children ∪ ?siblings ⊆ _") proof (rule subsetI) fix x assume"x ∈ ?in" show"x ∈ ?out" proof (cases "x ∈ ?children") case False hence"x ∈ ?siblings"using‹x ∈ ?in›by auto thenobtain px where"px ∈ parents d (base {d} p) p"and"x ∈ lgrid (base {0..<d} px) {0..<d} lm"by auto hence"level x < lm"and"px ∈ grid (base {d} p) {d}"and"x ∈ grid (base {0..<d} px) {0..<d}"and"{d} ∪ {0..<d} = {0..<Suc d}"unfolding lgrid_def parents_def by auto with grid_base_union[OF p_spg' this(2) this(3)] show ?thesis unfolding lgrid_def by auto next have d_eq: "{0..<Suc d} ∪ {d} = {0..<Suc d}"by auto case True thenobtain px where"px ∈ ?subgrid d p"and"x ∈ lgrid px {d} lm"and"x ≠ px"by auto hence"px ∈ grid (base {0..<d} p) {0..<d}"and"x ∈ grid px {d}"and"level x < lm"and"{d} ∪ {0..<d} = {0..<Suc d}"unfolding lgrid_def by auto from grid_base_dim_add[OF _ p_spg' this(1)] have"px ∈ grid (base {0..<Suc d} p) {0..<Suc d}"by auto from grid_transitive[OF ‹x ∈ grid px {d}› this] show ?thesis unfolding lgrid_def using‹level x < lm› d_eq by auto qed qed
show"∀ x ∈ ?out - ?in. ?F x = 0" proof fix x assume"x ∈ ?out - ?in"
hence"x ∈ ?out"and up_ps': "!! p'. p' ∈ ?subgrid d p ==> x ∉ lgrid p' {d} lm - {p'}" and down_ps': "!! p'. p' ∈ ?parents ==> x ∉ ?subgrid d p'"by auto hence x_eq: "x ∈ grid (base {0..<Suc d} p) {0..<Suc d}"and"level x < lm"unfolding lgrid_def by auto hence up_ps: "!! p'. p' ∈ ?subgrid d p ==> x ∉ grid p' {d} - {p'}"and
down_ps: "!! p'. p' ∈ ?parents ==> x ∉ grid (base {0..<d} p') {0..<d}" using up_ps' down_ps' unfolding lgrid_def by auto
have ds_eq: "{0..<Suc d} = {0..<d} ∪ {d}"by auto have"x ∉ grid (base {0..<d} p) {0..<Suc d} - grid (base {0..<d} p) {0..<d}" proof assume"x ∈ grid (base {0..<d} p) {0..<Suc d} - grid (base {0..<d} p) {0..<d}" hence"x ∈ grid (base {0..<d} p) ({d} ∪ {0..<d})"and x_ngrid: "x ∉ grid (base {0..<d} p) {0..<d}"using ds_eq by auto from grid_split[OF this(1)] obtain px where px_grid: "px ∈ grid (base {0..<d} p) {0..<d}"and"x ∈ grid px {d}"by auto from grid_level[OF this(2)] ‹level x < lm›have"level px < lm"by auto hence"px ∈ ?subgrid d p"using px_grid unfolding lgrid_def by auto hence"x ∉ grid px {d} - {px}"using up_ps by auto moreoverhave"x ≠ px"proof (rule ccontr) assume"¬ x ≠ px"with px_grid and x_ngrid show False by auto qed ultimatelyshow False using‹x ∈ grid px {d}›by auto qed moreoverhave"p ∈ ?parents"unfolding parents_def using baseE(2)[OF p_spg'] by auto hence"x ∉ grid (base {0..<d} p) {0..<d}"by (rule down_ps) ultimatelyhave x_ngrid: "x ∉ grid (base {0..<d} p) {0..<Suc d}"by auto
have x_spg: "x ∈ sparsegrid' dm"using base_grid[OF p_spg'] x_eq by auto hence"length x = dm"using grid_length by auto
have x_nochild_p: "?bx ∉ grid ?bp {d}" proof (rule ccontr) assume"¬ base {0..<d} x ∉ grid (base {0..<d} p) {d}" hence"base {0..<d} x ∈ grid (base {0..<d} p) {d}"by auto from grid_transitive[OF baseE(2)[OF x_spg] this] have"x ∈ grid (base {0..<d} p) {0..<Suc d}"using ds_eq by auto thus False using x_ngrid by auto qed
have"d < length ?bx"and"d < length ?bp"and"d < length ?bx1"and"d < length ?bp1"usingbase_length[OF x_spg] base_length[OF p_spg'] and‹d < dm›by auto have p_nochild_x: "?bp ∉ grid ?bx {d}" (is"?assm") proof (rule ccontr) have ds: "{0..<d} ∪ {0..<Suc d} = {d} ∪ {0..<d}"by auto have d_sub: "{d} ⊆ {0..<Suc d}"by auto assume"¬ ?assm"hence b_in_bx: "base {0..<d} p ∈ grid ?bx {d}"by auto
have"d ∉ {0..<d}"and"d ∈ {d}"by auto from grid_replace_dim[OF ‹d < length ?bx›‹d < length p› grid.Start[where b=p and ds="{d}"] b_in_bx] have"p ∈ grid ?px {d}"unfolding base_out[OF ‹d < dm›‹d ∉ {0..<d}› x_spg] base_out[OF ‹d < dm›‹d ∉ {0..<d}› p_spg'] list_update_id . moreover from grid_replace_dim[OF ‹d < length ?bx1›‹d < length ?bp1› baseE(2)[OF p_spg', where ds="{d}"] baseE(2)[OF x_spg, where ds="{d}"]] have"?px ∈ grid ?bp1 {d}"unfolding base_in[OF ‹d < dm›‹d ∈ {d}› x_spg] unfolding base_in[OF ‹d < dm›‹d ∈ {d}› p_spg', symmetric] list_update_id . ultimately have"x ∉ grid (base {0..<d} ?px) {0..<d}"using down_ps[unfolded parents_def, where p'="?px"] by (auto simp only:) moreover have"base {0..<d} ?px = ?bx" proof (rule nth_equalityI) from‹?px ∈ grid ?bp1 {d}›have px_spg: "?px ∈ sparsegrid' dm"using base_grid[OF p_spg'] by auto from base_length[OF this] base_length[OF x_spg] show l_eq: "length (base {0..<d} ?px) = length ?bx"by auto show"base {0..<d} ?px ! i = ?bx ! i"if"i < length (base {0..<d} ?px)"for i proof - have"i < length ?bx"and"i < dm"using that l_eq and base_length[OF px_spg] by auto show"base {0..<d} ?px ! i = ?bx ! i" proof (cases "i < d") case True hence"i ∈ {0..<d}"by auto from base_in[OF ‹i < dm› this] show ?thesis using px_spg x_spg by auto next case False hence"i ∉ {0..<d}"by auto have"?px ! i = x ! i" proof (cases "i > d") have i_le: "i < length (base {0..<Suc d} p)"using base_length[OF p_spg'] and‹i < dm›by auto case True hence"i ∉ {0..<Suc d}"by auto from grid_invariant[OF i_le this x_eq] base_out[OF ‹i < dm› this p_spg'] show ?thesis using list_update_id and True by auto next case False hence"d = i"using‹¬ i < d›by auto thus ?thesis unfolding‹d = i›using‹i < dm›‹length p = dm› nth_list_update_eq by auto qed thus ?thesis using base_out[OF ‹i < dm›‹i ∉ {0..<d}› px_spg] base_out[OF ‹i < dm›‹i ∉ {0..<d}› x_spg] by auto qed qed qed ultimatelyhave"x ∉ grid ?bx {0..<d}"by auto thus False using baseE(2)[OF x_spg] by auto qed
have x_grid: "?bx ∈ grid (base {0..<Suc d} p) {d}"using grid_shift_base[OF _ p_spg' x_eq[unfolded ds_eq]] unfolding ds_eq by auto
have p_grid: "?bp ∈ grid (base {0..<Suc d} p) {d}"using grid_shift_base[OF _ p_spg' baseE(2)[OF p_spg', where ds="{0..<d} ∪ {d}"]] unfolding ds_eq by auto
have"l2_φ (?bp ! d) (?bx ! d) = 0" proof (cases "lv ?bx d ≤ lv ?bp d") case True from l2_disjoint[OF _ x_grid p_grid p_nochild_x this] ‹d < dm›and base_length[OF p_spg'] show ?thesis by auto next case False hence"lv ?bx d ≥ lv ?bp d"by auto from l2_disjoint[OF _ p_grid x_grid x_nochild_p this] ‹d < dm›and base_length[OF p_spg'] show ?thesis by (auto simp: l2_commutative) qed hence"l2_φ (p ! d) (x ! d) = 0"using base_out[OF ‹d < dm›] p_spg' x_spg by auto hence"∃ d ∈ {0..<Suc d}. l2_φ (p ! d) (x ! d) = 0"by auto from prod_zero[OF _ this] show"?F x = 0"by (auto simp: l2_commutative) qed qed finallyshow ?case . qed
theorem updown: assumes p_spg: "p ∈ sparsegrid dm lm" shows"updown dm lm α p = (∑ p' ∈ sparsegrid dm lm. α p' * l2 p' p)" proof - have"p ∈ sparsegrid' dm"using p_spg unfolding sparsegrid_def sparsegrid'_def lgrid_def by auto have"!!p'. p' ∈ lgrid (base {0..<dm} p) {0..<dm} lm ==> length p' = dm" proof - fix p' assume"p' ∈ lgrid (base {0..<dm} p) {0..<dm} lm" with base_grid[OF ‹p ∈ sparsegrid' dm›] have"p' ∈ sparsegrid' dm"unfolding lgrid_def by auto thus"length p' = dm"by auto qed thus ?thesis unfolding updown_def sparsegrid_def base_start_eq[OF p_spg] using updown'[OF _ p_spg, where d=dm] p_spg[unfolded sparsegrid_def lgrid_def] by (auto simp: atLeast0LessThan p_spg[THEN sparsegrid_length] l2_eq) qed
corollary fixes α assumes p: "p ∈ sparsegrid dm lm" defines"f\<alpha> ≡ λx. (∑p∈sparsegrid dm lm. α p * Φ p x)" shows"updown dm lm α p = (∫x. f\<alpha> x * Φ p x ∂(ΠM d∈{..<dm}. lborel))" unfolding updown[OF p] l2_def f\<alpha>_def sum_distrib_right apply (intro has_bochner_integral_integral_eq[symmetric] has_bochner_integral_sum) apply (subst mult.assoc) apply (intro has_bochner_integral_mult_right) apply (simp add: sparsegrid_length) apply (rule has_bochner_integral_integrable) using p apply (simp add: sparsegrid_length Φ_def prod.distrib[symmetric]) proof (rule product_sigma_finite.product_integrable_prod) show"product_sigma_finite (λd. lborel)" .. qed (auto intro: integrable_φ2)
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.2 Sekunden
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.