Software prototyping by relational techniques: experiences with program construction systems