| 0 | : | nat |
| h | : | [nat → bool × nat → nat × nat] ⟶ nat |
| if | : | [bool × nat × nat] ⟶ nat |
| true | : | bool |
| false | : | bool |
| s | : | [nat] ⟶ nat |
| X | : | nat |
| Y | : | nat |
| F | : | nat → bool |
| G | : | nat → nat |
| if(true, X, Y) | ⇒ | X |
| if(false, X, Y) | ⇒ | Y |
| h(F, G, 0) | ⇒ | 0 |
| h(F, G, s(Y)) | ⇒ | G · h(F, G, if(F · Y, Y, 0)) |