def exposed_modifier(asker, rep): head = asker.ask(fields.get_field(representations.head(), rep)).answer if head is None: return asker.reply(answer=T.no()) else: result = strings.to_str(asker, head) not in hidden_modifier_heads return asker.reply(answer=T.from_bool(result))
def deny(self): return self.reply(answer=T.from_bool(False))
def affirm(self): return self.reply(answer=T.from_bool(True))
def both(asker, a, b): for x in [a, b]: if not to_bool(asker, x): return asker.reply(answer=T.from_bool(False)) return asker.reply(answer=T.from_bool(True))
def either(asker, a, b): for x in [a, b]: if to_bool(asker, x): return asker.reply(answer=T.from_bool(True)) return asker.reply(answer=T.from_bool(False))
def irreducible(asker, rep): head = asker.ask(fields.get_field(representations.head(), rep)).firm_answer result = strings.to_str(asker, head) not in reducible_heads return asker.reply(answer=T.from_bool(result)) #FIXME this is much cleaner, but too slow; at any rate could remove duplicate code return asker.ask_tail(properties.check(opposite(reducible()), rep))
def check_trivial_default(asker, property): if properties.check_firmly(asker, irreducible(), property): return asker.reply(answer=T.from_bool(False))
def reducible(asker, rep): head = asker.ask(fields.get_field(representations.head(), rep)).firm_answer result = strings.to_str(asker, head) in reducible_heads return asker.reply(answer=T.from_bool(result))
def trivial_is_trivial(asker): return asker.reply(answer=T.from_bool(True))
def trivial(asker, object): return asker.reply(answer=T.from_bool(True))
def give_up(asker, m): return T.from_bool(False)
def direct_inference(asker): return T.from_bool(True)