# input: a Polar policy, a set of facts, and a query fact fn evaluate(policy, facts, query): do { new_facts = {} for rule in policy.rules { new_facts += apply(facts, rule) - facts } facts += new_facts } while new_facts.is_not_empty() return facts.contains(query)