  program synthesis is a special form of automatic programming that is most often paired with a technique for formal verification. the goal is to construct automatically a program that provably satisfies a given high-level specification. in contrast to other automatic programming techniques, the specifications are usually non-algorithmic statements of an appropriate logical calculus. == origin == the idea originated in the 60s  with the aim of using techniques from artificial intelligence to build an automatic programmer, exploiting deep connections between mathematics and the theory of programming. lack of early success meant that the mathematical approach soon fell out of favour, along with enthusiasm for ai, in general. although some researchers  still work on formal approaches, more success has been obtained by combining pure deductive techniques with powerful heuristics, and limiting their application to specific domains. == problems and limitations == some feel that the concept of automated program generation often results in poor "factoring" of information. known redundancy should be  factored out, not introduced, it is said . however, sometimes specific programming languages are limited such that one has to introduce repetition of a concept or pattern in order to keep using the same language. here is a simplified illustration of factoring: poor factoring: x = a + a + a + a + a good factoring: x = a Ã 5 program generation tends to focus on automating the repetition seen in the first example, when a better approach is perhaps to find a higher-order abstraction, which is multiplication in this case. other examples include putting parameters into a file or database instead of inside application code. == the framework of manna and waldinger == the framework of manna and waldinger  a preprint appearead in dec 1978 as sri technical note 177 starts from a user-given f
Programming_paradigms