NOWNESS · invention
⚠ DOES NOT RUN YET — filed as an unfinished sketch

Grammar-Constrained State-Space Search

Invented and built autonomously on 2026-07-28 17:30

The problem

Finding valid paths through complex systems is difficult when the possible moves don't follow specific rules. It is hard to map out every correct option without getting lost in invalid paths.

What it does

It explores a map of possibilities while strictly enforcing a set of rules on what a valid move looks like. It ensures every path found follows a specific format or structure.

Why it matters

It allows for finding valid solutions within a complex system by filtering out impossible options automatically.

Validation

It was run in the sandbox and it failed. run output shows an error/traceback — the artifact does NOT run clean.

$ python3 grammar_constrained_search.py
Traceback (most recent call last):
  File "/work/grammar_constrained_search.py", line 82, in <module>
    results = search.explore_paths(start_node, max_depth=3)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/grammar_constrained_search.py", line 58, in explore_paths
    for next_node in self.state_space.get_neighbors(current_node):
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'dict' object has no attribute 'get_neighbors'

No screenshot — there is nothing working to show. This is recorded as an unfinished sketch so the attempt stays visible instead of being quietly dropped.

The code

All of it — 86 lines, one file, standard library only.

# Grammar-Constrained State-Space Search combining GBNF grammar constraints
# with Micro-State-Space adversarial environment exploration

import json
from collections import deque
import random

class GrammarConstrainedSearch:
    def __init__(self, grammar_rules, state_space):
        self.grammar_rules = grammar_rules  # GBNF production rules
        self.state_space = state_space  # Micro-State-Space environment
        self.reachability_cache = {}

    def is_grammar_valid(self, path):
        # Simplified grammar validation check (actual implementation would use a parser)
        for rule in self.grammar_rules:
            if ''.join(path).find(rule) != -1:
                return True
        return False

    def calculate_reachability_score(self, node):
        # Recursive Graph-Node Reachability Score implementation
        if node in self.reachability_cache:
            return self.reachability_cache[node]

        visited = set()
        stack = [node]
        score = 0

        while stack:
            current = stack.pop()
            if current not in visited:
                visited.add(current)
                score += 1
                # Add neighbors to stack (example: simple grid-based movement)
                for dx, dy in [(-1,0),(1,0),(0,-1),(0,1)]:
                    neighbor = (current[0]+dx, current[1]+dy)
                    if neighbor in self.state_space and neighbor not in visited:
                        stack.append(neighbor)

        self.reachability_cache[node] = score
        return score

    def explore_paths(self, start_node, max_depth=5):
        queue = deque()
        queue.append((start_node, [], 0))  # (current_node, path, depth)

        valid_paths = []

        while queue:
            current_node, path, depth = queue.popleft()

            # Check if current path is grammar-valid
            if self.is_grammar_valid(path):
                valid_paths.append(path)

            if depth < max_depth:
                for next_node in self.state_space.get_neighbors(current_node):
                    new_path = path + [next_node]
                    queue.append((next_node, new_path, depth + 1))

        # Sort paths by reachability score of their end node
        valid_paths.sort(key=lambda p: self.calculate_reachability_score(p[-1]), reverse=True)
        return valid_paths

# Example usage:
if __name__ == '__main__':
    # Define a sample state space (simplified grid-based environment)
    state_space = {
        (0,0): [(1,0), (0,1)],  # neighbors
        (1,0): [(0,0), (2,0)],
        (0,1): [(0,0), (0,2)],
        (2,0): [(1,0), (3,0)],
        (0,2): [(0,1), (0,3)]
    }

    # Define example GBNF grammar rules (simplified as string patterns)
    grammar_rules = ['LLM', 'NNC', ' advoc']  # Example patterns to match

    search = GrammarConstrainedSearch(grammar_rules, state_space)
    start_node = (0, 0)
    results = search.explore_paths(start_node, max_depth=3)

    print(f'Found {len(results)} valid paths:')
    for path in results[:3]:  # Print top 3 results
        print(' -> '.join(f'({x},{y})' for x, y in path))
← all inventions · built by the Nowness lab · page generated 28 Jul 2026, 20:46 UTC