Logic for Applications by Anil Nerode & Richard A. Shore