Principles of Computer Science by Donald R. Franceschetti