(* This code extends 'mini_prelude'. *) Dtype [(["a"],"heap", [("Tree", [Tapp [Tvar "a"] "heap"; Tvar "a"; Tapp [Tvar "a"] "heap"]); ("Empty",[])])] Dlet (Pvar "empty") (Con "Empty" []) Dlet (Pvar "is_empty") (Fun "v4" (Mat (Var "v4") [(Pcon "Empty" [],Val (Lit (Bool T))); (Pcon "Tree" [Pvar "v3"; Pvar "v2"; Pvar "v1"], Val (Lit (Bool F)))])) Dletrec [("partition","v22", Fun "v23" (Fun "v24" (Fun "v25" (Mat (Var "v25") [(Pcon "Empty" [], Con "Pair" [Con "Empty" []; Con "Empty" []]); (Pcon "Tree" [Pvar "v21"; Pvar "v20"; Pvar "v19"], If (App Opapp (App Opapp (Var "v23") (App Opapp (Var "v22") (Var "v20"))) (App Opapp (Var "v22") (Var "v24"))) (Mat (Var "v19") [(Pcon "Empty" [], Con "Pair" [Con "Tree" [Var "v21"; Var "v20"; Var "v19"]; Con "Empty" []]); (Pcon "Tree" [Pvar "v9"; Pvar "v8"; Pvar "v7"], If (App Opapp (App Opapp (Var "v23") (App Opapp (Var "v22") (Var "v8"))) (App Opapp (Var "v22") (Var "v24"))) (Let "v3" (App Opapp (App Opapp (App Opapp (App Opapp (Var "partition") (Var "v22")) (Var "v23")) (Var "v24")) (Var "v7")) (Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Pair" [Con "Tree" [Con "Tree" [Var "v21"; Var "v20"; Var "v9"]; Var "v8"; Var "v2"]; Var "v1"])])) (Let "v6" (App Opapp (App Opapp (App Opapp (App Opapp (Var "partition") (Var "v22")) (Var "v23")) (Var "v24")) (Var "v9")) (Mat (Var "v6") [(Pcon "Pair" [Pvar "v5"; Pvar "v4"], Con "Pair" [Con "Tree" [Var "v21"; Var "v20"; Var "v5"]; Con "Tree" [Var "v4"; Var "v8"; Var "v7"]])])))]) (Mat (Var "v21") [(Pcon "Empty" [], Con "Pair" [Con "Empty" []; Con "Tree" [Var "v21"; Var "v20"; Var "v19"]]); (Pcon "Tree" [Pvar "v18"; Pvar "v17"; Pvar "v16"], If (App Opapp (App Opapp (Var "v23") (App Opapp (Var "v22") (Var "v17"))) (App Opapp (Var "v22") (Var "v24"))) (Let "v12" (App Opapp (App Opapp (App Opapp (App Opapp (Var "partition") (Var "v22")) (Var "v23")) (Var "v24")) (Var "v16")) (Mat (Var "v12") [(Pcon "Pair" [Pvar "v11"; Pvar "v10"], Con "Pair" [Con "Tree" [Var "v18"; Var "v17"; Var "v11"]; Con "Tree" [Var "v10"; Var "v20"; Var "v19"]])])) (Let "v15" (App Opapp (App Opapp (App Opapp (App Opapp (Var "partition") (Var "v22")) (Var "v23")) (Var "v24")) (Var "v18")) (Mat (Var "v15") [(Pcon "Pair" [Pvar "v14"; Pvar "v13"], Con "Pair" [Var "v14"; Con "Tree" [Var "v13"; Var "v17"; Con "Tree" [Var "v16"; Var "v20"; Var "v19"]]])])))]))]))))] Dlet (Pvar "insert") (Fun "v4" (Fun "v5" (Fun "v7" (Fun "v6" (Let "v3" (App Opapp (App Opapp (App Opapp (App Opapp (Var "partition") (Var "v4")) (Var "v5")) (Var "v7")) (Var "v6")) (Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Tree" [Var "v2"; Var "v7"; Var "v1"])])))))) Dletrec [("merge","v8", Fun "v9" (Fun "v10" (Fun "v7" (Mat (Var "v10") [(Pcon "Empty" [],Var "v7"); (Pcon "Tree" [Pvar "v6"; Pvar "v5"; Pvar "v4"], Let "v3" (App Opapp (App Opapp (App Opapp (App Opapp (Var "partition") (Var "v8")) (Var "v9")) (Var "v5")) (Var "v7")) (Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], Con "Tree" [App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v8")) (Var "v9")) (Var "v2")) (Var "v6"); Var "v5"; App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v8")) (Var "v9")) (Var "v1")) (Var "v4")])]))]))))] Dletrec [("find_min","x", Mat (Var "x") [(Pcon "Empty" [],Raise Bind_error); (Pcon "Tree" [Pvar "v6"; Pvar "v5"; Pvar "v4"], Mat (Var "v6") [(Pcon "Empty" [],Var "v5"); (Pcon "Tree" [Pvar "v3"; Pvar "v2"; Pvar "v1"], App Opapp (Var "find_min") (Con "Tree" [Var "v3"; Var "v2"; Var "v1"]))])])] Dletrec [("delete_min","x", Mat (Var "x") [(Pcon "Empty" [],Raise Bind_error); (Pcon "Tree" [Pvar "v9"; Pvar "v8"; Pvar "v7"], Mat (Var "v9") [(Pcon "Empty" [],Var "v7"); (Pcon "Tree" [Pvar "v6"; Pvar "v5"; Pvar "v4"], Mat (Var "v6") [(Pcon "Empty" [], Con "Tree" [Var "v4"; Var "v8"; Var "v7"]); (Pcon "Tree" [Pvar "v3"; Pvar "v2"; Pvar "v1"], Con "Tree" [App Opapp (Var "delete_min") (Con "Tree" [Var "v3"; Var "v2"; Var "v1"]); Var "v5"; Con "Tree" [Var "v4"; Var "v8"; Var "v7"]])])])])]