Model Solutions for HW4 1. {Q: m < n ^ b[m:n-1]=B[m:n-1]} p := m, q:= n {P: (A i: m <= i < p: b[i] <=x) ^ (A i: q <= i < n: b[i]>x) ^ m<=p<=q<=n ^ perm(b,B)} {bound t: q-p} do p p:=p+1 px -> q:=q-1 px ^ b[q-1]<=x -> p,q,b[p],b[q-1]:=p+1,q-1,b[q-1],b[p] od {R: m<=p<=n ^ (A i: m<=ix) ^ perm(b,B)} 2. {Q: (A i: 0<=i=0 ^ b[0:n-1]=B[0:n-1]} p,q:=0,n {P1: 0<=p<=q<=n ^ (A i: 0<=i p:=p+1 p q:=q-1 p swap(b[p],b[q-1]); p,q:=p+1,q-1 od {R1: (A i: 0<=i=0} q,r:=p,n {P2: 0<=p<=q<=r<=n ^ (A i: 0<=i q:=q+1 q r:=r-1 q swap(b[q],b[r-1]); q,r:=q+1,r-1 od {R: (A i: 0<=i0 ^ B>1} k:=0 {P: X>0 ^ B>1 ^ x>=0 ^ X=B^k * x + (Sumover i:0<=i x,k,v[k]:=quotient(x,B),k+1,remainder(x,B) od {R: X = (Sumover i: 0<=i x := top(S); pop(S); if empty(x) -> skip ~empty(x) ^ empty(left(x)) ^ empty(right(x)) -> leaves:=leaves+1 ~empty(x) ^ (~empty(left(x)) v ~empty(right(x))) -> notleaves:=notleaves + 1; push(left(x)); push(right(x)) fi od {R: leaves(p) = leaves} If you don't see why the conditions are met, you can come and ask during office hours. 5. Defs. #pnodes(p) = the number of pass-thru nodes of tree p #fnodes(p) = the number of full internal nodes of tree p #leaves(p) = the number of leaves of tree p Solution: f,n,l,s := 0,0,0,{p}; {inv P: #leaves(p) = l + (SumOver r in s: #leaves(r)) ^ #fnodes(p) = f + (SumOver r in s: #fnodes(r)) ^ #pnodes(p) = n + (SumOver r in s: #pnodes(r)) } {bound t: 2 * (#leaves(p) - l + #fnodes(p) - f + #pnodes(p) - n) + |s| } do s != {} -> choose(q,s); s:=s-{q}; if empty(q) -> skip leaf(q) -> l:=l+1 ~empty(left(q)) ^ ~empty(right(q)) -> f,s:=f+1,s U {left(q),right(q)} ~empty(left(q)) ^ empty(right(q)) -> n,s:=n+1,s U {left(q)} empty(left(q)) ^ ~empty(right(q)) -> n,s:=n+1,s U {right(q)} fi od {R: f = #fnodes(p) ^ n=#pnodes(p) ^ l=#leaves(p)}