Window data supply a common dyadic grid for the local test below a child edge
ProvedOAI.Problem310.WindowLocalFactor.window_local_predicate_factorsWindow data. Let . Words over the alphabet are the vertices of the complete -ary tree; is the length of a word , is followed by the letter , and means that is a prefix of . A word is a valid edge if and (it names the edge entering the vertex ). A window datum with parameters consists of a function and maps from words to such that, writing and letting range over valid edges:
- , and ;
- , so the edge carries the window of dyadic scales ;
- (prefix gap) if and , then ;
- (sibling gap) for every word , letters and word such that and are valid edges, ;
- (descendant bounds) if , then ;
- (padding) .
Finite table model. Take , so that the letter is the default child and are the nondefault children; a node is a word of length and a leaf is a word of length . Use the window endpoints as resolutions: for nodes and , and for leaves . With , where , a selector table has bits for , a terminal table has bits for , and the selector bit of at is if , and otherwise. Let for arbitrary rules , and let be the word obtained from by successive steps of appending the chosen child .
Theorem. Let be a window datum with parameters , let be tables as above, let be a node, , and with . Put and let , a leaf. If satisfy , then
So the local test "the selector of the edge succeeds and the terminal bit at the leaf reached below it is " is constant on the cells of the periodic dyadic grid of mesh , for every choice of the tables. The window datum thus identifies as the resolution at which scale representatives for this test can be chosen, with no further hypotheses on the resolutions.
Formalization Note The window datum is W : WindowData (M + 1) d g r₀, with fields r, a, b, bstar and axioms length_pos, length_threshold, start_three, endpoint, gap_prefix, gap_sibling, descendant_bounds, padding as listed above. In the Lean statement the resolutions bS, bT are arbitrary functions tied to by the hypotheses hbS, hbT; the choice map is choose, linked to rule by hchoose; the letter enters words as i.castSucc; the depth is the variable r; and is FiniteLocalPredicate.localLeaf choose r (U.val ++ [i.castSucc]) hdepth y.
import Mathlib import Definitions.Def_DyadicAvoidance import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_PeriodicBasic import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_GridSeparation import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_FiniteTableModel import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_OrderedRouting import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_RoutingPath import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_CenterRouteExposure import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_ExceptionalCenters import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_CenterFailureBound import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_FirstDefault import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_ConcreteLabelMeasures import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_CenterFirstDefault import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_RandomSetDensity import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_RoutedSetDensity import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_RoutedExposure import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_FirstDefaultSelection import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_FiniteLocalPredicate import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_WindowData import Definitions.Def_OAI_MeasureTheory_DyadicAvoidance_WindowTableModel open OAI OAI.Problem310 universe u_Ω open RoutingPath GridSeparation
theorem OAI.Problem310.WindowLocalFactor.window_local_predicate_factors {M d g r₀ : ℕ}
(W : WindowData (M + 1) d g r₀)
(bS : FiniteTableModel.Node M d → Fin M → ℕ)
(bT : FiniteTableModel.Leaf M d → ℕ)
(hbS : ∀ Q j, bS Q j = W.b (Q.val ++ [j.castSucc]))
(hbT : ∀ L, bT L = W.b L.val)
(ωS : FiniteTableModel.SelectorTable bS) (ωT : FiniteTableModel.TerminalTable bT)
(choose : List (FiniteTableModel.Child M) → ℝ → FiniteTableModel.Child M)
(rule : List (FiniteTableModel.Child M) → (Fin M → Bool) → FiniteTableModel.Child M)
(hchoose : ∀ Q x, choose Q x = rule Q (fun j => FiniteTableModel.selectorValue bS ωS Q j x))
(U : FiniteTableModel.Node M d) (i : Fin M) (r : ℕ)
(hdepth : (U.val ++ [i.castSucc]).length + r = d)
{x y : ℝ}
(hxy : ⌊(2 : ℝ) ^ (W.bstar (U.val ++ [i.castSucc]) + 2) * Int.fract x⌋ =
⌊(2 : ℝ) ^ (W.bstar (U.val ++ [i.castSucc]) + 2) * Int.fract y⌋) :
(ωS (FiniteTableModel.selectorAddress bS U i x) &&
ωT (FiniteTableModel.terminalAddress bT
(FiniteLocalPredicate.localLeaf choose r (U.val ++ [i.castSucc]) hdepth x) x)) =
(ωS (FiniteTableModel.selectorAddress bS U i y) &&
ωT (FiniteTableModel.terminalAddress bT
(FiniteLocalPredicate.localLeaf choose r (U.val ++ [i.castSucc]) hdepth y) y)) := by sorry