CPSC 121: Models of Computation 2018S
Proof (First Visit) Meghan Allen, based on notes by Steve Wolfman, Patrice Belleville and others
1
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
CPSC 121: Models of Computation 2018S Proof (First Visit) Meghan - - PowerPoint PPT Presentation
CPSC 121: Models of Computation 2018S Proof (First Visit) Meghan Allen, based on notes by Steve Wolfman, Patrice Belleville and others 1 This work is licensed under a Creative Commons Attribution 3.0 Unported License. Outline Prereqs,
1
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
2
3
4
5
Assuming that a and c cannot both be true and that this function produces true:
;; Boolean Boolean Boolean Boolean Boolean -> Boolean (define (rearrange-cond? a b c d e) (cond [a b] [c d] [else e]))
Prove that the following function also produces true:
;; Boolean Boolean Boolean Boolean Boolean -> Boolean (define (rearrange-cond? a b c d e) (cond [c d] [a b] [else e]))
6
(Reality check: you must be able to do formal proofs. But, as with using equivalence laws to reorganize code, in practice you’ll often reason using proof techniques but without a formal proof.)
7
8
9
10
11
Adapted from MathWorld: http://mathworld.wolfram.com/Proof.html
12
Adapted from MathWorld: http://mathworld.wolfram.com/Proof.html
13
14
15
16
17
18
19
~s
Why do we want to put ~p at the end? a. ~p is the proof’s conclusion b. ~p is the end of the last premise c. every proof ends with ~p d. None of these but some other reason e. None of these because we don’t want it there
20
~s
Why do we want to put the blue line/justification at the end? a. ~s → ~p is the last premise b. ~s → ~p is the only premise that mentions ~s c. ~s → ~p is the only premise that mentions p d. None of these but some other reason e. None of these b/c we don’t want it there
21
~s
Why do we want the blue lines/justifications? a. ~(q ∨ r) is the first premise b. ~(q ∨ r) is a useless premise c. We can’t work directly with a premise with a negation “on the outside” d. Neither the conclusion nor another premise mentions r e. None of these
22
~s
Why do we want the blue line/justification? a. (u ∧ q) ↔ s is the only premise left b. (u ∧ q) ↔ s is the only premise that mentions u c. (u ∧ q) ↔ s is the only premise that mentions s without a negation d. We have no rule to get directly from
e. None of these
23
24
... ~s
Which direction of ↔ goes in step 7? a. (u ∧ q) → s because the simple part is on the right b. (u ∧ q) → s because the other direction can’t establish ~s c. s → (u ∧ q) because the simple part is on the left d. s → (u ∧ q) because the other direction can’t establish ~s e. None of these
25
26
????
Modus tollens (7, 9)
We know we needed ~(u ∧ q) on line 9 because that’s what we created line 7 for! Side Note: Can we work directly with a statement with a negation “on the outside”?
27
????
Modus tollens (7, 9)
We know we needed ~(u ∧ q) on line 9 because that’s what we created line 7 for! Now, how do we get ~(u ∧ q)? Working forward is tricky. Let’s work backward. What is ~(u ∧ q) equivalent to?
28
De Morgan’s (8)
Modus tollens (7, 9)
All that’s left is to get to ~u ∨ ~q. How do we do it?
29
De Morgan’s (8)
Modus tollens (7, 9)
As usual in our slides, we made no mistakes and reached no dead
really go on difficult proofs! Mistakes and dead ends are part of the discovery process! So, step back now and then and reconsider your assumptions and approach!
30
31
32
33
34
35
37
38
39
40
41
42
43
44
Assuming that a and c cannot both be true and that this function produces true:
;; Boolean Boolean Boolean Boolean Boolean -> Boolean (define (rearrange-cond? a b c d e) (cond [a b] [c d] [else e]))
Prove that the following function also produces true:
;; Boolean Boolean Boolean Boolean Boolean -> Boolean (define (rearrange-cond? a b c d e) (cond [c d] [a b] [else e]))
45
Assuming that a and c cannot both be true, and that this function produces true:
;; Boolean Boolean Boolean Boolean Boolean -> Boolean (define (rearrange-cond? a b c d e) (cond [a b] [c d] [else e]))
We leave the lemmas as an exercise: 1. p → (q ∧ r) ≡ (p → q) ∧ (p → r) 2. p → (q → r) ≡ q → (p → r) In prop logic: 1. ~(a ∧ b) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. … 4. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) target conclusion
46
We’ll use our “heuristics” to work forward and backward until we solve the problem.
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. … 4. (c → d) “subgoal” 5. (~c → ((a → b) ∧ (~a → e))) “subgoal” 6. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 4, 5
47
Lemmas: 1. p → (q ∧ r) ≡ (p → q) ∧ (p → r) 2. p → (q → r) ≡ q → (p → r)
We start by working backward; how de we prove x ∧ y? Well,
prove y. We’ll break those into two separate subproblems!
Side note: we’ll use the two statements you proved as exercises as “lemmas”: rules we proved for use in this proof. (Want to use them on an assignment / exam? Prove them there!)
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. … 4. (c → d) “subgoal” 5. (~c → (a → b)) ∧ (~c → (~a → e))) “subgoal” 6. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 5 7. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 4, 6
48
Lemmas: 1. p → (q ∧ r) ≡ (p → q) ∧ (p → r) 2. p → (q → r) ≡ q → (p → r)
The second of these subgoals is still huge. We decided to break it into two pieces (and that’s why we went off and proved Lemma 1).
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. … 4. (c → d) “subgoal” 5. ~c → (a → b) “subgoal” 6. ~c → (~a → e) “subgoal” 7. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 5, 6 8. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 7 9. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 4, 8
49
Lemmas: 1. p → (q ∧ r) ≡ (p → q) ∧ (p → r) 2. p → (q → r) ≡ q → (p → r)
Now, we can attack those two pieces separately (which feels like it might be the wrong approach to me… but worth a try!)
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. … 5. (c → d) “subgoal” 6. ~c → (a → b) “subgoal” 7. ~c → (~a → e) “subgoal” 8. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 6, 7 9. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 8 10. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 5, 9
50
Lemmas: 1. p → (q ∧ r) ≡ (p → q) ∧ (p → r) 2. p → (q → r) ≡ q → (p → r)
I’m out of ideas at the end. I switch to the beginning and play around with premises. (Foreshadowing: I didn’t figure out what to do with this premise until near the end.)
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. a → b by SPEC on 2 5. … 6. (c → d) “subgoal” 7. ~c → (a → b) “subgoal” 8. ~c → (~a → e) “subgoal” 9. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 7, 8 10. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 9 11. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 6, 10
51
Lemmas: 1. p → (q ∧ r) ≡ (p → q) ∧ (p → r) 2. p → (q → r) ≡ q → (p → r)
Let’s try the other premise.
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. a → b by SPEC on 2 5. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 6. … 7. (c → d) “subgoal” 8. ~c → (a → b) “subgoal” 9. ~c → (~a → e) “subgoal” 10. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 8, 9 11. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 10 12. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 7, 11
52
Lemmas: 1. p → (q ∧ r) ≡ (p → q) ∧ (p → r) 2. p → (q → r) ≡ q → (p → r)
Continuing with that premise… Hey! We can use our Lemma again!
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. a → b by SPEC on 2 5. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 6. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 5 7. … 8. (c → d) “subgoal” 9. ~c → (a → b) “subgoal” 10. ~c → (~a → e) “subgoal” 11. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 9, 10 12. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 11 13. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 8, 12
53
Lemmas: 1. p → (q ∧ r) ≡ (p → q) ∧ (p → r) 2. p → (q → r) ≡ q → (p → r)
Continuing with that premise…
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. a → b by SPEC on 2 5. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 6. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 5 7. ~a → (c → d) by SPEC on 6 8. … 9. (c → d) “subgoal” 10. ~c → (a → b) “subgoal” 11. ~c → (~a → e) “subgoal” 12. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 10, 11 13. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 12 14. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 9, 13
54
Lemma 2: p → (q → r) ≡ q → (p → r)
Continuing with that premise…
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. a → b by SPEC on 2 5. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 6. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 5 7. ~a → (c → d) by SPEC on 6 8. ~a → (~c → e) by SPEC on 6 9. … 10. (c → d) “subgoal” 11. ~c → (a → b) “subgoal” 12. ~c → (~a → e) “subgoal” 13. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 11, 12 14. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 13 15. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 10, 14
55
Lemma 2: p → (q → r) ≡ q → (p → r)
Continuing with that premise… We treated connecting these as its own problem and came up with Lemma 2!
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. a → b by SPEC on 2 5. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 6. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 5 7. ~a → (c → d) by SPEC on 6 8. ~a → (~c → e) by SPEC on 6 9. … 10. (c → d) “subgoal” 11. ~c → (a → b) “subgoal” 12. ~c → (~a → e) by Lemma 2 on 8 13. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 11, 12 14. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 13 15. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 10, 14
56
Lemma 2: p → (q → r) ≡ q → (p → r)
Lemma 2 lets us connect these directly! Now what. Let’s pause, remind
are, and look at what we have.
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. a → b by SPEC on 2 5. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 6. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 5 7. ~a → (c → d) by SPEC on 6 8. ~a → (~c → e) by SPEC on 6 9. … 10. (c → d) “subgoal” 11. ~c → (a → b) “subgoal” 12. ~c → (~a → e) by Lemma 2 on 8 13. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 11, 12 14. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 13 15. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 10, 14
57
Lemma 2: p → (q → r) ≡ q → (p → r)
How do we do something with this? Again, we treated this as a separate problem:
Subproblem: 1. a → b premise 2. … 3. ~c → (a → b) “subgoal”
58
Now we do our
→, work backward, work forward… This time, we’ll show you what we
the goal and starting point and turned them into a whole other proof problem!
Subproblem: 1. a → b premise 2. ~a ∨ b by IMP on 1 3. … 4. c ∨ ~a ∨ b “subgoal” 5. c ∨ (a → b) by IMP on 4 6. ~c → (a → b) by IMP on 5
59
That’s about as far as dumping → can take us. But, look at step 2 and step 4. What’s the difference?
Subproblem: 1. a → b premise 2. ~a ∨ b by IMP on 1 3. c ∨ ~a ∨ b by GEN on 2 4. c ∨ (a → b) by IMP on 3 5. ~c → (a → b) by IMP on 4
60
Great! We can always OR on something else. We did it! Let’s patch it back into the original proof. But… could we have done it more easily? Question your solutions! (Hint: check out line 4. How can you get there?)
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. a → b by SPEC on 2 5. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 6. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 5 7. ~a → (c → d) by SPEC on 6 8. ~a → (~c → e) by SPEC on 6 9. … 10. (c → d) “subgoal” 11. c ∨ (a → b) “subgoal” 12. ~c → (a → b) by IMP on 11 13. ~c → (~a → e) by Lemma 2 on 8 14. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 12, 13 15. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 14 16. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 10, 15
61
Patching in “step 4” of the previous proof. Can it get us back to step 4 of this proof?
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. a → b by SPEC on 2 5. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 6. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 5 7. ~a → (c → d) by SPEC on 6 8. ~a → (~c → e) by SPEC on 6 9. … 10. (c → d) “subgoal” 11. c ∨ (a → b) by GEN on 4 12. ~c → (a → b) by IMP on 11 13. ~c → (~a → e) by Lemma 2 on 8 14. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 12, 13 15. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 14 16. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 10, 15
62
Sure! In one step! Now what? Only
How does it connect to the top of the proof?
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. a → b by SPEC on 2 5. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 6. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 5 7. ~a → (c → d) by SPEC on 6 8. ~a → (~c → e) by SPEC on 6 9. … 10. (c → d) “subgoal” 11. c ∨ (a → b) by GEN on 4 12. ~c → (a → b) by IMP on 11 13. ~c → (~a → e) by Lemma 2 on 8 14. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 12, 13 15. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 14 16. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 10, 15
63
Hmm… That works if a is false. Can we make a false? What if a is true?
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. a → b by SPEC on 2 5. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 6. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 5 7. ~a → (c → d) by SPEC on 6 8. ~a → (~c → e) by SPEC on 6 9. … 10. (c → d) “subgoal” 11. c ∨ (a → b) by GEN on 4 12. ~c → (a → b) by IMP on 11 13. ~c → (~a → e) by Lemma 2 on 8 14. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 12, 13 15. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 14 16. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 10, 15
64
If a is true, then c isn’t. If c’s not true, then c → d is true. Let’s put that in logic! I looked around for a way to establish ~a but couldn’t. So, I checked what happens if a is true.
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. ~a ∨ ~c ∨ d by GEN on 3 5. a → b by SPEC on 2 6. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 7. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 6 8. ~a → (c → d) by SPEC on 7 9. ~a → (~c → e) by SPEC on 7 10. … 11. (c → d) “subgoal” 12. c ∨ (a → b) by GEN on 5 13. ~c → (a → b) by IMP on 12 14. ~c → (~a → e) by Lemma 2 on 9 15. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 13, 14 16. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 15 17. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 11, 16
65
We need to “fabricate” a d. The rest will be just IMP applications.
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. ~a ∨ ~c ∨ d by GEN on 3 5. ~a ∨ (c → d) by IMP on 4 6. a → (c → d) by IMP on 5 7. a → b by SPEC on 2 8. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 9. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 8 10. ~a → (c → d) by SPEC on 9 11. ~a → (~c → e) by SPEC on 9 12. … 13. (c → d) “subgoal” 14. c ∨ (a → b) by GEN on 7 15. ~c → (a → b) by IMP on 14 16. ~c → (~a → e) by Lemma 2 on 11 17. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 15, 16 18. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 17 19. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 13, 18
66
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise 3. ~a ∨ ~c by DM on 1 4. ~a ∨ ~c ∨ d by GEN on 3 5. ~a ∨ (c → d) by IMP on 4 6. a → (c → d) by IMP on 5 7. a → b by SPEC on 2 8. ~a → ((c → d) ∧ (~c → e)) by SPEC on 2 9. (~a → (c → d)) ∧ (~a → (~c → e)) by Lemma 1 on 8 10. ~a → (c → d) by SPEC on 9 11. (~a ∨ a) → (c → d) by CASE on 10, 6 12. T → (c → d) by NEG on 11 13. (c → d) by M.PON on 12, T 14. ~a → (~c → e) by SPEC on 9 15. c ∨ (a → b) by GEN on 7 16. ~c → (a → b) by IMP on 15 17. ~c → (~a → e) by Lemma 2 on 14 18. (~c → (a → b)) ∧ (~c → (~a → e))) by CONJ on 16, 17 19. (~c → ((a → b) ∧ (~a → e))) Lemma 1 on 18 20. (c → d) ∧ (~c → ((a → b) ∧ (~a → e))) by CONJ on 13, 19
67
(At step 13, no need to separately establish T. T is a “tautology”; it’s always true!) QED!! Whew!
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise … …
by CONJ on 13, 19
68
So, what did that prove? Technically: that if the conditions on the cond branches are mutually exclusive (cannot both be true at the same time) and if the result of the original version was true, then the version with switched cond branches will also be true. In fact, if you go back and think carefully about the proof, we can conclude something much bigger without too much more work: “If two conditions on neighboring cond branches are mutually exclusive (and have no ‘side effects’), we can switch those branches without changing the meaning of the program.”
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise … …
by CONJ on 13, 19
69
For reference: fruitless directions I tried include changing a → b to ~a ∨ b, attempting to form the negation of c → d, and a bunch of other false starts… all of which helped me build pieces I needed for my final strategy! You should have lots of scratchwork if you do a problem this large.
In prop logic: 1. ~(a ∧ c) premise 2. (a → b) ∧ (~a → ((c → d) ∧ (~c → e))) premise … …
by CONJ on 13, 19
70
Exercise: For expressions a, b, and c that evaluate to Booleans (with no side effects), we can translate code like: (if a b c) To logic like this instead of our usual: (a ∧ b) ∨ (~a ∧ c) Prove that they’re equivalent. Then, figure out how a cond would similarly translate. Finally, go back and redo some of our proofs (like the one we just did) with the new representation.
71
Hercule Poirot has been asked by Lord Martin to find out who closed the lid of his piano after dumping the cat inside. Poirot interrogates two of the servants, Akilna and Eiluj. One and only one of them put the cat in the
Akilna says:
– Eiluj did it. – Urquhart paid her $50 to help him study.
Eiluj says:
– I did not put the cat in the piano. – Urquhart gave me less than $60 to help him study.
72
73
74
75
76
77
78
79
80
81
82
Is valid (as a term) the same as true or correct (as English ideas)?
83
84
85
http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.5
86
http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.5
87
http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.2
88
89
http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.6
90