plurigrid/asi

three-match

3-MATCH colored subgraph isomorphism gadget for 3-SAT reduction

First seen Feb 25, 2026

Installation

$ npx skills add plurigrid/asi --skill three-match

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from plurigrid/asi · top by installs.

npx skills add plurigrid/asi

Browse all from plurigrid/asi

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 62
License LICENSE
Default branch main
Open issues 3
Status Active

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 6,342 B
  • docs SUMMARY.md 82 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 5 installs

SKILL.md

<!-- Propagated to amp | Trit: 0 | Source: .ruler/skills/three-match -->

Three-Match Skill: 3-SAT via Colored Subgraph Isomorphism

Status: ✅ Production Ready Trit: -1 (MINUS - conservative/geodesic) Principle: Local constraints → Global correctness Frame: Non-backtracking geodesics with Möbius filtering


Overview

Three-Match reduces 3-SAT to 3-coloring which reduces to colored subgraph isomorphism. The 3-MATCH gadget enforces constraints LOCALLY via:

  1. Non-backtracking geodesics (prime paths, μ(n) ≠ 0)
  2. Möbius inversion filtering (back-and-forth cancellation)
  3. GF(3) conservation (sum ≡ 0 mod 3)

Correct by construction: If local geodesic constraints are satisfied, global 3-SAT solution is guaranteed.

Core Formula

# Three colors match at depth d iff:
# - Pairwise differences have 3-adic valuation ≥ d
# - No backtracking (each color unique in path)
# - GF(3) sum ≡ 0 (mod 3)

v₃(|a - b|) ≥ d  ∧  v₃(|b - c|) ≥ d  ∧  v₃(|c - a|) ≥ d

Why Non-Backtracking?

  1. Prime paths: μ(n) ≠ 0 ⟺ n is squarefree
  2. No revisiting: Each state appears once in geodesic
  3. Möbius filtering: Composites (backtracking) cancel out
  4. Spectral gap: Ramanujan property (λ₂ ≤ 2√(k-1))

Gadgets

1. ThreeMatch Gadget

Three colors forming a valid local constraint:

match = ThreeMatchGeodesicGadget::ThreeMatch.new(seed: 0x42D, depth: 1)
match.color_a  # => { trit: -1, hex: "#2626D8", polarity: :minus }
match.color_b  # => { trit: 0, hex: "#26D826", polarity: :ergodic }
match.color_c  # => { trit: 1, hex: "#D82626", polarity: :plus }
match.gf3_conserved?  # => true

2. NonBacktrackingGeodesic

Prime path through color space:

geo = NonBacktrackingGeodesic.new(seed: seed, length: 8).generate!
geo.prime?           # => true (no backtracking)
geo.moebius_product  # => ±1 (non-zero for primes)
geo.moebius_filter   # => filtered path (only primes kept)

3. ColoredSubgraphGadget

3-SAT clause reduction:

gadget = ColoredSubgraphGadget.new(seed: seed)
gadget.add_clause(1, -2, 3)   # (x₁ ∨ ¬x₂ ∨ x₃)
gadget.add_clause(-1, 2, 4)   # (¬x₁ ∨ x₂ ∨ x₄)
gadget.build_gadgets!
gadget.correct_by_construction?  # => true

4. BackAndForthFilter

Möbius inversion bidirectionally:

filter = BackAndForthFilter.new(seed: seed)
result = filter.full_cycle(sequence)
# Primes kept, composites filtered

Commands

# Run 3-MATCH demo
just three-match

# Test gadget correctness
just test-three-match

# Combine with unworld
just unworld-match

API

require 'three_match_geodesic_gadget'

# Create gadget
match = ThreeMatchGeodesicGadget::ThreeMatch.new(seed: seed)

# Verify constraints
match.gf3_conserved?      # GF(3) sum = 0
match.matches_at_depth?(1) # 3-adic valuation ≥ 1

# Build geodesic
geo = ThreeMatchGeodesicGadget::NonBacktrackingGeodesic.new(
  seed: seed, length: 12
).generate!

# Check primality
geo.prime?  # No backtracking?

Integration with Unworld

The 3-MATCH chain uses seed-chaining for gadget sequence:

chain = Unworld::ThreeMatchChain.new(genesis_seed: seed, length: 4)
chain.unworld[:matches].each do |m|
  puts "#{m[:colors]} | GF(3): #{m[:gf3]}"
end

Mathematical Foundation

Möbius Function

μ(n) = { 1     if n = 1
       { (-1)^k if n = p₁p₂...pₖ (distinct primes)
       { 0     if n has squared prime factor

Möbius Inversion

f(n) = Σ_{d|n} g(d)  ⟹  g(n) = Σ_{d|n} μ(n/d) f(d)

3-adic Valuation

v₃(n) = max { k : 3^k | n }

Example Output

─── 3-MATCH Gadget ───
3-MATCH(d=1): #D8267F #2CD826 #4FD826
  GF(3) conserved: true
  Matches at depth 1: true

─── Non-Backtracking Geodesic ───
Geodesic(PRIME, μ=1): #D8267F → #2CD826 → #4FD826 → ...
  Prime path: true
  Möbius product: 1

─── Colored Subgraph Gadget (3-SAT) ───
  Clauses: 3
  GF(3) all conserved: true
  Prime geodesics: 3
  Correct by construction: true

Correct-by-Construction Inline Caching (NEW 2025-12-22)

The 3-MATCH principle applies to Specter-style path caching:

The Insight

Local constraint satisfaction → Global cache correctness

When path types are correct at compile time (local), cached paths are guaranteed correct (global).

Specter Path as 3-MATCH Gadget

# Each path element is a "color" in the gadget
path = (ALL, pred(iseven), FIRST)
#       -1       0          +1     → GF(3) = 0 ✓

# The TupleNav wrapper is the "gadget envelope"
compiled = TupleNav(path)  # Type-stable, 0 allocs

# Execution is "correct by construction"
result = nav_select(compiled, data, IDENTITY)

Mapping to 3-MATCH Components

Specter 3-MATCH Property
Navigator Color Individual constraint
TupleNav Gadget Envelope preserving GF(3)
Type inference Möbius filtering Eliminates invalid paths
Inline caching Non-backtracking No revisiting (cached once)

Event Stream

Correct-by-construction events flow through the gadget:

# Event: Path compilation (happens once)
PathCompiled(types::Tuple{...}) where all types stable

# Event: Cache hit (no recompilation)
CacheHit(compiled::TupleNav) where same types

# Event: Traversal (GF(3) conserved)
Traversal(input, output) where GF(3) sum = 0

Benchmark Evidence

The 93-113x speedup validates correct-by-construction:

  • Original CPS: Dynamic dispatch = "backtracking" in type space
  • Optimized Tuple: Static types = "prime path" through type space
  • Result: Functor structs achieve 1.0x overhead (zero cost!)

Files

  • lib/specter_optimized.jl - Correct-by-construction implementation
  • lib/specterchairmarksworld.jl - Validation benchmarks

Skill Name: three-match Type: 3-SAT Reduction / Colored Subgraph Isomorphism / Inline Caching Trit: -1 (MINUS) GF(3): Conserved by construction Geodesics: Non-backtracking (prime paths only) Caching: Type-stable paths as non-backtracking geodesics

Para(Optic) atlas

Part of: para-mensch-commons.