CISC 223 Assignment 5 David Jiang April 8, 2021 1. (a) ASSERT(k == j | A[k] > A[i]) ASSERT((A | j +> A[i])[k] ? (A | j +> A[i]) [j]) (A | j +> A[i]) [j] == A[i] A[j] ? A[i]; ASSERT(A[k] ? A[j]) k == j: A[k] ? A[k] k != j: A[k] ? A[i] k == j | A[k] ? A[i] (b) ASSERT((k != m && k == j && A[m] > 3)| (k != m && k != j && A[m] > x+2)) ASSERT(((A|j+>3)| k+> x+2)[m]>((A |j> 3)| k +> x+2)[k]) ((A | j +> 3)| k +> x+2) [k] == x+2 A[j] = 3; ASSERT((A | k +> x+2)[m] > (A | k + x+2) [k]) (A | k+> x+2)[k] == x+2 A[k] = x+2; ASSERT(A[m] > A[k]) k == m: false since A[m] = A[k] k != m, k == j: A[m] > 3 k != m, k != j: A[m] > x+2 2. I: (1 ? k ? n && ForAll(i=0; i<k) A[i] == i*(2*i + 5) && ForAll(i=k; i<n) A[i-1] + 4*i + 3 == i*(2*i + 5)) ASSERT(1 ? n < max)//pre condition implies below assertion{ ASSERT(1 ? 1 ? n && ForAll(i=0; i<1) A[i] == i*(2*i + 5) && ForAll(i=1; i<n) A[i-1] + 4*i + 3 == i*(2*i + 5)) int k; k = 1; A[0] = 0; ASSERT(I) while(k < n){ ASSERT(I && k < n)//I && k < n imples k+1 ? n ASSERT(1 ? k + 1 ? n && ForAll(i=0; i<k+1) (A | k +> A[k-1] + 4*k + 3)[k] == i*(2*i + 5) && ForAll(i=k+1; i<n) (A | k+> A[k-1] + 4*k + 3)[i-1] == i*(2*i + 5)) A[k]= A[k-1] + 4*k + 3; 1
David Jiang CISC 223 Assignment 5 Page 2 ASSERT(1 ? k + 1 ? n && ForAll(i=0; i<k+1) A[i] == i*(2*i + 5) && ForAll(i=k+1; i<n) A[i-1] + 4*i + 3 == i*(2*i + 5)) k=k + 1; ASSERT(I) } } ASSERT(I && k == n) // k == n and first ForAll implies post condition ASSERT(ForAll(i=0; i<n) A[i] == i*(2*i + 5)) 3. Pi{C} Q1 and P2{C} Q2 implies that P1 will prove Q1 and P2 will prove Q2. P1|| P2{C} Q1&& Q2 implies that P1 or P2 will prove Q1 and Q2. This is generally not true since Q1 can only be proved by P1 when executing C, same goes for Q2. If Q1&& Q2 is to be proved when executing C, P1&& P2 must be the precondition. P1: n == 8 P2: n == 32 C: n /= 2; Q1: n ?4 Q2: n ? 16 ASSERT(n == 8) n /= 2; ASSERT(n ? 4) (TRUE) ASSERT(n == 32) n /= 2; ASSERT(n ? 16) (TRUE) ASSERT(n == 8 | n == 32) n /= 2; ASSERT(n ? 4 && n ? 16) (FALSE) 4. There is no way to determine the number of atoms in the universe at a given time, whether it be in the past