An introduction to formal logic, covering propositional and predicate logic, natural deduction, truth tables, models, and metatheory, with applications to philosophical reasoning.

Lecture Times

Days
Monday
Time
1:20-2:40
Location
Frick B01

Course Instructors

Hans Halvorson
Course Instructor

Teaching Assistants

Junyan Jiang
Preceptor
Jake Khawaja
Preceptor
Jaehyun Hong
Preceptor
Christopher Hughes
Preceptor
Quanzhi Liang
Preceptor
Pacy Yan
Preceptor
About this course

The goal of this course is not to produce a product. Rather, it is to improve the ways that you think.

Logic is the oldest and most foundational of the university disciplines — having been taught every year for at least a thousand years. The goal is to equip you with most general possible framework for sound and rigorous reasoning — one that will support you in any intellectual activity you pursue (e.g. mathematics, politics, chemistry, English literature, law, religion, etc.). What’s more, logic aspires to be independent of the quirks of a particular natural language, programming language, or mathematical system. In this sense, logic aims to to capture that which is universally rational. (We might argue later about the extent to which logic is universal, but we will have to use logic to do that!)

While this subject has been taught for over a millenium, the content got an overhaul in the mid 1900s, when modern symbolic logic was consolidated. (The content has been stable since the 1950s.) Since then, the standard format for an introductory logic class has been to learn the “predicate calculus” in three steps: propositional logic, monadic predicate logic, polyadic predicate logic. We follow this same outline, but with a few twists.

  1. We emphasize reasoning techniques (natural deduction) over calculational techniques (truth tables or trees).
  2. We teach proofs before truth tables. It’s harder, but makes your brain stronger.
  3. We incorporate more analysis of arguments in natural language (e.g. argument mapping).
  4. We illustrate logical concepts, when helpful, by displaying them concretely in the general framework of functional programming languages. However, this course presupposes no background in programming, nor does it presuppose that students are interested in programming.
Logistics
  • One 80 minute lecture, and one 80 minute “workshop” (i.e. precept) each week
  • Problem sets approximately every week (20% of grade). Drafts of all psets are linked to this page. However, the official pset is not released until seven days before the due date. One pset may be dropped.
  • In class midterm exam, Monday of midterms week (25% of grade)
  • In precept quiz (10% of grade)
  • In class final exam (40% of grade)
  • Engagement and participation (5% of grade)
  • We are unable to accept late homework, except in case of a documented medical or family emergency.
Recommended work protocol
  1. Weekend before lecture
    1. Look over next problem set
    2. Skim relevant section of text
  2. Monday: Attend lecture and take notes
  3. Between lecture and precept
    1. Read text more closely
    2. Work on pset
    3. Look at feedback on previous week’s pset
  4. Wednesday: Attend precept
    1. Review previous week’s pset
    2. Work on this week’s pset
  5. Optionally: visit preceptor’s office hours
  6. Friday: submit pset
Academic integrity

The policy for this course is that collaboration between students is encouraged, but in no case should one student copy another’s work. That is hardly a precise criterion, but the spirit of the law is that you need to understand what you write down on your paper. If you fail to do that, then your lack of understanding will most likely reveal itself on the exam. As a general rule, we would suggest that you put away any notes from joint brainstorming sessions before writing your final answers.

Please note that LLMs (e.g. ChatGPT) are not exemplars of rigorous logical reasoning – which is precisely the skill that we will be teaching (and testing) in this course. For example, ChatGPT has insisted to me that Peirce’s law can be proven constructively (which it provably cannot be). If you use AI, don’t assume that it’s correct about logic.

Notes for instructors (retrospective)
  • AIs can solve many logic problems now, especially translation from English to symbolic language. If our goal is to instill ability into students, then we must avoid giving them assignments that they are tempted to have an AI solve. In the past, I’ve made take-home problem sets bear most of the weight of the course grade. That approach no longer makes sense (in a world where students are not infinitely self-disciplined and motivated to learn the material).
  • I still don’t think there is an ideal “system” to teach logical reasoning. I eschew trees, as they don’t involve any “deducing” or “supposing”, which are skills I want to teach. I really like Fitch-style proofs, but they are meta-theoretically opaque. That’s why I use the style pioneered by E.J. Lemmon, which is sort of a half-way-house between natural deduction and the sequent calculus.
  • This course originally had two lectures and one precept each week. “Precept” is Princeton’s weird name for a small-group section (with maximum 14 students). I have since switched to one long lecture and one long small-group section each week. But we are still figuring out how to run a good section meeting. This semester, one of the instructors (Pacy Yan) had the interesting idea of giving an “exit ticket” the last fifteen minutes of each precept.