Documentation

Documentation/Technology

Coupled data representations

Make the reasoning behind valuable computations harder to recover.

Coupled stateGF(2)Bit-sliceConsumer fusion

Several values, one representation#

Independent encodings leave independent recovery problems. Coupled state instead represents interacting scalar values jointly, so a transformed coordinate can depend on several original values. Complexer’s region machinery supports affine and nonlinear triangular representations for eligible int/long computations, with explicit entry and exit obligations.

The important boundary is where useful computation occurs. The transformed region can evaluate directly in coupled coordinates, reducing the need to reconstruct each original variable before every operation. Structural analysis must then recover both the representation and the computation expressed within it.

Choose a representation family#

The implementation explores more than affine arithmetic. Its domain machinery includes polynomial coupling over GF(2), bit-sliced Boolean circuits, IEEE-754-related representations and encoded loop recurrences. These are different structures for eligible regions, with different conversion costs and proof obligations. They are not interchangeable switches for arbitrary bytecode.

RepresentationWhat changesAnalysis consequence
Coupled coordinatesSeveral int/long values share a representation.Recover relationships between values, not just individual encodings.
GF(2) / bit-sliceEligible scalar computations use polynomial or Boolean representations.The recognizable arithmetic expression is no longer the working representation.
Loop-carried stateThe representation can persist across supported loop recurrences.Local expressions must be understood together with the evolving state.
Consumer fusionSelected work executes directly in encoded coordinates.A separate decode-then-compute boundary need not remain in that region.

A constant can become part of its consumer#

A conventional recovery boundary exposes a value and then hands it to another operation. Consumer-oriented transforms can combine a constant with the computation that uses it. Comparison and decision logic can be represented as a transducer, while selected arithmetic can be expressed through a primitive-typed MethodHandle combinator DAG linked through ConstantDynamic.

This changes the object an analyst has to reconstruct: a recognizable literal or a simple arithmetic body may be replaced by a relationship among runtime components. The intended result remains the same; the representation and recovery path change.

Preserve the language contract#

Representation changes must respect Java’s exact widths, signed interpretation, overflow and exception behavior. The targeted suite includes 32/64-bit round trips, direct evaluation in coupled coordinates, contextual preconditions, branched loops and state visible to exception handlers. Each case checks a concrete boundary; the presence of these tests is not a claim of universal application compatibility.

Contact the team