Reading material

Pages 77-78.

Additional material

Arrays in Standard ML

  local
    fun helper(a, 0) = []
      | helper(a, n) = append(helper(a, n-1), [Array.sub(a, n-1)])
  in
    fun toList(a) = helper(a, Array.length(a))
  end;
defines a function of type
  'a array -> 'a list
which returns the contents of the array as a list. For example,
  toList(Array.array(5, 1));
returns
  [1,1,1,1,1] : int list

Question

The function Array.fromList is of type 'a list -> 'a array and, given a list, returns an array containing the elements of the list. For all lists xs, toList(Array.fromList(xs)) = xs. If you were to prove this by structural induction, what would be the base case and the inductive step?