Discrete Mathematics and Functional Programming
Author: Thomas VanDrunen
Copyright: 2012
Binding: Paperback
Page Count: 688
Security policy
Delivery policy
Return policy
Description:
E-BOOK available at RedShelf.com.
Visit the Web site for this book: http://cs.wheaton.edu/~tvandrun/dmfp
Video instruction to follow the book: https://www.youtube.com/channel/UC2XiZx1m7HaJUJ1WMU4zoSw
This book provides a distinct way to teach discrete mathematics. Since discrete mathematics is crucial for rigorous study in computer science, many texts include applications of mathematical topics to computer science or have selected topics of particular interest to computer science. This text fully integrates discrete mathematics with programming and other foundational ideas in computer science.
In fact, this text serves not only the purpose of teaching discrete math. It is also an introduction to programming, although a non-traditional one. Functional programming is a paradigm in which the primary language construct is the function—and function here is essentially the same as what it is in mathematics. In the functional paradigm we conceive the program as a collection of composed functions, as opposed to a sequence of instructions (in the imperative paradigm) or a set of interacting objects (in the object-oriented paradigm). Dominant computer science curricula emphasize object-oriented and imperative programming, but competence in all paradigms is important for serious programmers—and functional programming in particular may be appropriate for many casual programmers, too. For our purposes, the concepts underlying functional programming are especially grounded in those of discrete mathematics.
Discrete mathematics and functional programming are equal partners in this endeavor, with the programming topics giving concrete applications and illustrations of the mathematical topics, and the mathematics providing the scaolding for explaining the programming concepts. The two work together in mutual illumination.
Table of Contents:
Chapter 1 Foundations
1.1 Your mathematical biography
1.2 Reasoning about items collectively
1.3 Set notation
1.4 Set operations
1.5 Verifying facts about sets
1.6 Values, expressions, and types in ML
1.7 Characters and strings
1.8 Cardinality, disjointness, and partitions
1.9 Cartesian products
1.10 Making your own types
1.11 Making your own operations
1.12 Recursive functions
1.13 Statements and exceptions
1.14 Extended example: A cumulative song
1.15 Special topic: Comparison with object-oriented programming
Chapter 2 List
2.1 Lists
2.2 Functions on lists
2.3 Datatypes that use lists
2.4 Powersets
2.5 Case expressions and option types
2.6 Extended example: A language processor
2.7 Special topic: Lists vs. tuples vs. arrays
Chapter 3 Proposition
3.1 Forms
3.2 Symbols
3.3 Boolean values
3.4 Logical equivalence
3.5 Conditional propositions
3.6 Conditionals and natural language
3.7 Conditional expressions
3.8 Arguments
3.9 Using argument forms for deduction
3.10 Predicates
3.11 Quantification
3.12 Multiple quantifi cation
3.13 Quantifi cation and algorithms
3.14 Quantifi cation and arguments
3.15 Extended example: Verifying arguments automatically
3.16 Special topic: Quantifi cation and natural language
Chapter 4 Proof
4.1 General outline
4.2 Subset proofs
4.3 Set equality
4.4 Set emptiness
4.5 Conditional proofs
4.6 Integers
4.7 Biconditionals
4.8 Warnings
4.9 Case study: Powersets
4.10 From theorems to algorithms
4.11 Extended example: Solving games
4.12 Special topic: Russell’s paradox
Chapter 5 Relation
5.1 Defi nition
5.2 Representation
5.3 Image, inverse, and composition
5.4 Properties of relations
5.5 Equivalence relations
5.6 Computing transitivity
5.7 Transitive closure
5.8 Partial orders
5.9 Comparability and topological sort
5.10 Extended example: Unifi cation and resolution
5.11 Special topic: Representing relations
Chapter 6 Self Reference
6.1 Peano numbers
6.2 Trees
6.3 Mutual recursion
6.4 Structural induction
6.5 Mathematical induction
6.6 Mathematical induction on sets
6.7 Program correctness
6.8 Sorting
6.9 Iteration
6.10 Loop invariants
6.11 From theorems to algorithms, revisited
6.12 Extended example: Huff man encoding
6.13 Special topic: Recursion vs. iteration
Chapter 7 Function
7.1 Defi nition
7.2 Function equality
7.3 Functions as fi rst-class values
7.4 Images and inverse images
7.5 Map
7.6 Function properties
7.7 Inverse functions
7.8 Function composition
7.9 Cardinality
7.10 Counting
7.11 Permutations and combinations
7.12 Currying
7.13 Fixed-point iteration
7.14 Extended example: Modeling mathematical functions
7.15 Special topic: Countability
Chapter 8 Graph
8.1 Defi nition and terms
8.2 Propositions on graphs
8.3 Strolling about a graph
8.4 Isomorphisms
8.5 A garden of graphs
8.6 Representing graphs
8.7 Extended example: Graph algorithms
8.8 Special topic: Graph coloring
Chapter 9 Complexity Class
9.1 Recurrence relations
9.2 Complexity of algorithms
9.3 Analyzing sorting algorithms
9.4 Alternative examples of analyzing algorithms
9.5 Big-oh complexity classes
9.6 Big-theta and family
9.7 Properties of complexity classes
9.8 Tables
9.9 Memoization
9.10 Extended example: The Knapsack Problem
9.11 Special topic: P vs NP
Chapter 10 Lattice
10.1 Defi nition and terms
10.2 Propositions on lattices
10.3 Isomorphisms
10.4 Modular and distributive lattices
10.5 Implementing lattice operations
10.6 Boolean algebras
10.7 Special topic: Digital logic circuits
Chapter 11 Group
11.1 Preliminary terms
11.2 Defi nition
11.3 Isomorphisms
11.4 Subgroups
11.5 A garden of groups
11.6 Extended example: RSA encryption
Chapter 12 Automaton
12.1 Alphabets and languages
12.2 Deterministic finite automata
12.3 Nondeterminism
12.4 Regular expressions
12.5 Language model equivalence and limitations
12.6 Context-free grammars
12.7 Push-down automata
12.8 The lambda calculus
12.9 Hierarchies of computational models
12.10 Special topic: Computability
Appendix A Patterns for proofs