CS70 - Lecture 2 - Jan 21, 2011 - 10 Evans

First homework posted (on Demmel's web page and bspace), due Jan 27

Review of last time:

DEF: Proposition is a statement that must be either true (T) or false (F)

EG: 2+2=4, 2+2=3

Notation: propositions denoted p, q, etc

DEF: logical operators not p, p and q, p or q, p xor q

DEF: compound propositions: constructed from simpler propositions using not, and, or, ()

EG: (p and not q) or (not p and q)

DEF: A truth table is a table of all possible values of a compound proposition

ASK & WAIT: can this be simplified, i.e. written more briefly using other logical operators?

DEF: Implication: p => q, same as (not p) or q

ASK&WAIT: Is (1+1=3) => (1+1=2) True or False?

DEF: The converse of p -> q is q -> p; they need not be true at the same time

EX: converse of last example is (1+1=2) => (1+1=3)

ASK&WAIT: is this True or False?

DEF: The contrapositive of p -> q is not q -> not p; these are the same (both True or both False)

DEF: p <-> q "p if and only if q", "p->q and q->p", biconditional

Predicates: a proposition depending on one or more free variables x, y, ...

EG: R(x) = "x > 0", so R(7) = "7>0" which is true

EG: S(x,y) = "x>y", so S(1,2) = "1>2" which is false

Now that we understand a predicate like

R(x) = "x>0 => x+1>1"

or

S(x) = "2*x > x"

we'd like to be able to reason about when they are true.

For this we need Quantifiers:

Notation: N = natural numbers = {0,1,2,3…}

Z = integers { …, -2, -1, 0, 1, 2, …}

Quantifiers

To say a proposition R(x) is "always true," we write the new proposition

forall x in N, R(x),

For example

\forall x in N . x^2 >= 0

x^2 >= 0 is true for every x in N

"the square of any natural number is non-negative"

0^2 >= 0 /\ 1^2 >= 0 /\ 2^2 >= 0 /\ ...

ASK&WAIT: Which are true?

forall x in N, 2*x > x

forall x in N, 2*x >= x

forall x in Z, 2*x >= x

forall x in Z ( forall y in Z x^2-y^2 = (x-y)*(x+y) )

To say a proposition R(x) is true for at least one value of x, we write the new proposition

thereexists x in N, S(x)

For example

thereexists x in N, x = x^2

"there is a solution x in N of x = x^2"

0 = 0^2 or 1 = 1^2 or 2 = 2^2 or …

Examples:

"there exists a number greater than 5"

\exists x in N . x > 5

"for any x, x+1 is always strictly greater than x"

\forall x in N . x+1 > x (true)

consequence: 5+1 > 5 (substitute x by 5)

"Let n be a natural number satisfying n>5. Then n^2 > 25."

\forall x in N . (n > 5) => (n^2 > 25)

Ask the class to translate the following into prop.logic:

"there is no largest number"

\forall x in N . \exists y in N . y>x

\not \exists x in N . \forall z in N . z<x

"the square of any even number is even"

Evens = {all even integers}

\forall x in Evens . x^2 in Evens

\forall x in N . (\exists k in N . x=2k) => (\exists k in N . x^2=2k)

_______________^__________________________^

Does this mean that x^2=x for every x in N?

easier to understand:

\forall x in N . (\exists k in N . x=2k) => (\exists j in N . x^2=2j)

Notes:

The order of quantifiers matters!

\not \exists x . P(x) <==> \forall x . \not P(x)

\forall x . \forall y . P(x,y) <==> \forall y . \forall x . P(x,y)

EG: (Lewis Carroll, author of 'Alice in Wonderland')

Universe of Discourse = 'creatures'

"All bears are fierce"

"Some bears do not drink Peet's coffee"

"Some fierce creatures do not drink Peet's coffee"

Let B(x) = "x is a bear"

Let F(x) = "x is fierce"

Let P(x) = "x drinks Peet's coffee"

Express above using forall, thereexists:

ASK&WAIT "All bears are fierce"

ASK&WAIT "Some bears do not drink Peet's coffee"

ASK&WAIT why not "there exists x (B(x) -> not P(x))" ?

ASK&WAIT "Some fierce creatures do not drink Peet's coffee"

Proof techniques (aka rules of inferences, tautologies)

[ p and (p -> q)] -> q

Names: modus ponens, law of detachment, "common sense"

EX: p = "3|n", q = "9|n^2", then "p -> q" is clearly true.

So for example, if n=6, so that p is true, you can conclude 9|6^2

Other common sense stuff:

[(p -> q) and (q -> r)] -> (p -> r)

EX: p = '3|n', q = '9|n^2', r = '18|2*n^2', so p->q and q->r

Thus p->r, i.e. 3|n -> 18|2*n^2

(p and q) -> p

EX: p = "3|n" , q = "2|n", (p and q) = '6|n', so 6|n -> 3|n

p -> (p or q)

EX: p = '3|n', q = '2|n', so 3|n -> (3|n or 2|n)

[ not q and (p -> q) ] -> not p

Name: modus tollens, contrapositive

Works because (p -> q) <-> (not q -> not p)

EX: Show "if 3n+2 is odd then n is odd",

use p="n is even", q="3n+2 is even"; then p -> q is clearly true,

so 3n+2 odd and (p -> q) is the same as not q and (p -> q) whence

not p i.e. n is odd

[ not p -> F) ] -> p

Name: proof by contradiction

EX: cuberoot(5) is irrational, i.e. cannot be written as a/b where

a and b are nonzero integers without common divisor

let p = "cuberoot(5) is irrational"

so not p = "cuberoot(5) is rational"

-> cuberoot(5) = a/b, where a and b have no common divisor, b != 0

-> 5 = a^3/b^3, or 5 b^3 = a^3 (use b != 0)

-> 5 | a^3 -> 5 | a -> a=5*c -> 5 b^3 = 125 c^3 (why 5|a ?)

-> b^3 = 25 c^3 -> 5 | b^3 -> 5 | b

-> 5|a and 5|b

-> a and b have a common factor and do not have a

common factor

-> false

so p is true

case analysis

EX: show that min(x,y) + max(x,y) = x+y

Three possible cases: x<y, x=y and x > y

Case 1: min(x,y) = x, max(x,y)=y, so min+max=x+y

Case 2: min(x,y) = x = y, max(x,y) = y = x, so min+max=x+y=2*x

Case 3: min(x,y) = y, max(x,y)= x , so min+max=y+x=x+y

EX: Are this statement and its proof correct?

Let a(0), a(1), and a(2) be three different points in the plane,

and let T be the triangle they form. Let

theta(1) be the clockwise angle from the line segment

(a(0),a(1)) to the segment (a(1),a(2))

theta(2) be the clockwise angle from the line segment

(a(1),a(2)) to the segment (a(2),a(0))

theta(0) be the clockwise angle from the line segment

(a(2),a(0)) to the segment (a(0),a(1))

Then theta(1)+theta(2)+theta(3) = 180 degrees.

Proof: Draw the figure

a(1)-----a(0)

\ /

\ /

\ /

a(2)

and use the fact that the sums of the angles in a triangle

is 180 degrees.

ASK&WAIT: Are this statement and its proof correct?

EX: Are this statement and its proof correct?

The number of primes is infinite:

Proof: Suppose that the number of primes is finite; we will

get a contradiction. Denote these primes by

p1,p2, ... , pn. Let N = p1*p2*...*pn+1. N is not

divisible by any of p1, p2, ..., pn, because it has

a remainder of 1 when you divide by any of them.

Therefore N is another prime.

ASK&WAIT: Are this statement and its proof correct?

Recall Def: "p if and only if q" means "p <-> q"

To prove this is true you have to show that p and q are

both true at at the same time, and both false at the same time

EX: Are this statement and its proof correct?

a*b is rational if and only a and b are rational

Proof: Suppose a=p/q and b=r/s are rational, i.e. quotients

of integers. Then a*b = (p*r)/(q*s) is rational.

ASK&WAIT: Are this statement and its proof correct?

Proving "NOT EXIST x such that P(x)" is same as

"FORALL x NOT P(x)"

EX: Are following statement and proof correct?

There is no polynomial p(n) with integer coefficients

such that p(n) is prime for all integers n >= 0.

In other words, there is no simple (polynomial) formula for

generating primes.

Proof: instead show "FORALL polynomials p(n),

there is an n >= 0 such that p(n) is not prime":

Write p(n) = p_(d)*n^d + p_(d-1)*n^(d-1) + ... + p_(1)*n + p_(0)

= r(n) + p_(0)

If p_(0) = 0, then p(0)=0 is not prime

If p_(0) = 1 or -1, then p(0)=1 or -1, so not prime

If p_(0) is composite, so is p(0) = p_(0)

If p_(0)=q is prime, then q|r(i*q), so q|p(i*q)=r(i*q)+q

ASK&WAIT: Are this statement and its proof correct?

Here are two more reasons why proofs are important (beyond proving that some

theorem is true, or algorithm is correct)

It is possible to embed proofs in downloadable programs and email,

so that the recipient is guaranteed (by running a program to check

the proof) that the program or email does not contain a virus, or

will not otherwise cause mischief.

For example, Java enabled cell-phones in Japan use this technique

of "proof-carrying code" when they download code. When a phone downloads

Java code it checks the proof that the code will not cause damage

(eg write into memory it should not). The alternative

is to run them using an interpreter that keeps downloaded code from

causing mischief. But it uses fewer instructions (and so

less battery power!) to check a proof and then run noninterpreted code.

Prof. George Necula has pioneered this idea (www.cs.berkeley.edu/~necula)

Bill Gates once proposed a list of techniques to combat spam,

including proof-carrying-email, which would contain a

proof that the email did not come from a spammer, i.e. sent out to

lots and lots of people. One way to do this would be for the email

to contain a very difficult puzzle and its solution, where the puzzle

is known to be so difficult that only by spending at least, say,

1 CPU second could the puzzle have been solved, although it is easy

for your mailer to check that the solution is correct.

Thus, sending a billion spam messages would cost a billion CPU seconds

instead of a few seconds, making span uneconomical to send.

Unfortunately, this would just motivate spammers to try to take over

other machines and make them spammer-zombies, which they do already.

Obviously a good solution to spam still awaits us...