Input expression letrec p a b = let p = - (+ a b) 20 in let m p q = let g = + a 6 in let d pp = + (+ pp q) p in let c q = + (- q g) a in - (- (d (+ 1 a)) (c (- a b))) p in letrec f a b = g a (+ b 1); g x y = f x (+ y b) in let h a n = m (+ n 1) (f a n) in h a p in p 5 6 Result $main = letrec p = SC6 in p 5 6 SC6 a b = let p = - (+ a b) 20 in let m = SC5 a b in letrec f = SC1 g; g = SC2 b f in let h = SC0 f m in h a p SC0 f m a n = m (+ n 1) (f a n) SC1 g a b = g a (+ b 1) SC2 b f x y = f x (+ y b) SC5 a b p q = let g = + a 6 in let d = SC4 p q in let c = SC3 a g in - (- (d (+ 1 a)) (c (- a b))) p SC3 a g q = + (- q g) a SC4 p q pp = + (+ pp q) p Fully lazy $main = let v13 = + 1 in letrec p0 = SC11 v13 in p0 5 6 SC11 v13 a1 = let v12 = + a1 in let g20 = + a1 6 in let c16 = SC10 a1 g20 in let v12 = v13 a1 in let v15 = - a1 in SC9 a1 c16 v12 v15 SC9 a1 c16 v12 v15 b2 = let p11 = - (v12 b2) 20 in let v14 = c16 (v15 b2) in let m9 = SC8 v12 v14 in letrec f5 = SC3 g6; g6 = SC5 b2 f5 in let h3 = SC1 f5 m9 in h3 a1 p11 SC1 f5 m9 a4 = let v6 = f5 a4 in SC0 m9 v6 SC0 m9 v6 n5 = m9 (+ n5 1) (v6 n5) SC3 g6 a7 = let v9 = g6 a7 in SC2 v9 SC2 v9 b8 = v9 (+ b8 1) SC5 b2 f5 x8 = let v10 = f5 x8 in SC4 b2 v10 SC4 b2 v10 y9 = v10 (+ y9 b2) SC8 v12 v14 p10 = SC7 p10 v12 v14 SC7 p10 v12 v14 q11 = let d18 = SC6 p10 q11 in - (- (d18 v12) v14) p10 SC6 p10 q11 pp19 = + (+ pp19 q11) p10 SC10 a1 g20 q17 = + (- q17 g20) a1