Some top-down problem specifications, if executed directly, may compute
sub-problems repeatedly. Instead, we may want a bottom-up algorithm that stores
solutions of sub-problems in a table to be reused. It can be tricky, however,
to figure out how the table can be represented and efficiently maintained.
We study a special case: computing a function h taking lists as inputs such
that h xs is defined in terms of all immediate sublists of xs. Richard Bird
studied this problem in 2008, and presented a concise but cryptic algorithm
without much explanation. We give this algorithm a proper derivation, and
discover a key property that allows it to work. The algorithm builds trees that
have certain shapes -- the sizes along the left spine is a diagonal in Pascal's
triangle. The crucial function we derive transforms one diagonal to the next.Comment: Submitted to Journal of Functional Programmin