Constructions: A Higher Order Proof System for Mechanizing Mathematics