Documentation

HexPermGroup.Orbit.Tree

structure Hex.PermGroup.Orbit.Tree {n : Nat} (S : Array (Perm n)) (a : Fin n) :

A discovery tree. Parent edges refer to earlier entries and retain the generator's input index. Lookup entries use natural numbers during construction, so appending a point does not traverse the lookup vector to cast indices.

Instances For
    def Hex.PermGroup.Orbit.Tree.root {n : Nat} (S : Array (Perm n)) (a : Fin n) :
    Tree S a

    Start the queue with its root.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      theorem Hex.PermGroup.Orbit.Tree.missing {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (x : Fin n) :
      theorem Hex.PermGroup.Orbit.Tree.size_le {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) :
      theorem Hex.PermGroup.Orbit.Tree.size_pos {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) :
      theorem Hex.PermGroup.Orbit.Tree.point_zero {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) :
      t.points[0] = a
      theorem Hex.PermGroup.Orbit.Tree.base_parent {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (j : Fin t.points.size) (hj : t.points[↑j] = a) :
      theorem Hex.PermGroup.Orbit.Tree.reachable {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (j : Fin t.points.size) :
      ∃ (p : Perm n), Generated S p ∧ p.get a = t.points[↑j]

      Following parent edges gives a generated transporter, independently of any program encoding used to export the discovery tree.

      def Hex.PermGroup.Orbit.Tree.push {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (j : Fin t.points.size) (i : Fin S.size) (hnew : ¬S[↑i].get t.points[↑j] ∈ t.points) :
      Tree S a

      Append a previously unseen neighbor and its parent edge.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        structure Hex.PermGroup.Orbit.Tree.Extends {n : Nat} {S : Array (Perm n)} {a : Fin n} (t u : Tree S a) :

        Extension preserves queue indices as well as membership.

        Instances For
          theorem Hex.PermGroup.Orbit.Tree.Extends.refl {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) :
          theorem Hex.PermGroup.Orbit.Tree.Extends.trans {n : Nat} {S : Array (Perm n)} {a : Fin n} {t u v : Tree S a} (htu : t.Extends u) (huv : u.Extends v) :
          theorem Hex.PermGroup.Orbit.Tree.Extends.mem {n : Nat} {S : Array (Perm n)} {a : Fin n} {t u : Tree S a} (h : t.Extends u) {x : Fin n} (hx : x ∈ t.points) :
          theorem Hex.PermGroup.Orbit.Tree.push_extends {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (j : Fin t.points.size) (i : Fin S.size) (hnew : ¬S[↑i].get t.points[↑j] ∈ t.points) :
          t.Extends (t.push j i hnew)
          def Hex.PermGroup.Orbit.Tree.visit {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (j : Fin t.points.size) (i : Fin S.size) :
          Tree S a

          Inspect one directed edge, appending its target only on first discovery.

          Equations
          Instances For
            theorem Hex.PermGroup.Orbit.Tree.visit_extends {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (j : Fin t.points.size) (i : Fin S.size) :
            t.Extends (t.visit j i)
            theorem Hex.PermGroup.Orbit.Tree.visit_mem {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (j : Fin t.points.size) (i : Fin S.size) :
            S[↑i].get t.points[↑j] ∈ (t.visit j i).points
            def Hex.PermGroup.Orbit.Tree.scan {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (j : Fin t.points.size) (gs : List (Fin S.size)) :
            Tree S a

            Inspect the generators in their supplied order. Recursive calls carry the same parent index through the growing queue.

            Equations
            Instances For
              theorem Hex.PermGroup.Orbit.Tree.scan_extends {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (j : Fin t.points.size) (gs : List (Fin S.size)) :
              t.Extends (t.scan j gs)
              theorem Hex.PermGroup.Orbit.Tree.scan_mem {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (j : Fin t.points.size) (gs : List (Fin S.size)) (i : Fin S.size) (hi : i ∈ gs) :
              S[↑i].get t.points[↑j] ∈ (t.scan j gs).points
              def Hex.PermGroup.Orbit.Tree.Processed {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (cursor : Nat) :

              The first cursor queue entries have had all their edges inspected.

              Equations
              Instances For
                theorem Hex.PermGroup.Orbit.Tree.scan_processed {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (cursor : Nat) (hc : cursor < t.points.size) (hp : t.Processed cursor) :
                (t.scan ⟨cursor, hc⟩ (List.finRange S.size)).Processed (cursor + 1)
                @[irreducible]
                def Hex.PermGroup.Orbit.Tree.finish {n : Nat} {S : Array (Perm n)} {a : Fin n} (t : Tree S a) (cursor : Nat) (hp : t.Processed cursor) :

                Process each discovered point exactly once. Termination uses the degree, with the duplicate-free queue proving that no more than n points are visited.

                Equations
                Instances For
                  def Hex.PermGroup.Orbit.breadthFirst {n : Nat} (S : Array (Perm n)) (a : Fin n) :

                  Deterministic breadth-first discovery with constant-time point lookup and parent edges. Every generator edge from the returned point set stays in it.

                  Equations
                  Instances For