File size: 2,309 Bytes
09cb3f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; On the terms 'vacuous' and 'vacuously true'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; can you explain why (+) has the value 0?

;;; well, there are no arguments, and the sum of zero numbers is 0

;; similarly, can you explain why (and) has the value #t?

;;; well -- given (and arg1 arg2 ... argk), and returns true if every one of
;;; arg1, arg2, ... , argk is true.  For (and) -- ie, and applied to no arguments -- the set {arg1, arg2, ..., argk}
;;; is empty -- it follows then that every one of these arguments is true.

;;; one says then that (and) is vacuously true

;;; we will encounter this over and over again in the coming weeks -- you want
;;; to review universal quantifiers:  "for every arg in the empty set {}, (f arg) is
;;; true whenever (f arg) computes a Boolean value".  Intuitively,
;;; ask yourself "how could it be false?"  Well, there would
;;; need to be an argument in the empty set for which the value(f arg) is false.  But of course
;;; there are no arguments in the empty set.

;;; I like to refer to this as the 'green elephant argument'.  The corresponding
;;; claim is this: "every green elephant in my office just now is wearing purple
;;; boots."  This is a true statement, for the simple fact that there are no
;;; green elephants in my office at this time -- so -- vacuously -- every one of them is
;;; wearing purple boots!

;;; Another use of the phrase "vacuously true" arises when talking about
;;; propositions -- recall the definition of P ==> Q

;;;           P           Q             P ==> Q
;;;          ---         ---           ---------
;;;           T           T               T
;;;           T           F               F
;;;           F           T               T
;;;           F           F               T

;;;  The last two lines are described by saying that when the antecedent P
;;;  is false, then the implication P ==> Q is vacuously true.

;;; What about (or)?  (or arg1 arg2 ... argk) is #t exactly when at least
;;; one of arg1, arg2, ..., argk is true.  So -- if none are true, then
;;; the or evaluates to false.

;;; So the relevant question is: how many args in {} are true?
;;; Clearly, the answer is 0.  So (or) _must_ evaluate to false.