Module("strategy/general/free-variables",[Imports([ImportWildcard("collection/list")]),Strategies([SDef("free-vars",[DefaultVarDec("getvars"),DefaultVarDec("boundvars")],Rec("x",LChoice(CallNoArgs(SVar("getvars")),Seq(Call(SVar("split"),[Call(SVar("crush"),[Build(NoAnnoList(List([]))),CallNoArgs(SVar("union")),CallNoArgs(SVar("x"))]),LChoice(CallNoArgs(SVar("boundvars")),Build(NoAnnoList(List([]))))]),CallNoArgs(SVar("diff")))))),SDef("free-vars",[DefaultVarDec("getvars"),DefaultVarDec("boundvars"),VarDec("boundin",FunType([FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),ConstType(SortVar("term"))],ConstType(SortVar("term"))))],Rec("x",LChoice(CallNoArgs(SVar("getvars")),LChoice(Seq(Scope(["vs"],Seq(Where(AM(CallNoArgs(SVar("boundvars")),Var("vs"))),Call(SVar("boundin"),[Seq(Call(SVar("split"),[CallNoArgs(SVar("x")),Build(Var("vs"))]),CallNoArgs(SVar("diff"))),CallNoArgs(SVar("x")),Build(NoAnnoList(List([])))]))),Call(SVar("crush"),[Build(NoAnnoList(List([]))),CallNoArgs(SVar("union")),Id])),Call(SVar("crush"),[Build(NoAnnoList(List([]))),CallNoArgs(SVar("union")),CallNoArgs(SVar("x"))]))))),SDef("free-vars",[DefaultVarDec("getvars"),DefaultVarDec("boundvars"),VarDec("boundin",FunType([FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),ConstType(SortVar("term"))],ConstType(SortVar("term")))),DefaultVarDec("eq")],Rec("x",LChoice(CallNoArgs(SVar("getvars")),LChoice(Seq(Scope(["vs"],Seq(Where(AM(CallNoArgs(SVar("boundvars")),Var("vs"))),Call(SVar("boundin"),[Seq(Call(SVar("split"),[CallNoArgs(SVar("x")),Build(Var("vs"))]),Call(SVar("diff"),[CallNoArgs(SVar("eq"))])),CallNoArgs(SVar("x")),Build(NoAnnoList(List([])))]))),Call(SVar("crush"),[Build(NoAnnoList(List([]))),CallNoArgs(SVar("union")),Id])),Call(SVar("crush"),[Build(NoAnnoList(List([]))),CallNoArgs(SVar("union")),CallNoArgs(SVar("x"))])))))]),Strategies([SDef("free-vars2",[DefaultVarDec("getvars"),DefaultVarDec("boundvars")],Rec("x",Seq(Call(SVar("split"),[LChoice(CallNoArgs(SVar("getvars")),Build(NoAnnoList(List([])))),Seq(Call(SVar("split"),[Call(SVar("crush"),[Build(NoAnnoList(List([]))),CallNoArgs(SVar("union")),CallNoArgs(SVar("x"))]),LChoice(CallNoArgs(SVar("boundvars")),Build(NoAnnoList(List([]))))]),CallNoArgs(SVar("diff")))]),CallNoArgs(SVar("union"))))),SDef("free-vars2",[DefaultVarDec("getvars"),DefaultVarDec("boundvars"),VarDec("boundin",FunType([FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),ConstType(SortVar("term"))],ConstType(SortVar("term"))))],Rec("x",Seq(Call(SVar("split"),[LChoice(CallNoArgs(SVar("getvars")),Build(NoAnnoList(List([])))),LChoice(Seq(Scope(["vs"],Seq(Where(AM(CallNoArgs(SVar("boundvars")),Var("vs"))),Call(SVar("boundin"),[Seq(Call(SVar("split"),[CallNoArgs(SVar("x")),Build(Var("vs"))]),CallNoArgs(SVar("diff"))),CallNoArgs(SVar("x")),Build(NoAnnoList(List([])))]))),Call(SVar("crush"),[Build(NoAnnoList(List([]))),CallNoArgs(SVar("union")),Id])),Call(SVar("crush"),[Build(NoAnnoList(List([]))),CallNoArgs(SVar("union")),CallNoArgs(SVar("x"))]))]),CallNoArgs(SVar("union"))))),SDef("free-vars2",[DefaultVarDec("getvars"),DefaultVarDec("boundvars"),VarDec("boundin",FunType([FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),FunType([ConstType(SortVar("term"))],ConstType(SortVar("term"))),ConstType(SortVar("term"))],ConstType(SortVar("term")))),DefaultVarDec("eq")],Rec("x",Seq(Call(SVar("split"),[LChoice(CallNoArgs(SVar("getvars")),Build(NoAnnoList(List([])))),LChoice(Scope(["vs"],Seq(Where(AM(CallNoArgs(SVar("boundvars")),Var("vs"))),Seq(Call(SVar("boundin"),[Seq(Call(SVar("split"),[CallNoArgs(SVar("x")),Build(Var("vs"))]),Call(SVar("diff"),[CallNoArgs(SVar("eq"))])),CallNoArgs(SVar("x")),Build(NoAnnoList(List([])))]),Call(SVar("crush"),[Build(NoAnnoList(List([]))),CallNoArgs(SVar("union")),Id])))),Call(SVar("crush"),[Build(NoAnnoList(List([]))),CallNoArgs(SVar("union")),CallNoArgs(SVar("x"))]))]),CallNoArgs(SVar("union")))))])])
