Software Abstractions, Revised Edition : Logic, Language, and Analysis by Danielgood condition no damage