Evaluate reasoning model capabilities by analyzing three complexity-dependent behavioral regimes and identifying fundamental limitations in symbolic manipulation rather than computational budgets.
Installs into .claude/skills of the current project.
Are you the author of Illusion Of Thinking?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/adu2021-illusion-of-thinking)
---
name: illusion-of-thinking
title: "The Illusion of Thinking: Understanding the Strengths and Limitations of Reasoning Models via the Lens of Problem Complexity"
version: 0.0.2
engine: skillxiv-v0.0.2-claude-opus-4.6
license: MIT
url: "https://arxiv.org/abs/2506.06941"
keywords: [reasoning models, problem complexity, thinking traces, generalization failure]
description: "Evaluate reasoning model capabilities by analyzing three complexity-dependent behavioral regimes and identifying fundamental limitations in symbolic manipulation rather than computational budgets."
---
# The Illusion of Thinking
## Core Concept
Large Reasoning Models (LRMs) demonstrate impressive benchmark performance, but this research challenges whether improvements reflect genuine reasoning or sophisticated pattern matching. Using algorithmically-structured puzzles with controllable difficulty, the authors reveal three complexity-dependent behavioral regimes where models fundamentally fail to generalize beyond training distributions.
## Architecture Overview
- **Four puzzle environments**: Tower of Hanoi, Checker Jumping, River Crossing, Blocks World enable fine-grained complexity control
- **Reasoning trace analysis**: Extract intermediate solutions and thinking patterns from extended traces
- **Comparative evaluation**: Match reasoning/non-reasoning model pairs with equivalent inference compute budgets
- **Sequential validation**: Custom simulators verify each move step-by-step
## Implementation
### Step 1: Design Controllable Puzzle Environment
Create puzzle environments with adjustable parameters:
```python
class PuzzleEnvironment:
def __init__(self, puzzle_type: str, complexity_level: int):
self.puzzle_type = puzzle_type
self.complexity = complexity_level
self.state = self.initialize_state()
def initialize_state(self) -> dict:
"""Generate puzzle state with controlled difficulty."""
if self.puzzle_type == "tower_of_hanoi":
return {"disks": self.complexity, "pegs": [[], [], []]}
elif self.puzzle_type == "checker_jumping":
return {"board": self._create_board(self.complexity)}
def validate_move(self, action: tuple) -> bool:
"""Verify move legality using domain-specific rules."""
return self._apply_transition(action) is not None
def get_optimal_steps(self) -> int:
"""Return theoretical minimum steps for complexity level."""
return self._compute_lower_bound()
```
### Step 2: Extract Thinking Traces and Patterns
Analyze reasoning behavior across complexity regimes:
```python
class ThinkingAnalyzer:
def extract_trace_features(self, thinking_text: str,
final_answer: str) -> dict:
"""Extract patterns from extended reasoning traces."""
features = {
"token_count": len(thinking_text.split()),
"solution_discovery_point": self._find_first_solution(thinking_text),
"error_recovery_attempts": self._count_recoveries(thinking_text),
"fixation_patterns": self._detect_fixation(thinking_text),
"correctness": self._validate_answer(final_answer)
}
return features
def identify_regime(self, features: dict,
complexity: int) -> str:
"""Classify behavior into three regimes."""
if features["correctness"] and complexity < self.low_threshold:
return "LOW_COMPLEXITY"
elif features["correctness"] and complexity < self.medium_threshold:
return "MEDIUM_COMPLEXITY"
else:
return "HIGH_COMPLEXITY_COLLAPSE"
```
### Step 3: Implement Comparative Evaluation
Test reasoning vs non-reasoning models under equivalent budgets:
```python
def run_comparative_test(model_reasoning, model_baseline,
puzzle_env: PuzzleEnvironment,
max_tokens: int = 512) -> dict:
"""Compare performance with matched computational budgets."""
# Get reasoning model output
reasoning_output = model_reasoning.generate(
puzzle_env.to_prompt(),
max_tokens=max_tokens,
thinking_budget=max_tokens // 2
)
# Get baseline output with equivalent token budget
baseline_output = model_baseline.generate(
puzzle_env.to_prompt(),
max_tokens=max_tokens
)
return {
"reasoning_correct": validate_solution(reasoning_output),
"baseline_correct": validate_solution(baseline_output),
"reasoning_tokens": reasoning_output.token_count,
"reasoning_effort_trajectory": extract_effort_curve(
reasoning_output.thinking_trace
)
}
```
## Practical Guidance
**Key Finding**: Models allocate more thinking initially, then counterintuitively reduce effort approaching collapse points—despite adequate remaining budget. This suggests the failure is not computational but rooted in fundamental symbolic manipulation limitations.
**Experimental Design Tips**:
- Use "clean" puzzles without data contamination from benchmark training
- Analyze reasoning traces at intermediate steps, not just final answers
- Test algorithms in explicit form; lack of improvement indicates symbolic weakness not search difficulty
- Check for non-monotonic patterns where harder instances fail earlier despite requiring longer solutions
**When to Apply**: Use this framework to rigorously evaluate claims about reasoning capability improvements, especially when benchmarks may suffer from data leakage or distribution shift.
## Reference
The work employs three behavioral regimes:
1. **Low complexity**: Standard LLMs match or exceed reasoning models
2. **Medium complexity**: Reasoning models show advantages from extended thinking
3. **High complexity**: Both models collapse completely, revealing fundamental limitations
The "reasoning effort paradox" indicates models reduce thinking as problems become intractable—counterintuitive behavior suggesting training dynamics rather than genuine search limitations.