[] [ "a", "b", (* x REL y (* x REL y REL z x + (* x + y (* x * (* x * y (* - (* - x (* NIL (* 3.0 (* x (* x. (* x.y (* [ (* [ st:Push ] [ x+y ) (* | x.3 x.y: (* x.y:2 x.y:z.3 x.y:z.w (* x.y:z.w | x.y:z.w(a, b, +) x.y:z.w(a, b, c (* (E (* (E x.y :: TRUE) (E x, y :: (* (E x, y :: + (E x, y :: TRUE (* (E x, y :: TRUE AND x = y (x + 2 (* (x + 2 | (x + 2) (* (x + 2) : (x): (* (x): | (x):Foo.P (* (x):Foo.P | (x):Foo.P(st:Push) (x):Foo.P(a, b, c | (x + 2, (* (x + 2, st:Push) (x + 2, y (* (x + 2, y | (x + 2, y) (* (x + 2, y) | (x + 2, y): (x, y + 2): (x, y): | (x, y):Foo.P (* (x, y):Foo.P | (x, y):Foo.P(st:Push) (x, y):Foo.P(a, b, c | (x + 2, y, (x, y + 2, (x, y, (* (x, y, | (x, y, st:Push):Pop() (x, y, z) (* (x, y, z) | (x, y, z, w (* (x, y, z, w | (x, y, z, w) (* (x, y, z, w) | (x, y, z, w):Foo.P (* (x, y, z, w):Foo.P | (x, y, z, w):Foo.P(st:Push) (x, y, z, w):Foo.P(a, b, (* (x, y, z, w):Foo.P(a, b, | (x, y, z, w):Foo.P(a, b, c (* (x, y, z, w):Foo.P(a, b, c | (E x ~ .5 :: TRUE) (E 2)