Programming with Higher-Order Logic by Dale Miller & Gopalan Nadathur