(infer (sum 0 X X))
(infer (sum (s X) Y (s Z)) from (sum X Y Z))

(infer? (print (part 1 a)))
  (infer? (sum 0 0 0))

(infer? (print (part 1 b)))
  (infer? (sum (s (s 0)) (s (s (s 0))) W) (print (answer: W)))

(infer? (print (part 1 c)))
  (infer? (sum (s (s 0)) D (s (s (s (s (s 0)))))) (print (answer: D)))


(infer (prod 0 X 0) from (print (prod-base X)))
(infer (prod (s X) Y Z)
  from (print (prod-ind X Y Z))
	  (prod X Y W) (print (prod-W= W)) (sum  Y W Z))


(infer? (print (part 2 a)))
  (infer? (prod 0 0 0))

(infer? (print (part 2 b)))
  (infer? (prod (s (s 0)) (s (s (s 0))) W) (print (answer: W)))

(infer? (print (part 2 c)))
  (infer? (prod (s (s 0)) D (s (s (s (s (s (s 0))))))) (print (answer: D)))


