Lecture 2-1

Elements of Z Notation

Bart Massey

A Function In Python

    def f(n):
        t = 0
        for i in range(n - 1, 0, -1):
            t += i
        return t
  • What does it do?

  • Is it right?

  • Is there a better way to write it?

Python Done Better

    # Return the number of pairs one can make
    # from the given number of elements.
    def pairs(elements):
        pairs_found = 0
        for i in range(elements - 1, 0, -1):
            pairs_found += i
        return pairs_found
  • Now we know what it does..or do we?

    • What about negative elements?
    • Will it work for really large elements?
  • Is it correct?

  • Is there a better way to write it?

A Z Specification

    | pairs : N -> N
    |---------------
    | forall n : N @ pairs n = sum 1..n

This looks a lot like our code, but...

  • It goes in the other order, and starts at 1

    • It actually doesn't go in any order
    • Omitting 0 from a sum doesn't change it
  • It specifies that pairs works over non-negative numbers. We should add this to the comment

  • No summation variable

  • Works for arbitrarily large x

Better Z

    | pairs : N -> N
    |---------------
    | forall n : N @ pairs n = n * (n - 1) div 2
  • Use Gauss's Sum to get a closed form

    • Works because math
    • Harder to prove Python matches Z
    • Can transform Python to match Z

      # Return the number of pairs one can make
      # from the given non-negative number of elements.
      def pairs(elements):
          assert elements >= 0
          return elements * (elements - 1) // 2
      
  • To prove: the div is really just a divide

A State Machine That Can Kill Or Heal

  • See Jacky for description of radiation therapy machine and its states

  • We want to describe the state machine symbolically

    • So that it can be checked for consistency and completeness
    • So that we can prove other important properties
    • So that we can try to turn it directly into code
    • So that we can easily elaborate it with more behavior
Last modified: Monday, 11 January 2016, 2:22 AM