This is a textbook authored by Konstantine Arkoudas and David Musser that provides in-depth coverage of logic, proof development with applications to data structures, algorithms, theorem proving, programming language semantics, and more.
More information about the textbook can be found on the book's dedicated website.