A program transformation used in functional programming to implement full laziness. The general idea is to float each subexpression as far out (toward the top level) as possible to maximise sharing.