Documentation

Complexity.Logics.Propositional.CNF.Planar.Crossover

The finite crossover relation #

The 26 clauses formalize Lichtenstein’s crossover [Lichtenstein1982, Figs. 4–5], drawn on a grid by MIT–ULB CompGeom Group [Tromino2025, Fig. 8(b)]. The Lean table is adapted from edemaine/lean-trominoes at 6d5b36c15cec6cb18d30137b7f1c7fb92ea24332, PlanarThreeSATGadgets.lean. This file uses the ordinary CNF semantics. Geometry and local degree reduction are separate.

Main definitions #

Main results #

References #

The clause table and truth-table certificate adapt the Lean source cited above.

Variables named by their role in the fixed crossover.

Instances For
    @[instance_reducible]

    Explicit enumeration avoids relying on generated metaprogram data for the finite certificate.

    The fixed crossover clauses, in the source figure's order.

    Instances For
      def Cslib.Logic.PL.CNF.Crossover.assignment (aLeft aRight bTop bBottom aInnerLeft upperLeft lowerLeft bInnerTop center bInnerBottom upperRight lowerRight aInnerRight : Bool) :

      Assemble four boundary values and nine internal values into an assignment.

      Instances For
        def Cslib.Logic.PL.CNF.Crossover.Extends (aLeft aRight bTop bBottom : Bool) :

        A boundary assignment extends to all nine internal crossover variables.

        Instances For
          @[instance_reducible]
          instance Cslib.Logic.PL.CNF.Crossover.instDecidableExtends (aLeft aRight bTop bBottom : Bool) :
          Decidable (Extends aLeft aRight bTop bBottom)
          theorem Cslib.Logic.PL.CNF.Crossover.extends_iff (aLeft aRight bTop bBottom : Bool) :
          Extends aLeft aRight bTop bBottom ↔ aLeft = aRight ∧ bTop = bBottom

          Exhaustive certificate for Lichtenstein’s crossover [Lichtenstein1982, Figs. 4–5], as drawn in [Tromino2025, Fig. 8(b)]: horizontal and vertical values propagate independently.

          Every satisfying assignment to the crossover propagates each boundary value to the opposite port. This is the soundness direction needed when a crossover embedded in a larger formula is projected back to its two original wires.

          theorem Cslib.Logic.PL.CNF.Crossover.exists_holds_of_boundary_eq {aLeft aRight bTop bBottom : Bool} (horizontal : aLeft = aRight) (vertical : bTop = bBottom) :
          ∃ (σ : Variable → Bool), eval σ formula = true ∧ σ Variable.aLeft = aLeft ∧ σ Variable.aRight = aRight ∧ σ Variable.bTop = bTop ∧ σ Variable.bBottom = bBottom

          Conversely, two independently propagated boundary values can always be extended to a satisfying assignment of the whole crossover.

          The four boundary variables, in left/right/top/bottom order.

          Instances For

            The formula has exactly 26 clauses.

            Every clause has width at most three.

            Original internal variables have degree at most six, before local splitting.

            A terminal uses two internal incidences, leaving one external clause incidence.