Construct expressions over fact types, then turn those expressions into a result given a set of source facts.