Example #1
0
def nicer_representation(asker, repr1, repr2, req):
    if (booleans.ask_firmly(asker, builtins.equal(req, irreducible())) or 
        booleans.ask_firmly(asker, builtins.equal(req, exposed_modifier()))):
        return asker.affirm()
    else:
        #FIXME I should do something much more sophisticated here
        return asker.deny()
def set_image(asker, new_value, k, key, value, other):
    if booleans.ask_firmly(asker, builtins.equal(k, key)):
        return asker.reply(answer=cons(key=key, value=new_value, other=other))
    else:
        return asker.reply(answer=cons(key=key, value=value,
            other=updates.update(updates.set_field(image(k), new_value), other)
        ))
Example #3
0
def orthogonal(asker, field1, field2):
    if booleans.ask_firmly(asker, builtins.equal(field1, field2)):
        return asker.reply(answer=T.no())
    result = orthogonality_tester.dispatch(asker, field1, field2)
    if result is not None: return result
    result = orthogonality_tester.dispatch(asker, field2, field1)
    if result is not None: return result
def cons_image(asker, k, key, value, other):
    if booleans.ask_firmly(asker, builtins.equal(k, key)):
        return asker.reply(answer=value)
    else:
        return asker.ask_tail(
            fields.get_field(image(k), other), 
            handler=asker.pass_through(not_found.head)
        )
Example #5
0
def convert(asker, value, req):
    starting_cost = asker.cost
    def check(x):
        return properties.check_firmly(asker, req, representations.quote(x))

    if check(value):
        return asker.reply(answer=value)

    #TODO in the long run we might want to leave properties in if they can simplify the conversion
    old_modifier = value.modifier
    stripped = value.simple_update(_modifier=properties.trivial())
    id = stripped.id
    result = None
    if (id, req.id) in conversion_cache:
        result = conversion_cache[(id, req.id)]
    if result is None:
        for form in synonyms[id]:
            if check(form):
                result = form
    if result is None:
        response = asker.ask(raw_convert(value, req))
        if response.has_answer():
            result = response.answer
        else:
            return asker.reply()
    synonyms[id].add(result)
    conversion_cache[(id, req.id)] = result
    #FIXME what an ugly hack; this sort of thing will hopefully be done automatically
    if (asker.cost - starting_cost > 30 and
            booleans.ask_firmly(asker, nicer_representation(
                representations.quote(value),
                representations.quote(result),
                req
            ))):
        asker.set_repr(value, representations.quote(result))
    return asker.reply(answer=properties.simple_add_modifier(result, old_modifier))
Example #6
0
def translate_field_across_setting(asker, to_translate, old_value, old, new, field, new_value):
    if booleans.ask_firmly(asker, fields.orthogonal(to_translate, field)):
        return asker.reply(answer=old_value)
    elif booleans.ask_firmly(asker, builtins.equal(to_translate, field)):
        return asker.reply(answer=new_value)
Example #7
0
def translate_field_across_application(asker, to_translate, old_value, old, new, field, update):
    if booleans.ask_firmly(asker, fields.orthogonal(to_translate, field)):
        return asker.reply(answer=old_value)
    elif booleans.ask_firmly(asker, builtins.equal(to_translate, field)):
        return asker.reply(answer=updates.update(update, field))
Example #8
0
def setter_stripper(asker, property, object, field, new_value):
    if booleans.ask_firmly(asker, builtins.equal(field, fields.modifier())):
        return asker.reply(value=keep_strip(keep=property))
Example #9
0
def strip_field_value(asker, property, object, update, field):
    property_field = property['field']
    if booleans.ask_firmly(asker, builtins.equal(field, property_field)):
        return asker.reply(value=keep_strip(keep=property))
Example #10
0
def application_stripper(asker, property, object, update, field):
    if booleans.ask_firmly(asker, builtins.equal(field, fields.modifier())):
        return asker.reply(value=keep_strip(keep=property))
Example #11
0
def infer_from_field_value(asker, to_infer, field, value):
    if booleans.ask_firmly(asker, builtins.equal(to_infer, field)):
        return asker.reply(answer=value)
    else:
        return asker.reply(value=unknown())
Example #12
0
def set_implication(asker, to_set, new_value, field):
    if booleans.ask_firmly(asker, builtins.equal(to_set, field)):
        return asker.reply(answer=field_value(to_set, new_value))
    else:
        return asker.reply(value=unknown())
Example #13
0
def check_firmly(asker, p, object):
    return booleans.ask_firmly(asker, check(p, object))