CS70 - Lecture 1 - Jan 19, 2011 - 10 Evans


Name, class, URLs

     www.cs.berkeley.edu/~demmel/cs70_Spr11

     bspace.berkeley.edu

Read on-line summary for course rules and grading policies

You are responsible for reading this and knowing the rules!

Text are notes "Discrete Math and Probability Theory" available at Copy Central (Hearst&Euclid)

Lecture notes will be posted (hopefully before lecture)

First HW will be due next Thursday Jan 27 just before midnight; work in groups!

Midterms will be in the evening, 6-8pm, on Mar 3 and Apr 7.


Introduce staff (Head TA Nick Knight, Terry Filiba, Fares Hedayati, Sayak Ray)


Enrollment: There is usually some churn at the beginning of the semester,

so we hope that people on the waiting list will get in eventually without adding

another section. Nick Knight is in charge of making enrollment changes.


Course Outline:

   Propositions, logic and proofs

          common language for rest of course

          logical operations in programs (CS61)

          hardware design (CS150)

      Why proofs?

         So people know something is true

         So computers know something is true:

            Some Java enabled cell phones have required

              downloaded programs to be "proof carrying codes",

              that contain a proof that they can't do anything

              bad to your cell phone (see www.cs.berkeley.edu/~necula)

   Induction and recursion

       writing correct programs and showing they are correct

   Example: Stable Marriage Problem

   Modular arithmetic, RSA cryptosystem

        keeping your money safe when you login to your bank

   Polynomials over finite fields and their use in error correcting codes

        how to send data reliably over unreliable networks, like the internet

   Probability theory (random variables, expectation, variance, …) and

      its applications (load balancing, hashing, inference…)

  Using the same proof ("diagonalization") to show that

      there are programs that you provably cannot write, 

          like a debugger that finds infinite loops

      there are more irrational numbers than rational numbers


  Begin course:


          DEF: Proposition is a statement that must be either 

                     true (T) or false (F)

           EG: Which of the following are propositions:

               2+2 = 4  (Y)

               2+2 = 3  (Y)

               826th digit of pi is 4 (Y)

               all dinosaurs were warm-blooded (Y)

               Is 2+2=4? (N)

               Let x = 3. (N)

               x+1 = 2   (N, unless we know the value of x)

               Every even number > 2 is the sum of two primes. (Y)

                    (Goldbach's Conjecture; best result known to be true is <= 6 primes)

               My CS70 GSI is nice (N)

          Notation: propositions denoted p,q,r ...

          DEF: not p , p or q (disjunction), p and q (conjunction),

               p xor q (exclusive or)

          Truth tables

          EG: What are the values of

             2+2=3  and 2+2 = 4  

             2+2=3  or    2+2=4

             2+2=3  xor  2+2=4

          DEF: a compound proposition is formed by simple propositions

               connected by logical operators and parentheses; 

           EG: (p and q) or (r and s)

               programming example below

          DEF: p -> q,  pronounced "p implies q", or  "if p, then q",  "p sufficient for q",

                "q necessary for p";  but it is simply defined as not(p) or q;

            EG: if it is sunny, then we go to the beach

                p = it is sunny, q = we go to the beach

                (T unless it is sunny (p)  and we don't go (not q))

              Truth table

  ASK&WAIT  if (today is Friday), then (2+3 = 6); 

                on which days is this true?

                p = (today is Friday), q = (2+3=6)

                T every day except Friday

  ASK&WAIT  if (1+1=3) then (2+2=4)

            Note that p and q need not have anything to do with one another

            in order to form the expression p -> q

  ASK&WAIT  if (1+1=3) then (2+2=3)

  ASK&WAIT  if (the moon is made of cheese) then (the speed of light is 55mph)

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

               at the same time

  ASK&WAIT  EG: If I am exactly 18 years old then I am allowed to vote;

                converse is

                if I am allowed to vote, then I am exactly 18 years old

                note that converse not necessarily true if original is

          DEF: The contrapositive of p -> q is not q -> not p; 

               these are the same

  ASK&WAIT  EG: If I am exactly 18 years old then I am allowed to vote;

                converse is

                if I am not allowed to vote, then 

                       I am not exactly 18 years old

                contrapositive is true

          Truth table proof of prop <=> contrapositive

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

               Truth Table


  Application to programming (Java or C syntax)

          

          if (compound proposition, or logical expression) then do something...

          if ((n>0) && (m<k)) then do something ...

             (n>0) and (m<k) are propositions whose value (T or F)

             can be evaluated when you get to this line in the program, 

             and && means "and", || means "or", etc.


          in computer 1 represents true and 0 false (representation details

             in CS61C, CS150)


More generally, we like to be able to reason about statements like

     x>0 => x+1>1

but we can't yet, because x>0 is not a proposition, we need something new.


Predicates

     R(x) = "x > 0"

     Think of this as a proposition with a free variable x;

     the truth value depends on the choice of x.  In other words, R is a

     function from the natural numbers (say) to the set of propositions; for

     instance, R(7) is the proposition "7>0" (which, incidentally, is true).


EG: Application to Web search

          In www.google.com you can type into the Advanced Search form:

               With all the words: guano

               and With at least one of the words: geometry tickle

          Same as "find all web pages W for which the proposition is true"

               (W contains guano) and 

                  ((W contains geometry) or (W contains tickle))

  ASK&WAIT: what web pages do you get? (besides the Ma55 2004/07 web pages,

                    which have all three, like this one)

            EX: Flickr photo with title "tickle my nose with guano"  (not the word geometry)

            EX: WIkipedia entry for Dr Strangelove, with character named Guano talking

                    about geometry of B-52 fuselage (not the word tickle)

            EX: Mass movement in cave sediments, how the geometry

                   depends on bat guano deposits.

                   contains guano and geometry, not tickle

            

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 number = {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,  S(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:  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:

  "doubling a number always makes it larger"

    \forall x in N . 2x > x (false; x=0)

    \forall x in N . 2x >= x (true.)

    but: latter proposition is false in integers! (x<0)

    highlights need to include set over which you're quantifying


  "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


  "every even number >= 4 can be written as the sum of two primes"

    \forall x in N, (x>=4 and x even) => \exists y,z in Primes . x = y+z

    E = {even integers >= 4}

    \forall x in E . \exists y,z in N . y,z prime and x = y+z

       (unknown; Goldbach's conjecture!)


  "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)

True or false?

  \forall x in N \exists y in N . x = 2*y  (false in integers; true in reals)

  \forall x in N \exists y in N . y = 2*x  (true)

    (note: y is allowed to depend on x; think of this as a game

     where you pick x, then I pick y, and I win if y=2x; the proposition

     is true if I have a winning strategy that lets me win no matter what

     you do)

  \exists x in N \forall y in N . y  = 2*x  (false)

  \exists x in N \exists y in N . y  = 2*x  (true)

  \forall x in N \forall y in N . y  = 2*x  (false)

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)