Documentation

HexPermGroup.Word.Build

theorem Hex.PermGroup.Program.evalNodes_append {n : Nat} (S : Array (Perm n)) (xs ys : List Node) (values : Array { p : Perm n // Generated S p }) :
evalNodes S (xs ++ ys) values = (evalNodes S xs values).bind (evalNodes S ys)

Evaluation of a concatenated program continues from the first prefix's values.

theorem Hex.PermGroup.Program.evalNodes_size {n : Nat} {S : Array (Perm n)} {nodes : List Node} {values result : Array { p : Perm n // Generated S p }} (h : evalNodes S nodes values = some result) :
result.size = values.size + nodes.length

Every accepted node contributes exactly one value.

structure Hex.PermGroup.Program.Builder {n : Nat} (S : Array (Perm n)) :

An append-only program under construction, with cached values and checked provenance. References share earlier nodes instead of expanding earlier words. The invariant proof is erased during compilation.

Instances For

    The empty program, before a root is chosen.

    Equations
    Instances For
      def Hex.PermGroup.Program.Builder.push {n : Nat} {S : Array (Perm n)} (b : Builder S) (node : Node) (p : { p : Perm n // Generated S p }) (h : evalNode S b.values node = some p) :

      Append one node and its known value. The proof only relates this node to cached earlier values; it never re-evaluates the preceding program at runtime.

      Equations
      Instances For
        def Hex.PermGroup.Program.Builder.root {n : Nat} {S : Array (Perm n)} (b : Builder S) (node : Node) (p : { p : Perm n // Generated S p }) (h : evalNode S b.values node = some p) :
        Fin (b.push node p h).values.size

        The root added by a push; earlier roots remain valid after the append.

        Equations
        Instances For
          Equations
          Instances For
            Equations
            Instances For
              Equations
              Instances For
                def Hex.PermGroup.Program.Builder.comp {n : Nat} {S : Array (Perm n)} (b : Builder S) (i j : Fin b.values.size) :
                Equations
                Instances For
                  @[simp]
                  @[simp]
                  theorem Hex.PermGroup.Program.Builder.size_comp {n : Nat} {S : Array (Perm n)} (b : Builder S) (i j : Fin b.values.size) :
                  (b.comp i j).values.size = b.values.size + 1
                  def Hex.PermGroup.Program.Builder.act {n : Nat} {S : Array (Perm n)} (b : Builder S) (i : Fin S.size) (j : Fin b.values.size) :

                  Append a generator and its left product with an existing value. This is the parent-edge operation used when compiling orbit discovery trees.

                  Equations
                  Instances For
                    @[simp]
                    @[simp]
                    theorem Hex.PermGroup.Program.Builder.size_act {n : Nat} {S : Array (Perm n)} (b : Builder S) (i : Fin S.size) (j : Fin b.values.size) :
                    (b.act i j).values.size = b.values.size + 2
                    theorem Hex.PermGroup.Program.Builder.get_id {n : Nat} {S : Array (Perm n)} (b : Builder S) (j : Fin b.values.size) :
                    b.id.values[↑j] = b.values[↑j]
                    theorem Hex.PermGroup.Program.Builder.get_act {n : Nat} {S : Array (Perm n)} (b : Builder S) (i : Fin S.size) (j k : Fin b.values.size) :
                    (b.act i j).values[↑k] = b.values[↑k]
                    theorem Hex.PermGroup.Program.Builder.last_act {n : Nat} {S : Array (Perm n)} (b : Builder S) (i : Fin S.size) (j : Fin b.values.size) :
                    (b.act i j).values[b.values.size + 1].val = S[↑i].comp b.values[↑j].val

                    Select any already evaluated node as the root. The resulting raw certificate shares the builder's node array; cached values and proof fields are not serialized.

                    Equations
                    Instances For