Logic for the computer sciences
In the usual college curriculum of today, one finds courses in logic concentrated primarily in three areas--philosophy, mathenmtics and electrical engineering. The philosopher is concerned to a large extent with logic in language---the formulation of logical arguments, the semantics of the logical connectives and the application of logical principles to everyday discourse. With this emphasis, logical symbols are a convenience rather than a necessity. The mathematician, on the other hand, is distinctly interested in the symbols and their relationships. Mathematical logic is highly abstract and algebraic. One might in fact criticize mathematical logic courses in that they make little attempt to apply and relate logic to other areas of mathematics. The electrical engineer is perhaps most directly opposite to the philosopher, since for him the philosophical logic is largely irrelevant. The symbols and their algebraic manipulation are what prove of use in circuit design and analysis. Engineering logic is indeed applied, but often quite rudimentaI3, from the mathematician's view. In developing a sequence of courses in logic for a computer science curriculum, it is appropriate that we plan the sequence to include exposure to all of the above areas. The objective should be to give the student a good background in all areas of logic which are now relevant to the computing sciences and those which will apparently become relevant within a few years. At the same time, we should avoid prolonged emphasis on those areas of logic which are more properly the concern of another discipline. Thus we should emphasize the linguistic aspects of logic since we do design assembly and compiler languages, and we do formulate algorithms. But we should not be concerned with the analysis of the classical logical syllogisms and their recognition in ordinary language. We should delve quite deeply into symbolic and algebraic logic since the computer is a symbol manipulator and since the algebra of our logic is reflected moreor-less directly in the design of computer software and hardware. But at present one should probably not spend a great deal of time on the various concepts of completeness, consistency, etc., on intuitionism, on modal logics and other such topics. We should discuss the realization of computer functions with various types of logical elements and spend some time on the associated problems of timing and minimization since we are in fact concerned with actual computers. But it is undoubtedly better left to other departments to teach the electronics and physics involved in this realization, and a computer science course in logical design should probably stop at the logical elements without discussing their exact physical form.