CSC/ISC 221 - Foundations of Computer Science

I. COURSE NUMBER AND CREDIT:

		 CSC/ISC 221 - 3 S.H.

II. COURSE TITLE:

        Foundations of Computer Science

III. COURSE DESCRIPTION:

        This course will provide students with a broad
        perspective of computer science and will acquaint
        them with various formal systems on which modern
        computer science is based.  Students will study the
        structure and interpretation of four classes of
        abstract computing machine

IV. PREREQUISITES:

        CSC 212 - Principles of Computing

V. JUSTIFICATION:

        There is a need to provide students with a broad
        perspective of computer science, which they do not
        derive from any other single computer science course.
        There is a need to acquaint students with various
        formal systems on which modern computer science is
        based.  One section of this class will be taught each
        semester to classes of size thirty-two.  This course 
       is required for CS majors.

VI. COURSE OBJECTIVES:

        As a result of this course, students will be able to:
        1.  Understand concepts needed for Functional
            programming, Imperative programming, and Object
            Oriented programming.
        2.  Understand recursion.
        3.  Read syntax diagrams.

VII. COURSE OUTLINE:

        A.  Foundations of Functional Programming
            1.  Sets:  subsets; power sets; Cartesian
                products; basic algebra of sets.
            2.  Functions:  definitions; examples with
                interesting domains and co-domains;
                injections, surjections, bijections;
                composition; inverse functions.
            3.  Induction and recursion.
            4.  Syntax and semantics of a simple strongly
                typed functional programming language
                (FPL).
            5.  Programming in the FPL (simple, rich
                examples).
            6.  Close examination of function application
                in the FPL context.  Argument passing,
                return of values; composition, evaluation
                strategies. 
            7.  Induction and recursion in the FPL context.
            8.  Formal specification; verification.
        B.  Foundations of Imperative Programming
            1.  Alphabets; strings of alphabetic symbols;
                languages (sets of strings).
            2.  Phrase-Structure Grammars.
            3.  Regular Languages and Finite-State Automata
            4.  Regular Sets
            5.  More general languages (including context
                free) and machines (including Turing
                machines).
            6.  Applications:  Programming language
                definition (token level and statement level);
                programming language interpretation;
                combinational networks; augmented transition
                networks and natural language understanding,
                computability.
        C.  Foundations of Object Oriented Programming
            1.  Objects and Operators (imaginative
                examples).
            2.  Algebraic System Fundamentals and
                Examples.
            3.  Examples from Mathematics.
                a.  Abstract Examples:  Groups; Rings.
                b.  Concrete Examples:  Boolean Algebras;
                    Matrix Algebras.
            4.  Abstract Data Types
                a.  Formal specification.
                b.  Realization in, say, the FPL of I.
                c.  Application to software construction.
            5.  Modeling and Inheritance:
                a.  Definition of relations isa and
                    partof.
                b.  Recursive processing of isa and
                    partof.
                c.  Application to data modeling and

                    and artificial intelligence.

VIII. METHODS OF INSTRUCTION:

        Lectures, discussion, and classroom demonstration.

IX. COURSE REQUIREMENTS:

        Assigned readings, papers, and projects.

X. MEANS OF EVALUATION:

        Problem sets and examinations.

XI. RESOURCES:

        No additional resources needed.

XII. BIBLIOGRAPHY:

        Aho, A. & Ullman J. (1992). Foundations of Computer
        Science, New York, Computer Science.
        Graham R. & Knuth D. & Patashnick O. (1989). Concrete
        Mathematics, Reading, MA, Addison-Wesley.
        Henderson, P (1980). Functional Programming,
        Englewood Cliffs, N.J., Prentice-Hall.
        Davis, D. and Weyuker, E (1983). Computability,
        Complexity, and Languages, New York, Academic Press.
        Wos, L., Overbeek, R., Lusk, E., and Boyle, J (1984).
        Automated Reasoning. Englewood Cliffs, N.J.,
        Prentice-Hall.