%0 Table {extract_type.Relation Any Any Any;extract_type_args.Relation Any Any Any;extract_types.Relation Any Any Any;find.Relation Any Any Any;get.Relation Any Any Any;has.Relation Any Any;init.Relation Any Any Any Any Any;new.Relation Any Any Any;prevs.Relation Any Any Any;push.Relation Any Any Any;push_alias.Relation Any Any Any Any;push_if_not_found.Relation Any Any Any;push_on.Relation Any String Any Any;push_var.Relation Any Any Any;set.Relation Any Any Any Any;update.Relation Any Any Any Any} % Op Functor;Eq Functor Any Any Any;And Functor Any Any;Lib Functor;Var Functor;F2 Functor;F Functor;Cons Functor;Info Functor;Rel Functor;TTable Functor;TList Functor;TArray Functor;Func Functor;ObjGet2 Functor;ObjGet Functor;Mutable Functor;Id Functor;Str Functor String;Num Functor Number;TNum Functor Number % module % 16 env4_16(_env,_l,_ts,_upvals):-_upvals=[_extract_type,_extract_type],((((true),(_l = [fc_Mutable(_f1)|[]],_ts = ['[|]'("Any",[])|['[|]'("Any",[])|[]]]);(_l = '[|]'(_f1,[]),_ts = '[|]'(_t,[]),call_cl(_extract_type,[_env,_f1,_t]);(_l = '[|]'(_f1,_tail),_ts = '[|]'(_t1,_t2),call_cl(_extract_type,[_env,_f1,_t1]),get_(_env,"extract_types",T112),_T111 = T112,call_cl(_T111,[_env,_tail,_t2]);_l = [],_ts = []))))). % 15 env4_15(_env,_l,_ts,_upvals):-_upvals=[_extract_type,_extract_type],((((true),(_l = '[|]'(_f1,_tail),_ts = '[|]'(_t1,_t2),call_cl(_extract_type,[_env,_f1,_t1]),get_(_env,"extract_types",T109),_T108 = T109,call_cl(_T108,[_env,_tail,_t2]));_l = [],_ts = []))). % 14 env4_14(_env,_name,_f,_upvals):-_upvals=[_Env,_debug],(call_cl(_debug,['[|]'("prev",'[|]'(_a,'[|]'(_f,[])))]),get_(_env,"prev",T101),_prev = T101,get_(_prev,"vars",T102),_vars = T102,get_(_Env,"find",T104),_T103 = T104,call_cl(_T103,[_vars,_f,_])). % 13 env4_13(_env,_s,_t,_upvals):-_upvals=[],(get_(_env,_s,T99),_t = T99). % 12 env4_12(_l,_a,_upvals):-_upvals=[_debug],(call_cl(_debug,['[|]'("find",'[|]'(_a,[]))]),get_(_env,"find",T97),_T96 = T97,call_cl(_T96,[_l,_a,_])). % 11 env4_11(_l,_a,_f,_upvals):-_upvals=[_debug],(call_cl(_debug,['[|]'("find",'[|]'(_a,'[|]'(_f,[])))]),_a = fc_Var(_name,_,_),get_(_l,_name,T94),_a = T94). % 10 env4_10(_env,_f,_env2,_upvals):-_upvals=[_set,_list],(get_(_env,"vars",T90),_vars = T90,_f = fc_Var(_name,_,_),(((get_(_list,"has",T92),_T91 = T92,call_cl(_T91,[_vars,fc_Var(_name,_,_)])),(_env2 = _env);call_cl(_set,[_env,"vars",[_f|_vars],_env2])))). % 9 env4_9(_env,_env2,_f,_upvals):-_upvals=[],(get_(_env,"push_on",T88),_T87 = T88,call_cl(_T87,[_env,"vars",_f,_env2])). % 8 env4_8(_env,_str,_f,_env2,_upvals):-_upvals=[_get],(get_(_env,"set",T84),_T83 = T84,call_cl(_get,[_env,_str,_T85]),call_cl(_T83,[_env,_str,[_f|_T85],_env2])). % 7 env4_7(_env,_name,_tc,_env2,_upvals):-_upvals=[_Env,_debug,_Env,_debug,_debug,_list,_debug],(_f2 = fc_Var(_name,_n2,_tc),_f = fc_Var(_name,_n2,_t1),get_(_env,"vars",T75),_l = T75,call_cl(_debug,["\n-"]),((get_(_list,"has",T77),_T76 = T77,call_cl(_T76,[_l,_f]))->(call_cl(_debug,[_l]),((_tc = _t1,_env2 = _env);(dif(_tc,_t1),call_cl(_debug,['[|]'("update",'[|]'(_name,'[|]'(_t1,'[|]'(_tc,[]))))]),get_(_Env,"push",T79),_T78 = T79,call_cl(_T78,[_env,_f2,_env2]))));(call_cl(_debug,['[|]'("-",'[|]'(_f,[]))]),((_n2 = "in",true);(dif(_n2,"in"),true)),_tc = _t1,get_(_Env,"push",T81),_T80 = T81,call_cl(_T80,[_env,_f,_env2])))). % 6 env4_6(_env,_s,_x,_env2,_upvals):-_upvals=[_table],(get_(_table,"set",T73),_T72 = T73,call_cl(_T72,[_env,_s,_x,_env2])). % 5 env4_5(_env,_name,_val,_env2,_upvals):-_upvals=[_table],(get_(_env,"alias",T64),_t = T64,get_(_table,"set",T67),_T66 = T67,call_cl(_T66,[_t,_name,_val,_T65]),_t2 = _T65,get_(_env,"set",T70),_T69 = T70,call_cl(_T69,[_env,"alias",_t2,_T68]),_env2 = _T68). % 4 env4_4(_env,_f,_env2,_upvals):-_upvals=[_table,_table],(_f = fc_Var(_name,_,_),get_(_table,"get",T56),_T55 = T56,call_cl(_T55,[_env,"vars",_T54]),_t = _T54,get_(_table,"set",T59),_T58 = T59,call_cl(_T58,[_t,_name,_f,_T57]),_t2 = _T57,get_(_env,"set",T62),_T61 = T62,call_cl(_T61,[_env,"vars",_t2,_T60]),_env2 = _T60). % 3 env4_3(_env,_vars,_fcs,_consts,_prev,_upvals):-_upvals=[_table,_table],(((get_(_prev,"types",T38),T38 = _t)->(true);(get_(_table,"new",T40),_T39 = T40,call_cl(_T39,[_t]))),get_(_table,"new",T42),_T41 = T42,call_cl(_T41,[_nil]),new(T43),set_(T43,"vars",_nil,T45),set_(T45,"alias",_nil,T46),set_(T46,"fcs",_fcs,T47),set_(T47,"types",_t,T48),set_(T48,"consts",_consts,T49),set_(T49,"upvals",[],T50),set_(T50,"branch",0.0,T51),set_(T51,"top",[],T52),set_(T52,"prev",_prev,T44),_env = T44). % 2 env4_2(_env,_fcs,_prev,_upvals):-_upvals=[_concat,_Env,_Env],(get_(_Env,"init",T36),_T35 = T36,call_cl(_T35,[_env_vars,[],_fcs,[],_prev]),call_cl(_concat,[_env_vars,_Env,_env])). % find env4_find(_l,_a,_i,_upvals):-_upvals=[],(_a = fc_Var(_name,_,_),get_(_l,_name,T30),_a = T30). % extract_type env4_extract_type(_env,_f,_type,_upvals):-_upvals=[_debug,_debug,_to_table_type,_table,_extract_type_id],(((_f = fc_Num(_s))->(_type = '[|]'("Number",[]));((_f = fc_Str(_))->(_type = '[|]'("String",[]));((_f = fc_Id(_name,_t1))->(call_cl(_extract_type_id,[_env,_f,_type,_info]));((_f = fc_TTable(_args))->(_type = '[|]'("Table",_t2),get_(_table,"new",T27),_T26 = T27,call_cl(_T26,[_t]),call_cl(_to_table_type,[_env,_args,_t,_t2]),call_cl(_debug,['[|]'("type-dict",'[|]'(_f,'[|]'(_type,[])))]));((_f = fc_TTable(_,_))->(_type = '[|]'("Table",[]));((_f = fc_Rel(_,_,_))->(_type = '[|]'("Relation",[]));((_f = fc_Rel(_args,_))->(call_cl(_debug,[_f]),get_(_env,"extract_types",T29),_T28 = T29,call_cl(_T28,[_env,_args,_t]),_type = '[|]'("Relation",_t));((_f = fc_Op(_,_,_,_))->(_type = '[|]'("Any",[]));(_type = '[|]'("Any",[]))))))))))). % extract_type_id env4_extract_type_id(_env,_f,_type,_info,_upvals):-_upvals=[_is_functor,_custom_throw,_debug,_gettype,_gettype,_has,_debug],(_f = fc_Id(_name,_t1),call_cl(_debug,['[|]'(_name,'[|]'(_t1,[]))]),((get_(_env,"vars",T25),call_cl(_has,[T25,fc_Var(_name,_,_t2)]))->(call_cl(_gettype,[_t1,_type1]),call_cl(_gettype,[_t2,_type2]),((_type2 = '[|]'("Any",[]))->(_type = _type1);((_type1 = '[|]'("Any",[]))->(call_cl(_debug,['[|]'("any",[])]),_type = _type2);((_type2 = _type1)->(_type = _type2);(writeln_('[|]'(_type2,'[|]'(_t1,[]))),call_cl(_custom_throw,["Variable defined with different types",_info]))))));((call_cl(_is_functor,[_name,_env]))->(_type = '[|]'("Functor",[]));((_name = "Cons")->(_type = '[|]'("List",[]));(def(_t1),((_t1 = [])->(_type = '[|]'("Any",[]));(_type = _t1))))))). % gettype env4_gettype(_t1,_type1,_upvals):-_upvals=[],(((_t1 = [],_type1 = '[|]'("Any",[]));(dif(_t1,[]),(_t1 = '[|]'("NonAlias",[]),_type1 = '[|]'("Any",[]));(dif(_t1,'[|]'("NonAlias",[])),_type1 = _t1)))). % to_table_type env4_to_table_type(_env,_l,_t,_t2,_upvals):-_upvals=[_debug,_set,_extract_type,_remove_double_string,_debug,_debug],(call_cl(_debug,['[|]'("set;",'[|]'(_l,[]))]),((_l = fc_And(_a,_b))->(throw("-"));((_l = fc_And(_a,_b,_))->(call(env4_to_table_type(_env,_a,_t,_t0),_upvals),call(env4_to_table_type(_env,_b,_t0,_t2),_upvals));((_l = fc_Eq(_a,_b,_info))->(call_cl(_debug,['[|]'("set;",'[|]'(_sa,'[|]'(_tb,[])))]),((_a = fc_Id(_sa,_))->(true);((_a = fc_Str(_s1))->(call_cl(_remove_double_string,[_s1,_sa]));(_sa = ""))),call_cl(_extract_type,[_env,_b,_tb]),call_cl(_set,[_t,_sa,_tb,_t2]),call_cl(_debug,['[|]'(_sa,'[|]'(_tb,[]))]));((_l = fc_Rel(_name,_args,_f1))->(call(env4_to_table_type(_env,fc_Eq(fc_Id(_name,[]),fc_Rel(_args,_f1),_),_t,_t2),_upvals));((_l = _True)->(_t2 = _t);(_t2 = _t,get_(_io,"writeln",T24),_T23 = T24,call_cl(_T23,[_l]),throw("unknown table type")))))))). % remove_double_string env4_remove_double_string(_s1,_sa,_upvals):-_upvals=[_string,_string],(get_(_string,"slice",T18),_T17 = T18,get_(_string,"size",T21),_T20 = T21,call_cl(_T20,[_s1,_T19]),{_T19-1.0=T22},call_cl(_T17,[_s1,1.0,T22,_sa])). % is_functor env4_is_functor(_name,_env,_upvals):-_upvals=[_list],(get_(_env,"fcs",T13),_fcs = T13,get_(_list,"find",T15),_T14 = T15,call_cl(_T14,[_fcs,fc_Var(_name,_n,_),_])). % has env4_has(_l,_a,_upvals):-_upvals=[],(_a = fc_Var(_name,_,_),get_(_l,_name,T12),_a = T12). % pause env4_pause(_upvals):-_upvals=[],(read(_x)). % debug env4_debug(_x,_upvals):-_upvals=[],(true). % custom_throw env4_custom_throw(_msg,_info,_upvals):-_upvals=[],(writeln_(_info),((ground(_info))->(_info = fc_Info(_line,_col),calc("(line "+_line,T1),calc(T1+", col ",T2),calc(T2+_col,T3),calc(T3+") ",T4),calc(T4+_msg,T5),str(T5,T6),throw(T6));(throw(_msg)))). % main env4(X):-_custom_throw = clos([],env4_custom_throw),_debug = clos([],env4_debug),_pause = clos([],env4_pause),creq1("list",_list,T7),call(T7,_list),creq1("table",_table,T8),call(T8,_table),creq1("types2",_types,T9),call(T9,_types),get_(_table,"set",T10),_set = T10,get_(_table,"get",T11),_get = T11,_has = clos([],env4_has),_is_functor = clos([_list],env4_is_functor),creq1("string",_string,T16),call(T16,_string),_remove_double_string = clos([_string,_string],env4_remove_double_string),_to_table_type = clos([_debug,_set,_extract_type,_remove_double_string,_debug,_debug],env4_to_table_type),_gettype = clos([],env4_gettype),_extract_type_id = clos([_is_functor,_custom_throw,_debug,_gettype,_gettype,_has,_debug],env4_extract_type_id),_extract_type = clos([_debug,_debug,_to_table_type,_table,_extract_type_id],env4_extract_type),_find = clos([],env4_find),get_(_table,"concat",T31),_concat = T31,new(T32),set_(T32,"new",clos([_concat,_Env,_Env],env4_2),T34),set_(T34,"init",clos([_table,_table],env4_3),T37),set_(T37,"push",clos([_table,_table],env4_4),T53),set_(T53,"push_alias",clos([_table],env4_5),T63),set_(T63,"set",clos([_table],env4_6),T71),set_(T71,"update",clos([_Env,_debug,_Env,_debug,_debug,_list,_debug],env4_7),T74),set_(T74,"push_on",clos([_get],env4_8),T82),set_(T82,"push_var",clos([],env4_9),T86),set_(T86,"push_if_not_found",clos([_set,_list],env4_10),T89),set_(T89,"find",clos([_debug],env4_11),T93),set_(T93,"has",clos([_debug],env4_12),T95),set_(T95,"get",clos([],env4_13),T98),set_(T98,"prevs",clos([_Env,_debug],env4_14),T100),set_(T100,"extract_types",clos([_extract_type,_extract_type],env4_15),T105),set_(T105,"extract_type_args",clos([_extract_type,_extract_type],env4_16),T110),set_(T110,"extract_type",_extract_type,T33),_Env = T33,X=_Env.