Liking cljdoc? Tell your friends :D

Source-to-Source Simplification Transpiler

A multi-layer simplification/optimization transpiler that processes the output of the semantic corrector, following MeTTaIL's architectural patterns.

Status: Design Documentation Last Updated: 2025-12-06


Overview

The simplification transpiler is a post-correction source-to-source transformer that takes corrected programs and produces simplified, more readable output while preserving semantics. It integrates with the MeTTaIL correction pipeline as a final optimization pass.

Semantic Corrector Output (Corrected Proc)
         ↓
┌────────────────────────────────────────────┐
│     SIMPLIFICATION TRANSPILER              │
│                                            │
│  Layer 1: Analysis Layer (Ascent-based)    │
│  Layer 2: Rule Application Layer (MORK)    │
│  Layer 3: Strategy Selection Layer         │
│  Layer 4: Verification Layer (MeTTaIL)     │
│                                            │
└────────────────────────────────────────────┘
         ↓
Simplified Source (Same Language)

Key Features

  • Multi-layer architecture following MeTTaIL patterns
  • Datalog-based analysis via Ascent for reachability, liveness, and cost
  • Pattern/template rewriting via MORK's transform_multi_multi_()
  • Semantic verification via MeTTaIL predicates
  • Rholang congruence rules for process calculus simplification
  • Termination guarantees with formal proof sketch
  • Bisimulation-based optimization with RPO-proven soundness
  • Up-to verification techniques for efficient equivalence checking

Bisimulation-Based Optimization

The simplification transpiler uses bisimulation as the soundness criterion for optimizations:

PropertyDescription
SoundnessIf $P \approx Q$, replacing P with Q preserves all observable behaviors
CompletenessBisimulation captures exactly the observable distinctions
CompositionalityBisimilar subterms can be replaced in any context

Optimization Strategies

ConstraintStrategyGuarantee
MemoryDead code elimination, scope minimization$P \approx \text{simplify}(P)$
LatencyCommunication fusion, inlining$P \approx \text{optimize}(P)$
ParallelismScope extrusion, parallel fusion$P \approx \text{parallelize}(P)$

Verification Efficiency

Up-to techniques reduce verification complexity:

TechniqueSpeedup
Up-to congruence4-100x
Up-to transitivity$\mathcal{O}(1)$ amortized
Up-to context100-10,000x

See 11-optimization-strategies.md and 12-up-to-verification.md for details.


Technology Integration

TechnologyRole
MORKPattern/template rule application
PathMapMemoization cache for simplified terms
AscentDatalog-based program analysis
MeTTaILSemantic predicate evaluation
MeTTaTronGuard predicate execution
liblevenshteinPre-normalization of symbols
RholangStructural congruence laws

Documentation Structure

Core Architecture

  1. Architecture Overview - 4-layer transpiler design
  2. Analysis Layer - Ascent-based program analysis
  3. Rule Application - MORK pattern matching integration
  4. Strategy Selection - Phase ordering and termination
  5. Verification - Semantic preservation checks

Specialized Topics

  1. Rholang Congruence - Process calculus structural laws
  2. Termination Proof - Formal termination argument
  3. Performance Targets - Benchmarks and optimization goals

Bisimulation-Based Optimization

  1. RPO Congruence Proofs - Formal bisimilarity proofs for congruence laws
  2. Transparency Guarantees - Phase transparency proofs
  3. Optimization Strategies - Bisimulation-based code optimization
  4. Up-To Verification - Efficient bisimulation verification techniques

Rule Definitions

Located in rules/:


Quick Start

Simplification Pipeline

// 1. Receive corrected program from semantic corrector
let corrected_proc: Proc = semantic_corrector.correct(input)?;

// 2. Run analysis pass (Ascent-based)
let analysis = AnalysisLayer::new(&theory_def);
let facts = analysis.analyze(&corrected_proc);

// 3. Apply simplification rules (MORK-based)
let engine = SimplificationEngine::new(&facts);
let simplified = engine.simplify(corrected_proc);

// 4. Verify semantic preservation (MeTTaIL-based)
let verifier = VerificationLayer::new();
verifier.check(&corrected_proc, &simplified)?;

// 5. Return simplified source
Ok(simplified)

Rule Definition Format

(simplification-rule
    (id add-zero-right)
    (category algebraic)
    (phase LocalSimplification)

    (pattern (Plus ?x (Num 0)))
    (template ?x)

    (termination-weight -1))

Simplification Phases

Rules are organized into phases that execute in order:

PhasePurposeExample Rules
LocalSimplificationFast algebraic rewritesx+0→x, x*1→x
AnalysisDrivenRequires analysis factsDead code elimination
StructuralNormalizationCanonical formRholang congruence
TypeDirectedRequires type infoRedundant cast removal

Related Documentation

MeTTaIL Correction Pipeline

Grammar Correction Design

MORK/PathMap Integration


Performance Targets

MetricTarget
AST size reduction15-30%
Latency<50ms for typical programs
Memory overhead<10% additional

See Performance Targets for detailed benchmarks.


Changelog

  • 2025-12-17: Added bisimulation-based optimization documentation (09-12)
  • 2025-12-06: Initial design documentation created

Can you improve this documentation?Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close