Discrete Mathematics for Computer Science, Some Notes

Jean Gallier
DOI: https://doi.org/10.48550/arXiv.0805.0585
2008-05-06
Abstract:These are notes on discrete mathematics for computer scientists. The presentation is somewhat unconventional. Indeed I begin with a discussion of the basic rules of mathematical reasoning and of the notion of proof formalized in a natural deduction system ``a la Prawitz''. The rest of the material is more or less traditional but I emphasize partial functions more than usual (after all, programs may not terminate for all input) and I provide a fairly complete account of the basic concepts of graph theory.
Discrete Mathematics,Logic in Computer Science
What problem does this paper attempt to address?
The problems that this paper attempts to solve are several key challenges faced by computer science students in the discrete mathematics course. Specifically: 1. **Vague concept of proof**: Most students have a poor understanding of what a proof is and why strict proof is required. This leads to their inability to fully understand and ensure the correctness of programs when writing complex programs. 2. **Insufficient basic math skills**: Although many computer science graduates seem to rarely need to use math skills in their work, the author believes that basic math knowledge is crucial for analyzing the complexity of programs and understanding the correctness of algorithms. 3. **Unclear basic rules of logic and reasoning**: When students perform mathematical reasoning, they often lack a clear understanding of basic logical rules. Therefore, the author hopes to clarify these rules through a formal natural deduction system, enabling students to understand the proof process more clearly. 4. **Unclear concepts of functions and partial functions**: Students usually do not have a deep enough understanding of functions and partial functions, and these concepts are very important in computer science because a program may not terminate for all inputs. 5. **Difficulties in understanding induction and recursive definitions**: Induction and recursive definitions are important concepts in computer science, but many students have difficulties in understanding these concepts. The author helps students overcome this obstacle by explaining these concepts in detail and providing a proof of the validity of the induction principle. 6. **Lack of basic knowledge in combinatorics and graph theory**: Although students in different fields require different mathematical backgrounds, combinatorics and graph theory are generally important basic knowledge in computer science. The author provides a detailed introduction to these fields in this paper. Overall, this paper aims to help computer science students establish a solid mathematical foundation by systematically introducing the basic concepts and methods of discrete mathematics, so as to better understand and solve problems in actual programming and algorithm design.