def use_rules(values, instances, rules, find_out=None, track_rules=None):
    """Apply rules to derive new facts; returns True if any rule succeeded."""
    
    # Note that we can't simply iterate over the rules and try applying them
    # until one succeeds in finding new values--we have to apply them all,
    # because any of them could decrease the certainty of a condition, and stopping
    # early could lead to fault conclusions.  This differs from Prolog, where
    # only new truths are deduced.
    
    return any([rule.apply(values, instances, find_out, track_rules) for rule in rules])