Parallel
graph reduction with the <y, g>-machine.
Futures, lenient languages, and several implementations of graph reduction for lazy languages all use speculative evaluation (call-by-speculation [Hudak and Anderson 1987]) to expose parallelism.
Graph reduction is one technique for implementing lazy (call-by-need) functional languages.
Speculative parallelism in a distributed graph reduction machine.
This transformation is common to all the graph reduction schemes we describe.
Because of the interpretive essence of the graph reduction, a naive implementation of call-by-need is possible without introducing marks (as opposed to Nm in Section 3.2.2).
By far, the most common use of graph reduction is the implementation of call-by-need in the push-enter model.
Both methods consist of two phases: (1) bottom-up DJ graph reduction and variable elimination, called the elimination phase, and (2) top-down propagation of data flow solutions, called the propagation phase.
We denote by [MATHEMATICAL EXPRESSION NOT REPRODUCIBLE IN ASCII] the application of E1 graph reduction rule to the J edge [MATHEMATICAL EXPRESSION NOT REPRODUCIBLE IN ASCII] in the DJ graph [G.sup.i] = (N, E) (we use similar notation for E2 rules).
Figure 5 gives a trace of the graph reduction process.
Let S denote the splitting of a node, and let T denote some
graph reduction transformation (e.g., T = T1 \ T2)*).