(* This code extends 'mini_prelude'. *) Dlet (Pvar "empty") (Con "Nil" []) Dlet (Pvar "is_empty") (Fun "v3" (Mat (Var "v3") [(Pcon "Nil" [],Val (Lit (Bool T))); (Pcon "Cons" [Pvar "v2"; Pvar "v1"],Val (Lit (Bool F)))])) Dtype [(["a"],"tree", [("Node",[Tnum; Tvar "a"; Tapp [Tapp [Tvar "a"] "tree"] "list"])])] Dlet (Pvar "rank") (Fun "v4" (Mat (Var "v4") [(Pcon "Node" [Pvar "v3"; Pvar "v2"; Pvar "v1"],Var "v3")])) Dlet (Pvar "root") (Fun "v4" (Mat (Var "v4") [(Pcon "Node" [Pvar "v3"; Pvar "v2"; Pvar "v1"],Var "v2")])) Dlet (Pvar "link") (Fun "v8" (Fun "v9" (Fun "v10" (Fun "v7" (Mat (Var "v10") [(Pcon "Node" [Pvar "v6"; Pvar "v5"; Pvar "v4"], Mat (Var "v7") [(Pcon "Node" [Pvar "v3"; Pvar "v2"; Pvar "v1"], If (App Opapp (App Opapp (Var "v9") (App Opapp (Var "v8") (Var "v5"))) (App Opapp (Var "v8") (Var "v2"))) (Con "Node" [App (Opn Plus) (Var "v6") (Val (Lit (IntLit 1))); Var "v5"; Con "Cons" [Con "Node" [Var "v3"; Var "v2"; Var "v1"]; Var "v4"]]) (Con "Node" [App (Opn Plus) (Var "v6") (Val (Lit (IntLit 1))); Var "v2"; Con "Cons" [Con "Node" [Var "v6"; Var "v5"; Var "v4"]; Var "v1"]]))])]))))) Dletrec [("ins_tree","v3", Fun "v4" (Fun "v5" (Fun "v6" (Mat (Var "v6") [(Pcon "Nil" [],Con "Cons" [Var "v5"; Con "Nil" []]); (Pcon "Cons" [Pvar "v2"; Pvar "v1"], If (App (Opb Lt) (App Opapp (Var "rank") (Var "v5")) (App Opapp (Var "rank") (Var "v2"))) (Con "Cons" [Var "v5"; Con "Cons" [Var "v2"; Var "v1"]]) (App Opapp (App Opapp (App Opapp (App Opapp (Var "ins_tree") (Var "v3")) (Var "v4")) (App Opapp (App Opapp (App Opapp (App Opapp (Var "link") (Var "v3")) (Var "v4")) (Var "v5")) (Var "v2"))) (Var "v1")))]))))] Dlet (Pvar "insert") (Fun "v1" (Fun "v2" (Fun "v4" (Fun "v3" (App Opapp (App Opapp (App Opapp (App Opapp (Var "ins_tree") (Var "v1")) (Var "v2")) (Con "Node" [Val (Lit (IntLit 0)); Var "v4"; Con "Nil" []])) (Var "v3")))))) Dletrec [("merge","v8", Fun "v9" (Fun "v10" (Fun "v7" (Mat (Var "v10") [(Pcon "Nil" [], Mat (Var "v7") [(Pcon "Nil" [],Con "Nil" []); (Pcon "Cons" [Pvar "v2"; Pvar "v1"], Con "Cons" [Var "v2"; Var "v1"])]); (Pcon "Cons" [Pvar "v6"; Pvar "v5"], Mat (Var "v7") [(Pcon "Nil" [],Con "Cons" [Var "v6"; Var "v5"]); (Pcon "Cons" [Pvar "v4"; Pvar "v3"], If (App (Opb Lt) (App Opapp (Var "rank") (Var "v6")) (App Opapp (Var "rank") (Var "v4"))) (Con "Cons" [Var "v6"; App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v8")) (Var "v9")) (Var "v5")) (Con "Cons" [Var "v4"; Var "v3"])]) (If (App (Opb Lt) (App Opapp (Var "rank") (Var "v4")) (App Opapp (Var "rank") (Var "v6"))) (Con "Cons" [Var "v4"; App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v8")) (Var "v9")) (Con "Cons" [Var "v6"; Var "v5"])) (Var "v3")]) (App Opapp (App Opapp (App Opapp (App Opapp (Var "ins_tree") (Var "v8")) (Var "v9")) (App Opapp (App Opapp (App Opapp (App Opapp (Var "link") (Var "v8")) (Var "v9")) (Var "v6")) (Var "v4"))) (App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v8")) (Var "v9")) (Var "v5")) (Var "v3")))))])]))))] Dletrec [("remove_min_tree","x", Fun "x1" (Fun "x2" (Mat (Var "x2") [(Pcon "Nil" [],Raise Bind_error); (Pcon "Cons" [Pvar "v7"; Pvar "v6"], Mat (Var "v6") [(Pcon "Nil" [],Con "Pair" [Var "v7"; Con "Nil" []]); (Pcon "Cons" [Pvar "v5"; Pvar "v4"], Let "v3" (App Opapp (App Opapp (App Opapp (Var "remove_min_tree") (Var "x")) (Var "x1")) (Con "Cons" [Var "v5"; Var "v4"])) (Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], If (App Opapp (App Opapp (Var "x1") (App Opapp (Var "x") (App Opapp (Var "root") (Var "v7")))) (App Opapp (Var "x") (App Opapp (Var "root") (Var "v2")))) (Con "Pair" [Var "v7"; Con "Cons" [Var "v5"; Var "v4"]]) (Con "Pair" [Var "v2"; Con "Cons" [Var "v7"; Var "v1"]]))]))])])))] Dlet (Pvar "find_min") (Fun "v4" (Fun "v5" (Fun "v6" (Let "v3" (App Opapp (App Opapp (App Opapp (Var "remove_min_tree") (Var "v4")) (Var "v5")) (Var "v6")) (Mat (Var "v3") [(Pcon "Pair" [Pvar "v2"; Pvar "v1"], App Opapp (Var "root") (Var "v2"))]))))) Dlet (Pvar "delete_min") (Fun "v6" (Fun "v7" (Fun "v8" (Mat (App Opapp (App Opapp (App Opapp (Var "remove_min_tree") (Var "v6")) (Var "v7")) (Var "v8")) [(Pcon "Pair" [Pvar "v5"; Pvar "v4"], Mat (Var "v5") [(Pcon "Node" [Pvar "v3"; Pvar "v2"; Pvar "v1"], App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v6")) (Var "v7")) (App Opapp (Var "REVERSE") (Var "v1"))) (Var "v4"))])]))))