Skip to content
Back to skills

Homoiconic Rewriting

ASecurity

Unified homoiconic graph rewriting - λ-calculus, interaction nets, ACSets, CUDA parallelism

  • 666 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added February 9, 2026
databasesgobashnodeexpressdatabaseperformance

Works with

  • mcp

Security analysis

A100/100

Scanned February 10, 2026

npx -y skills add majiayu000/claude-skill-registry --skill homoiconic-rewriting --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Homoiconic Rewriting?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Homoiconic Rewriting
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-homoiconic-rewriting/badge)](https://www.skillsdirectory.com/skills/majiayu000-homoiconic-rewriting)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: homoiconic-rewriting
description: Unified homoiconic graph rewriting - λ-calculus, interaction nets, ACSets, CUDA parallelism
version: 1.0.0
trit: 0
---

# Homoiconic Rewriting

> *Code = Data = Graph = Parallel Reduction*

**Trit**: 0 (ERGODIC - coordinates the stack)

## Core Synthesis

```
┌─────────────────────────────────────────────────────────────────┐
│              HOMOICONIC REWRITING PIPELINE                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│   λ-term ──quote──→ S-exp ──parse──→ INet ──CUDA──→ Result     │
│     │                  │               │              │         │
│   typed              data            graph         parallel     │
│   code            (homoiconic)     rewriting      reduction     │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
```

## GF(3) Balanced Dependencies

| Trit | Skill | Role |
|------|-------|------|
| +1 | `lambda-calculus` | Term generation |
| +1 | `gay-mcp` | Color generation |
| 0 | `interaction-nets` | Parallel coordination |
| 0 | `lispsyntax-acset` | Data bridge |
| -1 | `algebraic-rewriting` | Rule validation |
| -1 | `slime-lisp` | Evaluation sink |

**Sum**: (+1+1) + (0+0) + (-1-1) = 0 ✓

## The Homoiconic Property

### Level 1: S-expressions (Lisp)

```clojure
;; Code
(+ 1 2)

;; Data (same representation!)
'(+ 1 2)

;; Transform code as data
(map inc '(+ 1 2))  ; → (1 2 3)
```

### Level 2: Interaction Nets (Graphs)

```
Code (λ-term):     Data (graph):         Rewrite (reduction):
  λx. x x          ┌───┐                 ┌───┐     ┌───┐
                   │ λ │──┬──┐           │ @ │─────│ @ │
                   └─┬─┘  │  │           └─┬─┘     └─┬─┘
                     │    │  │             │         │
                   ┌─┴─┐  │  │     →       └────┬────┘
                   │ @ │──┘  │                  │
                   └─┬─┘     │               result
                     └───────┘
```

### Level 3: ACSets (Algebraic Databases)

```julia
# Code: rewrite rule
rule = Rule(L, K, R)

# Data: same representation!
rule_data = @acset RuleSchema begin
    L = [...]; K = [...]; R = [...]
end

# Transform rules as data
composed_rule = compose_rules(rule1, rule2)
```

## Key Algorithms

### 1. λ → Interaction Net Compilation

```julia
function compile_lambda_to_inet(term::LambdaTerm)::InteractionNet
    match term
        Var(x)      => wire_to(x)
        Lam(x, body) => agent(:λ, [x], compile(body))
        App(f, arg)  => agent(:@, [compile(f), compile(arg)])
    end
end
```

### 2. Parallel Reduction (CUDA-ready)

```julia
function parallel_reduce!(net::InteractionNet)
    while has_active_pairs(net)
        # Find all independent redexes (no shared wires)
        active = find_active_pairs(net)
        
        # Reduce ALL in parallel - no dependencies!
        @cuda threads=length(active) reduce_kernel!(net, active)
    end
end
```

### 3. ACSet Rewriting (DPO)

```julia
using AlgebraicRewriting

# L ← K → R (span defines rule)
rule = Rule(
    L = @acset Graph begin V=2; E=1; src=[1]; tgt=[2] end,
    K = @acset Graph begin V=1 end,
    R = @acset Graph begin V=1; E=1; src=[1]; tgt=[1] end  # self-loop
)

# Apply via double pushout
result = rewrite(rule, graph, match)
```

## CUDA Integration (Groote et al.)

### GPU Kernel for Active Pair Reduction

```cuda
__global__ void reduce_active_pairs(
    Agent* agents,
    Wire* wires, 
    int* active_pairs,
    int n_active
) {
    int idx = blockIdx.x * blockDim.x + threadIdx.x;
    if (idx >= n_active) return;
    
    int pair_id = active_pairs[idx];
    Agent* a1 = &agents[wires[pair_id].from];
    Agent* a2 = &agents[wires[pair_id].to];
    
    // Dispatch by agent types
    if (a1->type == CONSTRUCTOR && a2->type == CONSTRUCTOR) {
        annihilate(a1, a2, wires);
    } else if (a1->type == CONSTRUCTOR && a2->type == DUPLICATOR) {
        commute(a1, a2, wires, agents);
    } else if (a1->type == ERASER) {
        erase(a1, a2, wires);
    }
}
```

### Performance (from Eindhoven team)

| Benchmark | CPU | GPU (RTX 3090) | Speedup |
|-----------|-----|----------------|---------|
| Fibonacci(30) | 2.4s | 0.08s | 30x |
| Tree reduction | 5.1s | 0.12s | 42x |
| λ-calculus eval | 1.2s | 0.05s | 24x |

## Typed Decomposition

### Simply Typed λ-Calculus → Linear Logic → Interaction Nets

```
Type System          Linear Logic         Interaction Net
────────────         ────────────         ───────────────
A → B                !A ⊸ B               λ-agent + !-box
A × B                A ⊗ B                Constructor pair
A + B                A ⊕ B                Case agent
```

### GF(3) Type Assignment

```julia
# Types carry trits
struct TypedTerm
    term::LambdaTerm
    type::SimpleType
    trit::Int  # -1, 0, +1
end

# Conservation: well-typed terms have balanced trits
function check_gf3(t::TypedTerm)::Bool
    sum_trits(t) % 3 == 0
end
```

## Practical Commands

```bash
# Parse λ-term to S-expression
echo "(lambda (x) (x x))" | bb -e '(read)'

# Compile to interaction net (Bend/HVM)
bend compile program.bend -o program.hvm

# Run with GPU parallelism
hvm run program.hvm --cuda

# Julia ACSet rewriting
julia -e 'using AlgebraicRewriting; include("rewrite_rules.jl")'
```

## Triadic Pipelines

### Pipeline 1: λ-Calculus Optimization

```
lambda-calculus (+1) → interaction-nets (0) → algebraic-rewriting (-1)
     source              parallel reduce          validate result
```

### Pipeline 2: Colored Term Rewriting

```
gay-mcp (+1) → lispsyntax-acset (0) → slime-lisp (-1)
  color nodes      serialize            evaluate
```

### Pipeline 3: Full Stack

```
λ-term → quote → sexp → parse → inet → reduce → result → eval
  +1      0       0      0       0      -1       -1      -1
                         (balanced across pipeline)
```

## Key Authors

| Author | Contribution | Affiliation |
|--------|--------------|-------------|
| **Yves Lafont** | Interaction nets (1990) | Marseille |
| **Jan Friso Groote** | GPU term rewriting | TU Eindhoven |
| **Anton Wijs** | CUDA rewriting | TU Eindhoven |
| **Thierry Boy de la Tour** | Parallel graph rewriting | CNRS Grenoble |
| **Nathan Marz** | Specter (bidirectional nav) | Red Planet Labs |

## Literature

1. Lafont (1990) - "Interaction Nets"
2. Groote et al. (2022) - "Innermost many-sorted term rewriting on GPUs"
3. Boy de la Tour & Echahed (2020) - "Parallel rewriting of attributed graphs"
4. Mazza (2007) - "Symmetric Interaction Combinators"

## Related Skills

- `lambda-calculus` (+1) - Term generation
- `interaction-nets` (0) - Parallel semantics
- `algebraic-rewriting` (-1) - DPO/SPO rules
- `lispsyntax-acset` (0) - Sexp ↔ data bridge
- `sexp-neighborhood` (0) - Sexp skill index
- `gay-mcp` (+1) - Deterministic coloring

---

**Trit**: 0 (ERGODIC - coordinates the homoiconic stack)
**GF(3)**: Balanced across all pipelines

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.