Intended for first- or second-year undergraduates, this introduction to discrete mathematics covers the usual topics of such a course, but applies constructivist principles that promote - indeed, require - active participation by the student. Working with the programming language ISETL, whose syntax is close to that of standard mathematical language, the student constructs the concepts in her or his mind as a result of constructing them on the computer in the syntax of ISETL. This dramatically different approach allows students to attempt to discover concepts in a "Socratic" dialog with the computer. The discussion avoids the formal "definition-theorem" approach and promotes active involvement by the reader by its questioning style. An instructor using this text can expect a lively class whose students develop a deep conceptual understanding rather than simply manipulative skills. Topics covered in this book include: the propositional calculus, operations on sets, basic counting methods, predicate calculus, relations, graphs, functions, and mathematical induction.