A Bridge Anchored on Both Sides: Formal Deduction in Introductory CS, and Code Proofs in Discrete Math

There is a sharp disconnect between the programming and mathematical portions of the standard undergraduate computer science curriculum, leading to student misunderstanding about how the two are related. We propose connecting the subjects early in the curriculum---specifically, in CS1 and the introductory discrete mathematics course---by using formal reasoning about programs as a bridge between them. This article reports on Haverford and Grinnell College's experience in constructing the end points of this bridge between CS1 and discrete mathematics. Haverford's long-standing "3-2-1" curriculum introduces code reasoning in conjunction with introductory programming concepts, and Grinnell's discrete mathematics introduces code reasoning as a motivation for logic and formal deduction. Both courses present code reasoning in a style based on symbolic code execution techniques from the programming language community, but tuned to address the particulars of each course. These courses rely primarily on traditional means of proof authoring with pen-and-paper. This is unsatisfactory for students who receive no feedback until grading on their work and instructors who must shoulder the burden of interpreting students' proofs and giving useful feedback. To this end, we also describe the current state of Orca, an in-development proof assistant for undergraduate education that we are developing to address these issues in our courses. Finally, in teaching our courses, we have discovered a number of educational research questions about the effectiveness of code reasoning in bridging the gap between programming and mathematics, and the ability of tools like \orca to support this pedagogy. We pose these research questions as next steps to formalize our initial experiences in our courses with the hope of eventually generalizing our approaches for wider adoption.

[1]  Harry G. Mairson Programming language foundations of computation theory , 2000, SOEN.

[2]  Georges Gonthier,et al.  The Four Colour Theorem: Engineering of a Formal Proof , 2008, ASCM.

[3]  Juha Sorva,et al.  Notional machines and introductory programming education , 2013, TOCE.

[4]  Robert Hieb,et al.  The Revised Report on the Syntactic Theories of Sequential Control and State , 1992, Theor. Comput. Sci..

[5]  Barbara Liskov,et al.  Program Development in Java - Abstraction, Specification, and Object-Oriented Design , 1986 .

[6]  Marisa Exter,et al.  Exploring Experienced Professionals’ Reflections on Computing Education , 2012, TOCE.

[7]  M.N. Sastry,et al.  Structure and interpretation of computer programs , 1986, Proceedings of the IEEE.

[8]  Alan M. Turing,et al.  Computability and λ-definability , 1937, Journal of Symbolic Logic.

[9]  Udi Manber,et al.  Introduction to algorithms - a creative approach , 1989 .

[11]  Xavier Leroy,et al.  Formal verification of a realistic compiler , 2009, CACM.

[12]  Andrew N. Marshall,et al.  Tips for creating a block language with blockly , 2017, 2017 IEEE Blocks and Beyond Workshop (B&B).

[13]  Richard Scheines,et al.  Computer Environments for Proof Construction , 1994, Interact. Learn. Environ..

[14]  Benjamin C. Pierce Lambda, the ultimate TA: using a proof assistant to teach programming language foundations , 2009, ICFP.

[15]  V. Stavridou,et al.  Abstraction and specification in program development , 1988 .

[16]  Ana Pasztor,et al.  A conceptual approach to teaching induction for computer science , 2008, SIGCSE '08.

[17]  Matthias Felleisen,et al.  How to design programs: an introduction to programming and computing , 2001 .

[18]  Kathi Fisler,et al.  Evaluating the Tracing of Recursion in the Substitution Notional Machine , 2018, SIGCSE.

[19]  Thierry Coquand,et al.  The Calculus of Constructions , 1988, Inf. Comput..

[20]  John P. Dougherty,et al.  Use and assessment of a rigorous approach to CS1 , 2005 .

[21]  John Douglas Baker Characterizing students' difficulty with proof by mathematical induction , 1995 .

[22]  Daniel J. Velleman How to Prove It: A Structured Approach , 1994 .

[23]  Tobias Nipkow,et al.  A FORMAL PROOF OF THE KEPLER CONJECTURE , 2015, Forum of Mathematics, Pi.

[24]  Kathi Fisler,et al.  Assessing and Teaching Scope, Mutation, and Aliasing in Upper-Level Undergraduates , 2017, SIGCSE.

[25]  Peter-Michael Osera,et al.  Making induction meaningful, recursively (abstract only) , 2014, SIGCSE '14.

[26]  Peter-Michael Osera,et al.  ORC2A: A Proof Assistant for Undergraduate Education , 2017, SIGCSE.

[27]  Andrew J. Haven Automated proof checking in introductory discrete mathematics classes , 2013 .

[28]  Tim O'Shea,et al.  The black box inside the glass box: presenting computing concepts to novices , 1999, Int. J. Hum. Comput. Stud..

[29]  Peter-Michael Osera,et al.  A blocks-based language for program correctness proofs , 2017, 2017 IEEE Blocks and Beyond Workshop (B&B).

[30]  Jeremy Avigad,et al.  A Machine-Checked Proof of the Odd Order Theorem , 2013, ITP.