归纳合成函数程序:探索自动编程的前沿
1. 引言
自动程序合成是自20世纪70年代初以来的一个活跃研究领域。其应用目标是支持人类程序员开发正确和高效的程序代码,并对程序进行推理。程序合成是基于知识的软件工程的核心,旨在深入了解代码生成过程中所涉及的知识和策略。因此,开发自动程序构建的算法是人工智能(AI)研究的一个重要领域,而人类程序员则在认知科学研究中被研究。
1.1 研究背景和动机
自动程序合成的目标是尽可能自动化计算机程序开发的大部分。一个更谦逊的目标是自动化或支持程序开发的特殊方面,如程序验证或从特定规范生成高级程序。自动编程的研究不仅关注程序的正确性,还关注程序的效率和透明度。显然,软件开发是一项复杂的任务,自20世纪80年代以来,已经开发了各种计算机辅助软件工程(CASE)工具,以支持项目管理和代码生成。
1.2 程序合成的两种主要方法
程序合成主要有两种方法——演绎法和归纳法。
演绎法
演绎程序合成解决了从高级规范中导出可执行程序的问题。通常,所使用的转换或推理规则保证了生成的程序与给定规范的正确性。演绎程序合成的挑战是提供形式化的知识,允许尽可能少的用户指导来合成尽可能大的程序类别。
归纳法
归纳程序合成研究了从不完整信息中构建程序的过程,即从程序期望的输入/输出行为的示例中进行构建。结果程序必须正确覆盖所有给定的示例,但用户必须判断泛化的程序是否符合他/她的意图。因为代码的正确性对于软件开发至关重要,基于知识的软件工程依赖于演绎方法进行程序合成。归纳程序合成的挑战是提供能够尽可能少的背景知识泛化尽可能大一类程序的学习算法。 </