Documentation

HexPermGroup.Search.Transporter

structure Hex.PermGroup.Search.Transporter {n : Nat} (H : Group n) (target : Perm n) (points : List (Fin n)) :

A simultaneous point transporter and the full stabilizer of all points already assigned. The extending permutations form its represented coset.

Instances For
    theorem Hex.PermGroup.Search.Transporter.contains_iff {n : Nat} {H : Group n} {target : Perm n} {points : List (Fin n)} (t : Transporter H target points) (q : Perm n) :
    Generated t.group.generators (t.rep.val.inv.comp q) ↔ Generated H.generators q ∧ ∀ (x : Fin n), x ∈ points → q.get x = target.get x

    The maintained coset contains exactly the permutations extending the assigned images, including all simultaneous constraints.

    def Hex.PermGroup.Search.Transporter.empty {n : Nat} (H : Group n) (target : Perm n) :
    Transporter H target []
    Equations
    Instances For
      def Hex.PermGroup.Search.Transporter.extend {n : Nat} {H : Group n} {target : Perm n} {points : List (Fin n)} (t : Transporter H target points) (x : Fin n) (k : Element t.group) (hk : k.val.get x = t.rep.val.inv.get (target.get x)) :
      Transporter H target (x :: points)

      Extend one point using a transporter in the current full point stabilizer, then replace that stabilizer by its stabilizer of the new source point.

      Equations
      Instances For
        theorem Hex.PermGroup.Search.Transporter.cannot_extend {n : Nat} {H : Group n} {target : Perm n} {points : List (Fin n)} (t : Transporter H target points) (x : Fin n) (h : t.group.transporter? x (t.rep.val.inv.get (target.get x)) = none) :
        ¬∃ (q : Element H), ∀ (y : Fin n), y ∈ x :: points → q.val.get y = target.get y
        inductive Hex.PermGroup.Search.TransportResult {n : Nat} (H : Group n) (target : Perm n) (points : List (Fin n)) :

        Failure of simultaneous extension is justified by a failed orbit test, not by a bound on the amount of search performed.

        Instances For
          theorem Hex.PermGroup.Search.TransportResult.failed_iff {n : Nat} {H : Group n} {target : Perm n} {points : List (Fin n)} (r : TransportResult H target points) :
          r.failed = true ↔ ¬∃ (q : Element H), ∀ (x : Fin n), x ∈ points → q.val.get x = target.get x
          def Hex.PermGroup.Search.transport {n : Nat} (H : Group n) (target : Perm n) (points : List (Fin n)) :
          TransportResult H target points

          Build a transporter coset by successive point stabilizers. Points are processed from the list's end, so callers storing prefixes in reverse order extend them in natural source-point order.

          Equations
          Instances For