Longest Common Subsequence
dp(name = lcs) { input = {sa: [u8], sb: [u8]} node { key = {a: uint, b: uint} payload = || sa[a] == sb[b] ? 1 : 0 next = || { (a == sa.len || b == sb.len) && yield node.end() && return
if sa[a] == sb[b] { yield link(sa[a]) yield node({a: a + 1, b: b + 1}) } else { yield node({a: a + 1, b: b}) yield node({a: a, b: b + 1}) } }
add = |a, b| max(a, b) zero = max.neutral
mul = |a, b| a + b one = add.neutral }
node (name = end) { add = |a, b| max(a, b) zero = max.neutral }
begin node({a: 0, b: 0})
output node.end()}


