Documentation

HexPermGroup.Search.Predicate

An executable subgroup predicate. Closure is proved for the actual test used at leaves and on the result group's generators.

Instances For
    theorem Hex.PermGroup.Search.Predicate.generated {n : Nat} (P : Predicate n) {S : Array (Perm n)} (h : ∀ (i : Fin S.size), P.test S[↑i] = true) {p : Perm n} (hp : Generated S p) :
    P.test p = true

    Membership in a second checked group is a subgroup predicate even when neither group is contained in the other.

    Equations
    Instances For
      structure Hex.PermGroup.Search.Pruner {n : Nat} (G : Group n) (test : Perm n → Bool) :

      A refinement provides a replayable reason for excluding a whole prefix coset. Its checker must prove impossibility for every completion of that node.

      Instances For
        def Hex.PermGroup.Search.Pruner.find {n : Nat} {G : Group n} {test : Perm n → Bool} (C : Pruner G test) (t : Node G) :
        Equations
        Instances For
          theorem Hex.PermGroup.Search.Pruner.checked {n : Nat} {G : Group n} {test : Perm n → Bool} (C : Pruner G test) (t : Node G) (r : C.Reason) (h : C.find t = some r) :
          C.reject t r = true
          theorem Hex.PermGroup.Search.Pruner.find_none {n : Nat} {G : Group n} {test : Perm n → Bool} (C : Pruner G test) (t : Node G) :
          C.find t = none ↔ ∀ (i : Fin (C.trials t).size), C.reject t ((C.trials t).get i) = false
          def Hex.PermGroup.Search.Pruner.findBudgeted {n : Nat} {G : Group n} {test : Perm n → Bool} (C : Pruner G test) (t : Node G) (capacity : Nat) :
          (C.trials t).Run (C.reject t) 0 capacity

          Bounded refinement counts individual rejection tests and distinguishes an unfinished scan from a completed scan that found no rejecting reason.

          Equations
          Instances For
            @[reducible, inline]
            abbrev Hex.PermGroup.Search.Constraint {n : Nat} (G : Group n) (P : Predicate n) :

            Subgroup search specializes the same pruning interface used by transporter search to a predicate closed under the group operations.

            Equations
            Instances For

              The absence of additional refinement still leaves exact leaf checking and the subgroup-containment pruning rule available.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                def Hex.PermGroup.Search.Constraint.ofTest {n : Nat} {G : Group n} {P : Predicate n} (reject : Node G → Bool) (sound : ∀ (t : Node G), reject t = true → ∀ (p : Perm n), t.Contains p → P.test p = false) :

                A deterministic impossibility test whose complete input is already in the node needs no additional witness data.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For

                  Try the first refinement, then the second, preserving which rejection checker must be replayed.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    def Hex.PermGroup.Search.Node.covered {n : Nat} {G : Group n} (t : Node G) (K : Group n) :

                    A whole prefix coset is contained in a checked group when its prefix and all suffix generators belong to that group.

                    Equations
                    Instances For
                      theorem Hex.PermGroup.Search.Node.covered_sound {n : Nat} {G : Group n} (t : Node G) (K : Group n) (h : t.covered K = true) {p : Perm n} (hp : t.Contains p) :
                      theorem Hex.PermGroup.Search.Node.covered_mono {n : Nat} {G : Group n} (t : Node G) {K L : Group n} (hkl : K.IsSubgroup L) (h : t.covered K = true) :