ScholarGate
助手

逻辑与声明式编程

逻辑与声明式编程将问题表达为关系、事实和规则,将解决方案的搜索留给推理引擎,而不是明确的逐步指令。

用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
下载幻灯片
Learn & explore
视频即将推出

Definition

逻辑编程是一种声明式范式,其中程序是一组逻辑子句(事实和规则),计算通过自动化演绎(通常是带有合一的归结)进行,以回答针对该知识的查询。

Scope

本主题涵盖基于Horn子句和归结的逻辑编程(如Prolog)、约束逻辑编程,以及更广泛的声明式思想,即指定“应该”成立什么,而不是“如何”计算它。它包括合一、回溯搜索、逻辑程序的模型论和证明论语义,以及逻辑规范与控制的分离。

Core questions

  • 通过从逻辑子句中证明目标进行计算意味着什么?
  • 合一和回溯如何实现在关系程序上的搜索?
  • 逻辑与控制的分离是如何精确实现的?
  • 约束如何扩展纯逻辑编程?

Key theories

归结原理
Robinson的归结为一阶逻辑提供了一个单一的、面向机器的推理规则,提供了使逻辑编程在计算上可行的演绎引擎。
逻辑加控制
Kowalski的分析区分了程序的逻辑内容(什么是真的)和其控制组件(如何搜索证明),将逻辑编程构架为在保持逻辑不变的情况下改变控制的一种方式。
逻辑程序的声明式和过程式语义
Lloyd形式化了确定性逻辑程序的模型论、不动点和操作语义,并证明了它们之间的对应关系,从而奠定了逻辑程序的意义。

Clinical relevance

声明式和基于逻辑的技术是数据库查询语言、约束求解器、知识表示和规则引擎的基础。它们强调指定问题而非算法,使其非常适合组合搜索、配置和推理任务。

History

Robinson于1965年提出的归结原理奠定了演绎基础。20世纪70年代初,Colmerauer和Roussel创建了Prolog,Kowalski阐明了Horn子句的程序性解释。该范式在20世纪80年代蓬勃发展,影响了日本的第五代计算机项目,后来扩展到约束逻辑编程和答案集编程。

Debates

纯粹性与实际控制
逻辑编程语言在纯粹声明式逻辑的理想与对显式控制(如剪枝和排序)的实际需求之间取得平衡,这些控制提高了效率,但损害了清晰的逻辑/控制分离。

Key figures

  • Robert Kowalski
  • Alain Colmerauer
  • J. Alan Robinson
  • John Lloyd
  • Philippe Roussel

Related topics

Seminal works

  • kowalski1979
  • robinson1965
  • lloyd1987
  • colmerauer1993

Frequently asked questions

逻辑编程与命令式编程有何不同?
逻辑程序不是指定一系列操作,而是声明事实和规则,推理引擎搜索回答查询的证明,因此程序员关注的是“什么”是真的,而不是“如何”计算它。
什么是合一?
合一是寻找一个替换,使两个逻辑项变得相同的过程;它是逻辑程序将目标与子句头匹配的核心机制。

Methods for this concept

Related concepts