Dtype [(["a"; "b"],"prod",[("Pair",[Tvar "a"; Tvar "b"])])] Dtype [(["a"],"list", [("Cons",[Tvar "a"; Tapp [Tvar "a"] "list"]); ("Nil",[])])] Dtype [(["a"],"heap_address",[("H_data",[Tvar "a"]); ("H_addr",[Tnum])])] Dtype [(["a"; "b"],"heap_element", [("H_block", [Tapp [Tapp [Tapp [Tvar "a"] "heap_address"] "list"; Tapp [Tnum; Tvar "b"] "prod"] "prod"]); ("H_ref",[Tnum]); ("H_emp",[])])] Dlet (Pvar "getBLOCK") (Fun "v3" (Fun "v4" (Mat (Var "v4") [(Pcon "H_emp" [],Var "v3"); (Pcon "H_ref" [Pvar "v1"],Var "v3"); (Pcon "H_block" [Pvar "v2"],Var "v2")]))) Dlet (Pvar "UPDATE") (Fun "v3" (Fun "v4" (Fun "v2" (Fun "v1" (If (App Equality (Var "v3") (Var "v1")) (Var "v4") (App Opapp (Var "v2") (Var "v1"))))))) Dlet (Pvar "rel_move") (Fun "v33" (Mat (Var "v33") [(Pcon "Pair" [Pvar "v32"; Pvar "v31"], Mat (Var "v32") [(Pcon "H_addr" [Pvar "v19"], Mat (Var "v31") [(Pcon "Pair" [Pvar "v18"; Pvar "v17"], Mat (Var "v17") [(Pcon "Pair" [Pvar "v16"; Pvar "v15"], Mat (Var "v15") [(Pcon "Pair" [Pvar "v14"; Pvar "v13"], Mat (Var "v13") [(Pcon "Pair" [Pvar "v12"; Pvar "v11"], Mat (Var "v11") [(Pcon "Pair" [Pvar "v10"; Pvar "v9"], Mat (App Opapp (Var "v16") (Var "v19")) [(Pcon "H_emp" [], Con "Pair" [Con "H_addr" [Var "v18"]; Con "Pair" [Var "v18"; Var "v16"]]); (Pcon "H_ref" [Pvar "v1"], Con "Pair" [Con "H_addr" [Var "v1"]; Con "Pair" [Var "v18"; Var "v16"]]); (Pcon "H_block" [Pvar "v8"], Mat (Var "v8") [(Pcon "Pair" [Pvar "v7"; Pvar "v6"], Mat (Var "v6") [(Pcon "Pair" [Pvar "v5"; Pvar "v4"], Let "v3" (App Opapp (App Opapp (App Opapp (Var "UPDATE") (Var "v19")) (Con "H_ref" [Var "v18"])) (Var "v16")) (Let "v2" (App Opapp (App Opapp (App Opapp (Var "UPDATE") (Var "v18")) (Con "H_block" [Con "Pair" [Var "v7"; Con "Pair" [Var "v5"; Var "v4"]]])) (Var "v3")) (Con "Pair" [Con "H_addr" [Var "v18"]; Con "Pair" [App (Opn Plus) (App (Opn Plus) (Var "v18") (Var "v5")) (Val (Lit (IntLit 1))); Var "v2"]])))])])])])])])])]); (Pcon "H_data" [Pvar "v30"], Mat (Var "v31") [(Pcon "Pair" [Pvar "v29"; Pvar "v28"], Mat (Var "v28") [(Pcon "Pair" [Pvar "v27"; Pvar "v26"], Mat (Var "v26") [(Pcon "Pair" [Pvar "v25"; Pvar "v24"], Mat (Var "v24") [(Pcon "Pair" [Pvar "v23"; Pvar "v22"], Mat (Var "v22") [(Pcon "Pair" [Pvar "v21"; Pvar "v20"], Con "Pair" [Con "H_data" [Var "v30"]; Con "Pair" [Var "v29"; Var "v27"]])])])])])])])])) Dletrec [("rel_move_list","v35", Mat (Var "v35") [(Pcon "Pair" [Pvar "v34"; Pvar "v33"], Mat (Var "v34") [(Pcon "Nil" [], Mat (Var "v33") [(Pcon "Pair" [Pvar "v10"; Pvar "v9"], Mat (Var "v9") [(Pcon "Pair" [Pvar "v8"; Pvar "v7"], Mat (Var "v7") [(Pcon "Pair" [Pvar "v6"; Pvar "v5"], Mat (Var "v5") [(Pcon "Pair" [Pvar "v4"; Pvar "v3"], Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Pair" [Con "Nil" []; Con "Pair" [Var "v10"; Var "v8"]])])])])])]); (Pcon "Cons" [Pvar "v32"; Pvar "v31"], Mat (Var "v33") [(Pcon "Pair" [Pvar "v30"; Pvar "v29"], Mat (Var "v29") [(Pcon "Pair" [Pvar "v28"; Pvar "v27"], Mat (Var "v27") [(Pcon "Pair" [Pvar "v26"; Pvar "v25"], Mat (Var "v25") [(Pcon "Pair" [Pvar "v24"; Pvar "v23"], Mat (Var "v23") [(Pcon "Pair" [Pvar "v22"; Pvar "v21"], Let "v20" (App Opapp (Var "rel_move") (Con "Pair" [Var "v32"; Con "Pair" [Var "v30"; Con "Pair" [Var "v28"; Con "Pair" [Var "v26"; Con "Pair" [Var "v24"; Con "Pair" [Var "v22"; Var "v21"]]]]]])) (Mat (Var "v20") [(Pcon "Pair" [Pvar "v19"; Pvar "v18"], Mat (Var "v18") [(Pcon "Pair" [Pvar "v17"; Pvar "v16"], Let "v15" (App Opapp (Var "rel_move_list") (Con "Pair" [Var "v31"; Con "Pair" [Var "v17"; Con "Pair" [Var "v16"; Con "Pair" [Var "v26"; Con "Pair" [Var "v24"; Con "Pair" [Var "v22"; Var "v21"]]]]]])) (Mat (Var "v15") [(Pcon "Pair" [Pvar "v14"; Pvar "v13"], Mat (Var "v13") [(Pcon "Pair" [Pvar "v12"; Pvar "v11"], Con "Pair" [Con "Cons" [Var "v19"; Var "v14"]; Con "Pair" [Var "v12"; Var "v11"]])])]))])]))])])])])])])])] Dlet (Pvar "rel_gc_step") (Fun "v25" (Fun "v26" (Mat (Var "v26") [(Pcon "Pair" [Pvar "v24"; Pvar "v23"], Mat (Var "v23") [(Pcon "Pair" [Pvar "v22"; Pvar "v21"], Mat (Var "v21") [(Pcon "Pair" [Pvar "v20"; Pvar "v19"], Mat (Var "v19") [(Pcon "Pair" [Pvar "v18"; Pvar "v17"], Mat (Var "v17") [(Pcon "Pair" [Pvar "v16"; Pvar "v15"], Mat (Var "v15") [(Pcon "Pair" [Pvar "v14"; Pvar "v13"], Let "v12" (App Opapp (App Opapp (Var "getBLOCK") (Var "v25")) (App Opapp (Var "v20") (Var "v24"))) (Mat (Var "v12") [(Pcon "Pair" [Pvar "v11"; Pvar "v10"], Mat (Var "v10") [(Pcon "Pair" [Pvar "v9"; Pvar "v8"], Let "v7" (App Opapp (Var "rel_move_list") (Con "Pair" [Var "v11"; Con "Pair" [Var "v22"; Con "Pair" [Var "v20"; Con "Pair" [Var "v18"; Con "Pair" [Var "v16"; Con "Pair" [Var "v14"; Var "v13"]]]]]])) (Mat (Var "v7") [(Pcon "Pair" [Pvar "v6"; Pvar "v5"], Mat (Var "v5") [(Pcon "Pair" [Pvar "v4"; Pvar "v3"], Let "v2" (App Opapp (App Opapp (App Opapp (Var "UPDATE") (Var "v24")) (Con "H_block" [Con "Pair" [Var "v6"; Con "Pair" [Var "v9"; Var "v8"]]])) (Var "v3")) (Let "v1" (App (Opn Plus) (App (Opn Plus) (Var "v24") (Var "v9")) (Val (Lit (IntLit 1)))) (Con "Pair" [Var "v1"; Con "Pair" [Var "v4"; Var "v2"]])))])]))])]))])])])])])]))) Dletrec [("rel_gc_loop","v21", Fun "v22" (Mat (Var "v22") [(Pcon "Pair" [Pvar "v20"; Pvar "v19"], Mat (Var "v19") [(Pcon "Pair" [Pvar "v18"; Pvar "v17"], Mat (Var "v17") [(Pcon "Pair" [Pvar "v16"; Pvar "v15"], Mat (Var "v15") [(Pcon "Pair" [Pvar "v14"; Pvar "v13"], Mat (Var "v13") [(Pcon "Pair" [Pvar "v12"; Pvar "v11"], Mat (Var "v11") [(Pcon "Pair" [Pvar "v10"; Pvar "v9"], If (App Equality (Var "v20") (Var "v18")) (Con "Pair" [Var "v18"; Var "v16"]) (If (Log Or (App Equality (App (Opb Lt) (Var "v20") (Var "v18")) (Val (Lit (Bool F)))) (App Equality (App (Opb Leq) (Var "v18") (Var "v12")) (Val (Lit (Bool F))))) (Con "Pair" [Var "v20"; Var "v16"]) (Let "v8" (App Opapp (App Opapp (Var "rel_gc_step") (Var "v21")) (Con "Pair" [Var "v20"; Con "Pair" [Var "v18"; Con "Pair" [Var "v16"; Con "Pair" [Var "v14"; Con "Pair" [Var "v12"; Con "Pair" [Var "v10"; Var "v9"]]]]]])) (Mat (Var "v8") [(Pcon "Pair" [Pvar "v7"; Pvar "v6"], Mat (Var "v6") [(Pcon "Pair" [Pvar "v5"; Pvar "v4"], Let "v3" (App Opapp (App Opapp (Var "rel_gc_loop") (Var "v21")) (Con "Pair" [Var "v7"; Con "Pair" [Var "v5"; Con "Pair" [Var "v4"; Con "Pair" [Var "v14"; Con "Pair" [Var "v12"; Con "Pair" [Var "v10"; Var "v9"]]]]]])) (Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Pair" [Var "v2"; Var "v1"])]))])]))))])])])])])]))] Dlet (Pvar "RANGE") (Fun "v3" (Fun "v4" (Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Log And (App (Opb Leq) (Var "v2") (Var "v4")) (App (Opb Lt) (Var "v4") (Var "v1")))]))) Dlet (Pvar "CUT") (Fun "v4" (Fun "v5" (Mat (Var "v4") [(Pcon "Pair" [Pvar "v3"; Pvar "v2"], Fun "v1" (If (App Opapp (App Opapp (Var "RANGE") (Con "Pair" [Var "v3"; Var "v2"])) (Var "v1")) (App Opapp (Var "v5") (Var "v1")) (Con "H_emp" [])))]))) Dlet (Pvar "rel_gc") (Fun "v27" (Fun "v28" (Mat (Var "v28") [(Pcon "Pair" [Pvar "v26"; Pvar "v25"], Mat (Var "v25") [(Pcon "Pair" [Pvar "v24"; Pvar "v23"], Mat (Var "v23") [(Pcon "Pair" [Pvar "v22"; Pvar "v21"], Mat (Var "v21") [(Pcon "Pair" [Pvar "v20"; Pvar "v19"], Mat (Var "v19") [(Pcon "Pair" [Pvar "v18"; Pvar "v17"], Let "v16" (Con "Pair" [Var "v26"; Con "Pair" [Var "v24"; Con "Pair" [Var "v22"; Var "v20"]]]) (Mat (Var "v16") [(Pcon "Pair" [Pvar "v15"; Pvar "v14"], Mat (Var "v14") [(Pcon "Pair" [Pvar "v13"; Pvar "v12"], Mat (Var "v12") [(Pcon "Pair" [Pvar "v11"; Pvar "v10"], Let "v9" (App Opapp (Var "rel_move_list") (Con "Pair" [Var "v18"; Con "Pair" [Var "v11"; Con "Pair" [Var "v17"; Con "Pair" [Var "v11"; Con "Pair" [Var "v10"; Con "Pair" [Var "v15"; Var "v13"]]]]]])) (Mat (Var "v9") [(Pcon "Pair" [Pvar "v8"; Pvar "v7"], Mat (Var "v7") [(Pcon "Pair" [Pvar "v6"; Pvar "v5"], Let "v4" (App Opapp (App Opapp (Var "rel_gc_loop") (Var "v27")) (Con "Pair" [Var "v11"; Con "Pair" [Var "v6"; Con "Pair" [Var "v5"; Con "Pair" [Var "v11"; Con "Pair" [Var "v10"; Con "Pair" [Var "v15"; Var "v13"]]]]]])) (Mat (Var "v4") [(Pcon "Pair" [Pvar "v3"; Pvar "v2"], Let "v1" (App Opapp (App Opapp (Var "CUT") (Con "Pair" [Var "v11"; Var "v3"])) (Var "v2")) (Con "Pair" [Var "v11"; Con "Pair" [Var "v3"; Con "Pair" [Var "v10"; Con "Pair" [Var "v15"; Con "Pair" [Var "v13"; Con "Pair" [Var "v8"; Var "v1"]]]]]]))]))])]))])])]))])])])])])))