Documentation

LeanPool.IsoGraph.Canon.Paths

Where the search records its leaves #

Two bookkeeping facts that the optimality argument needs, neither of which says anything about which leaf is best.

The children of a node are distinct #

theorem IsoGraph.Canon.lab_nodup {n : } {p : Part} (hp : Part.WF n p) :
theorem IsoGraph.Canon.extract_nodup {n : } {p : Part} (hp : Part.WF n p) (a b : ) :

Prefixes of paths #

a is an initial segment of b.

Equations
Instances For
    theorem IsoGraph.Canon.PathPre.trans {a b c : Array } (h1 : PathPre a b) (h2 : PathPre b c) :
    theorem IsoGraph.Canon.PathPre.of_push {a b : Array } {v : } (h : PathPre (a.push v) b) :

    The search only records leaves of the subtree it is in #

    def IsoGraph.Canon.StQ (P : Array Prop) (st : St) :

    Every leaf a state remembers — incumbent or first — has a path satisfying P.

    Equations
    Instances For
      theorem IsoGraph.Canon.StQ.mono {P P' : Array Prop} {st : St} (h : StQ P st) (hPP : ∀ (Q : Array ), P QP' Q) :
      StQ P' st
      theorem IsoGraph.Canon.StQ.addAuto {P : Array Prop} {st : St} (h : StQ P st) (g : Array ) :
      StQ P (st.addAuto g)
      theorem IsoGraph.Canon.StQ.unwind {P : Array Prop} {st : St} (h : StQ P st) (path : Array ) :
      StQ P (Canon.unwind path st)
      theorem IsoGraph.Canon.pruneNode_Q {P : Array Prop} {invPath : Array UInt64} {st st' : St} (h : pruneNode invPath st = some st') (hst : StQ P st) :
      StQ P st'
      theorem IsoGraph.Canon.leafUpdate_Q {P : Array Prop} {G : Graph} {path : Array } {invPath : Array UInt64} {lab : Array } {st : St} (hp : P path) (hst : StQ P st) :
      StQ P (leafUpdate G path invPath lab st)
      theorem IsoGraph.Canon.dfsNode_paths (n : ) (f : Bool) (P : Array Prop) (fuel : ) (path : Array ) (invPath : Array UInt64) (p : Part) (st : St) :
      (∀ (Q : Array ), PathPre path QP Q)StQ P stStQ P (dfsNode (Graph.ofOracle n f) fuel path invPath p st)

      The leaves a node records lie below it. Anything the state already held keeps whatever property it had; anything added while the node runs has a path extending the node's.