Exemplo n.º 1
0
def z_combinator_fun(ftype):
    # does not check types...
    left_type = ftype.left
    g_type = types.FunType(types.type_e, left_type)
    body = meta.term("f", ftype)(meta.term("g", g_type)(meta.term("x", types.type_e)))(meta.term("x", types.type_e))
    comb = meta.LFun(ftype, meta.LFun(g_type, meta.LFun(types.type_e, body, varname="x"),varname="g"),varname="f")
    return comb
Exemplo n.º 2
0
def build_geach_combinator(gtype, ftype):
    body = meta.term("g", gtype)(meta.term("f", ftype)(meta.term("x", ftype.left)))
    combinator = meta.LFun(gtype,
                           meta.LFun(ftype,
                                     meta.LFun(ftype.left, body, varname="x"),
                                     varname="f"),
                           varname="g")
    return combinator
Exemplo n.º 3
0
def lift(arg, ltype):
    larg_type = types.FunType(arg.type, ltype)
    combinator = meta.LFun(
        arg.type,
        meta.LFun(larg_type,
                  meta.term("g", larg_type)(meta.term("f", arg.type)), "g"),
        "f")
    result = combinator(arg).reduce_all()
    return result
Exemplo n.º 4
0
def build_geach_combinator(gtype, ftype):
    body = meta.term("g", gtype)(meta.term("f",
                                           ftype)(meta.term("x", ftype.left)))
    combinator = meta.LFun(gtype,
                           meta.LFun(ftype,
                                     meta.LFun(ftype.left, body, varname="x"),
                                     varname="f"),
                           varname="g")
    return combinator
Exemplo n.º 5
0
def z_combinator_fun(ftype):
    # does not check types...
    left_type = ftype.left
    g_type = types.FunType(types.type_e, left_type)
    body = meta.term("f", ftype)(meta.term("g", g_type)(meta.term(
        "x", types.type_e)))(meta.term("x", types.type_e))
    comb = meta.LFun(ftype,
                     meta.LFun(g_type,
                               meta.LFun(types.type_e, body, varname="x"),
                               varname="g"),
                     varname="f")
    return comb
Exemplo n.º 6
0
def lift(arg, ltype):
    larg_type = types.FunType(arg.type, ltype)
    combinator = meta.LFun(arg.type, meta.LFun(larg_type,
        meta.term("g", larg_type)(meta.term("f", arg.type)), "g"), "f")
    result = combinator(arg).reduce_all()
    return result