Text this: Horn clauses as an intermediate representation for program analysis and transformation.