Now that weâre transitioning to writing proofs about discrete structures like functions, graphs, and the like, there are a few specific points weâd like to you to check for in your proofs in addition to the general rules set out in the earlier Proofwriting Checklist. As youâre working through the problems on Problem Set Three and beyond, take a few minutes per proof to read over what youâve written and check to make sure that your proofs obey the following criteria:
- Appropriately call back to first-order definitions.
- Donât use quantifiers or connectives in your proofs.
- Donât repeat definitions; use them instead.
- Distinguish between assuming and proving.
- Type-check your proofs.
As before, we will be applying this checklist to the proofs that you submit, starting with Problem Set Three, as part of how we grade, so catching these sorts of issues before you submit will help us give you even better targeted feedback on your proofs. The remainder of this handout goes into more detail about what each of these rules mean.
Appropriately Call Back to First-Order Definitions
One of the main differences between the proofs that youâll be writing on Problem Set Three and the proofs you did on Problem Set One and Problem Set Two is that we now have symbolic definitions of key terms and definitions expressed in the language of first-order logic. From a proofwriting perspective, this is quite useful â it means that you know exactly what it is that youâll need to prove at each point in time. At the same time, this means that you need to be extremely careful when setting up your proofs to make sure that youâre making the right assumptions and ultimately trying to prove the right results.
For example, letâs suppose that youâre trying to prove that some function
Given that this is the statement you want to prove, you should not start your proof off like this:
â Incorrect! â Proof: Consider any
The issue with this proof is that the structure of whatâs written above doesnât match the structure of the first-order statement in question. Specifically, since in this proof weâve picked an arbitrary
Take a minute to confirm that you see exactly why this is the case.
As youâre working through problems on discrete structures, we strongly recommend that, before you spend any mental energy trying to actually tackle the problem, you make sure that you have clearly identified what it is that youâre assuming and what it is that you need to prove. The Guide to Proofs on Discrete Structures contains a number of example proof templates that you can use for some common cases, but more generally youâll want to get as much practice as possible going back and forth between first-order logic and proof setup.
Thereâs another way that we often see proofs fail to engage with first-order definitions, and thatâs to operate at far too high of a level. As an example, if you look on Problem Set Three, youâll see a problem about function powers. Youâre asked to prove that if
â Incorrect! â Proof: The function
This proof doesnât establish that
There are two lessons to take away from this example. First, be wary about going off-script in the course of writing a proof. If youâre asked to prove that something is an injection, or a bijection, etc., you have a formal definition you can call back to, and chances are that itâs probably best to prove that the object has the given type by explicitly appealing to each of the parts of this definition. If you decide not to do that and to prove the result through some other mechanism, you should be very suspicious about the line of reasoning youâre following.
This brings us to the second lesson here â exercise skepticism about broad claims in your proofs. If youâre making some claim about how all injections behave, or what every function looks like, etc., your immediate response should be to ask whether what youâre saying is actually true. If so, why? Go and prove it. If not, why not? Go disprove it. In the course of doing so, youâll either discover a flaw in your original line of reasoning, which is great (it means that youâve spotted an error in your proof and can go and try to address it), or youâll end up with a more robust proof because youâll have justified a critical and non-obvious claim youâve made.
Donât Use Quantifiers or Connectives in Your Proofs
The title of this section says it all â the convention in proofwriting is to not use quantifiers (
The good news is that many violations of this rule are quite easy to fix. For example, suppose that weâre trying to prove that some function
â Incorrect! â Proof: We will prove that the function
Here, the first-order logic notation thatâs present in the proof is just a restatement of the formal definition of surjectivity, and from context it looks like the author of the proof may have included it to make clear that they know what the definition of surjectivity is and to remind the author of that definition.
As you saw in the original Proofwriting Checklist, itâs almost never a good idea to restate definitions in the abstract (âDonât restate definitions; use them insteadâ). You can assume that whoever is reading your proof knows what a surjective function is, so restating the definition of a surjective function doesnât actually accomplish anything here. We can safely delete that entire sentence from the proof, leaving us with this much simpler proof setup:
Proof: We will prove that the function
This proof contains all of the important details of the original proof, but without any quantifiers or connectives.
If youâre writing a proof and find a spot where you feel like âthe only wayâ to write out what you want to write is to use first-order logic notation, feel free to reach out to us over Ed or to come talk to us in office hours! Weâre happy to weigh in and offer advice.
Donât Repeat Definitions; Use Them Instead
âHey!,â youâre probably saying. âIsnât this something covered in the original Proofwriting Checklist?â Yes. Yes it is. As we transition to proofs on discrete structures, this rule will become even more relevant, and so we thought it was worth revisiting.
On Problem Set One and Problem Set Two, we gave you the advice to avoid restating definitions purely in the abstract and to instead use them in a way that demonstrates how that definition is applied. For example, consider these three statements:
â We know that
. Since , we know that every element of is an element of . Thus we see that . â
â We know that
. Since , we know that every satisfies . Therefore, we see that . â
â We know that
. Since , we know that every satisfies . Therefore, we see that . â
All of these statements repeat a definition in the abstract before applying it. They're better off rewritten like this:
Since
There are a few reasons why itâs wise to avoid repeating definitions in the abstract. First, you can assume that the reader knows all of the relevant terms and definitions that are needed in your proofs. Your job as a proofwriter is not to convince the reader of what the definitions are, but to show how those definitions interact with one another to build into some result. In that sense, repeating a definition in the abstract, like whatâs done above and to the left, doesnât actually contribute anything to the argument youâre laying out. The reader already knows the definition, so that sentence is fully redundant.
Second, restating definitions in the abstract risks violating other checklist items. Letâs go one at a time through the three options above that we advise against. The first one is far too general (âevery element of
And finally, restating definitions in the abstract just makes things longer. Compare the three options above to the more polished version. All three of those proof fragments are significantly longer than the more concise and direct version shown to the right.
As an example, consider the following proof that contains a style error:
Theorem: If
â Incorrect! â Proof: Let
Since
so
The core logic of this proof is perfectly sound. However, thereâs an issue with how itâs written. Specifically, look at this sentence:
â We know that
is an involution, so for any , we know that . â
Earlier in the proof, we asked the reader to pick their favorite choice of
The intent of this sentence, though, is clear â we want to say âall involutions do this for all values in their domain, and hereâs a specific value in the domain, so hereâs what weâll conclude.â And thatâs fine! But to write that, just say something like this:
We know that
Some people feel uncomfortable writing this. âBut how is the reader supposed to know why this is legal?,â you might ask. Itâs a fair question! The answer is that the convention is that whoever is reading the proof knows all the relevant terms and definitions, so when they see you saying this, they can look up the definition of an involution, see that it indeed lets you make this claim, and say âah, okay, that makes sense.â
Distinguish Between Assuming and Proving
One of the trickier nuances to pick up when working with first-order logic definitions is that statements behave differently based on whether youâre assuming them or proving them. Letâs begin with a simple one. The definition of an even integer can be expressed as follows:
If you are proving that a number
This highlights that assuming a statement is true means something totally different than proving that itâs true. In one case, you get a new variable for free. In the other, you have to go find one.
This gets all the more important when youâre working with more complex definitions. For example, consider the definition of injectivity, shown here:
If you are proving that a function
- ask the reader to pick arbitrary
and , which must be elements of ; - assume that
; then - aim to prove that
.
This process introduces two new variables
On the other hand, if you are assuming that a function
- do not introduce any variables, and
- instead wait to see if you find any values
and where . If so, you can then conclude that .
Notice how different this is! No new variables get introduced, and instead youâre left waiting for some sort of opportunity to present itself where you can draw some new conclusions.
As you transition from proofs about odd and even numbers â which are mostly proofs on existentially-quantified definitions â to proofs about functions and discrete structures â which are often proofs on universally-quantified statements â it is important to keep track of which statements youâre assuming, which statements youâre proving,
For example, consider the following incorrect proof about involutions and injections:
Theorem: For any function
â Incorrect! â Proof: Let
Since
The claim being proved here is indeed true, and the first paragraph is on the right track â we should assume f is an involution and should prove that f is injective.
Things go off-script, though, when we hit the second paragraph. The first sentence of the second paragraph talks about how
Fundamentally, the reason we got into trouble here is we arenât supposed to be introducing any variables or talking about involutions yet. Letâs look at the definition of involutions again:
We are assuming that this statement is true. What does that mean? Well, if we look at the tables from the first lectures on functions or in the Guide to Proofs on Discrete Structures, weâll see that, since weâre assuming a universally-quantified statement, we arenât supposed to do anything yet! Instead, weâre supposed to keep an eye out for some value
This mistake â introducing a variable when assuming a universally-quantified statement â is hard to recover from. In fact, in the above proof, I donât think thereâs any way to proceed with the current line of reasoning and get to a valid proof. The only correct strategy here is to delete the second paragraph and start over again.
There are a couple of indicators that you can keep an eye out for that are helpful for sensing that youâre mixing up assuming and proving something:
- If you find yourself talking about how something is true âfor all
,â it might indicate that youâre trying to use a universally-quantified assumption before youâre ready to do so. If so, remove the sentence where youâre talking about âfor all â and see if you can discover where to apply it in a more concrete, specific sense. - If you had the reader pick an arbitrary value and later on discover that it should have some specific, concrete value, it might mean that youâve started off with a universally-quantified assumption, introduced a variable for it, and then later discovered which specific value you were supposed to work with. If so, double-check to make sure youâre starting in the right place.
And, as always, if youâre unsure whether what youâre doing is going in the right direction, just ask us! Weâre happy to help out.
Type-Check Your Proofs
Type checking has been a recurring theme in this class â youâve seen this in the set theory translations from Problem Set One and the first-order logic translations from Problem Set Two â and that trend continues forward as youâre talking about discrete structures. With the introduction of new terminology from discrete structures, there are more opportunities to make type errors, and so we thought weâd quickly survey some of the common mistakes.
Letâs imagine that
is of type âfunction.â is of type âelement of â
This means, for example, that you could say something like â