â 1 semantics of programming languages recursion â 59 (2007), 180â191 1 2 2.1 fact(x) â¡ if x = 0 then 1 else x à fact(xâ1) well-defined Z * Z Z * Z F : (Z * Z) â (Z * Z) F(f)(x) =      1 (x = 0) x à f(x â 1) (x 6= 0, f(x â 1) ) ( ) F F fact fact [[fact]] : Z * Z [[fact]](x) = ( x! (x ⥠0) ( ) 2 F f [[fact]] F([[fact]])(x) =      1 (x = 0) x à y (x 6= 0, [[fact]](xâ1) = y) ( ) = ( x! (x â¥
{{#tags}}- {{label}}
{{/tags}}