Towards Fully Declarative Program Analysis via Source Code Transformation
逻辑编程的进步和越来越多的工业采用Datalog启发的方法表明,越来越需要更容易地表达强大的代码分析。声明式程序分析框架(例如,使用逻辑编程(如Datasheet),与命令式实现相比,大大简化了定义分析。然而,这些框架的声明性好处只有在解析和翻译源代码以生成事实之后才能实现。事实生成仍然是分析的非声明性先驱,其中命令式实现首先解析和解释程序结构(例如,抽象语法树和控制流图)。因此,事实生成程序仍然不透明,非专家难以理解或修改。我们提出了一个新的视角,这个分析工作流程,提出声明性的事实生成,以减轻规范和探索轻量级声明性分析。我们的方法展示了跨多种语言的完全声明式分析规范的第一次冒险。其关键思想是使用声明性语法转换将源代码直接转换为分析域中的数据库事实。然后,我们在生成的事实上重用现有的Datasheet分析,产生端到端的声明性管道。作为第一近似,我们追求语法驱动的方法,并证明了生成和使用轻量级版本的活性和调用图可达性属性的可行性。然后,我们讨论了扩展声明性事实生成,也将语义信息的可操作性。
2021-12-23 cs.PL cs.SE
Compiling ER Specifications into Declarative Programs
本文提出了一个环境,以支持高级数据库编程的声明式程序设计语言。为了确保安全的数据库更新,所有与数据库相关的访问和更新操作都是从实体关系(ER)模型中的高级描述中生成的。我们提出了一个表示ER图的声明性语言咖喱,使他们可以通过各种工具构建,然后翻译成这种表示。此外,我们已经实现了一个编译器,从这个表示到一个咖喱程序,提供访问和更新操作的基础上,一个高层次的API数据库编程。
2007-11-02 cs.PL cs.SE
The Prolog debugger and declarative programming
逻辑编程是一种声明式编程范式。程序设计语言Prolog使逻辑编程成为可能,至少在很大程度上是这样。然而,Prolog调试器只在操作语义方面工作。因此它与声明式编程不兼容。本报告讨论了这个问题,并试图从声明的角度找到如何使用调试器。结果并不令人鼓舞。此外,Byrd的盒子模型,调试器使用,解释在SLD分辨率。
2020-03-05 cs.LO cs.PL cs.SE
An Integrated Development Environment for Declarative Multi-Paradigm Programming
在本文中,我们提出了CIDER(咖喱集成开发环境),一个分析和编程环境的声明性多范式语言咖喱。CIDER是一个图形环境,通过提供程序分析和可视化的集成工具来支持Curry程序的开发。CIDER完全在Curry中实现,使用GUI编程(基于Tcl/Tk)和元编程库。我们的环境的一个重要方面是开发环境对其他声明性源语言(例如,Prolog或Haskell)和扩展性w.r.t.新的分析方法。为了支持后一个特性,底层实现语言Curry的惰性求值策略变得非常有用。
2001-11-19 cs.PL cs.SE
Universal Scalability in Declarative Program Analysis (with Choice-Based Combination Pruning)
本文提出利用Datalog引擎中的choice构造对关系投影基数进行自适应剪枝,以近乎通用的方式提升声明式程序分析的可扩展性,并在Doop和Gigahorse框架上实现超过20倍的性能提升。
2025-03-07 cs.SE
Inferring Non-Failure Conditions for Declarative Programs
本文提出一种全自动方法,通过推断并检查操作的非失败条件来验证声明式程序中部分定义操作调用的正确性,并在 Curry 程序中实现验证。
2024-02-20 cs.PL cs.SE
A contract-based method to specify stimulus-response requirements
有许多形式化的方法以声明的形式来捕捉刺激-反应需求。还需要有人将得到的声明性语句翻译成命令式程序。本文描述了一种方法,规范和验证的刺激反应的要求,在命令式程序例程的形式与条件和断言。然后程序证明者直接对照所述需求检查候选程序。文章说明了该方法,通过将其应用到ASM模型的起落架系统,一个广泛使用的现实的例子,提出了评估规范和验证技术。
2017-04-17 cs.SE
Modular Collaborative Program Analysis in OPAL
目前的方法结合了多个静态分析,得出不同的,独立的属性集中在模块化或性能。声明式方法促进模块化和自动化,独立于分析的优化,而命令式方法促进手动,特定于分析的优化。在本文中,我们提出了一种新的方法来静态分析,利用黑板系统的模块化,并结合声明和命令式技术。我们的方法允许可交换性和可插拔扩展的分析,以提高健全性,精度和可扩展性,并明确地使否则不兼容的分析的组合。通过将我们的方法集成到OPAL框架中,我们能够实现各种不同的分析,包括比Doop(最先进的点分析框架)的等效分析性能更好的点分析。
2020-10-09 cs.SE
On correctness of an n queens program
Thom Frühlynth提出了一个简短,优雅和有效的Prolog程序的n皇后问题。然而,该程序可能被视为相当棘手,人们可能不相信它的正确性。本文以声明的方式解释了程序,并证明了程序的正确性和完整性。规范和证明是声明性的,即它们从任何操作语义中抽象出来。该规范是近似的,不需要精确地描述程序的语义。尽管该程序的工作在非地面条款,这项工作采用了标准的语义,基于逻辑后果和Herbrand解释。本文的另一个目的是提出一个关于逻辑程序语义的精确声明推理的例子。
2020-07-17 cs.LO cs.PL cs.SE
On Testing Constraint Programs
几种基于约束的建模语言(如OPL、ZINC或COMET)的成功吸引了更好的软件工程实践,特别是在测试阶段。本文介绍了一个测试框架,使自动测试用例生成的约束编程。我们提出了一个约束程序开发的一般框架,假设第一个声明和简单的约束模型是从问题规格分析。然后,这个模型是细化使用经典的技术,如约束重新制定,代理和全球约束添加,或破坏,以形成一个改进的约束模型,必须彻底测试之前,用于解决实际规模的问题。我们认为,大多数的故障都是在这个细化步骤中引入的,并提出了一个过程,其中第一个声明模型作为一个预言检测不符合。我们从这个过程中获得实际的测试目的,以自动生成显示不符合项的测试数据。我们实现了这种方法在一个新的工具,称为CPTEST,用于自动检测两个经典的基准程序,即Golomb统治者和汽车排序问题的不符合。
2010-05-17 cs.SE
On correctness and completeness of an n queens program
Thom Frühlynth提出了一个简短,优雅和有效的Prolog程序的n皇后问题。然而,该程序可能会被视为相当棘手,人们可能不会相信它的正确性。本文以声明的方式解释了程序,并证明了程序的正确性和完整性。规范和证明是声明性的,即它们从任何操作语义中抽象出来。该规范是近似的,不需要精确地描述程序的语义。尽管该程序的工作在非地面条款,这项工作采用了标准的语义,基于逻辑后果和Herbrand解释。本文的另一个目的是提出一个关于逻辑程序语义的精确声明推理的例子。逻辑程序设计理论与实践(TPLP)
2021-08-18 cs.LO cs.PL cs.SE
Context: Proactive Goal-Directed Intelligence via Composable Sandboxed Programs, Declarative Wiring, and Structured Interaction
Qbix, Inc.\ \& Intercoin, Inc. New York USA;Qbix, Inc.\ \& Intercoin, Inc.;IE University NYC
提出Context架构,通过可组合沙盒程序、声明式连接和结构化交互实现主动目标导向智能,并证明其在成本、正确性和效率上的优势。
2026-04-21 cs.AI cs.CL cs.DC
Learning Context-Free Grammars for Grammar-Constrained Decoding via Declarative Agentic Programming with Guarantees
Amazon Web Services(亚马逊云科技);Purdue University(普渡大学)
本研究提出名为Autogrammar的声明式智能体,可从文档和执行数据自动学习上下文无关文法,用于语法约束解码,在三种DSLs上的实验显示其生成的文法性能优于现有基线,能显著提升端到端LM的真实任务表现。
2026-08-07 cs.AI cs.CL cs.PL
Multi-Task Program Error Repair and Explanatory Diagnosis
Texas Tech University(德克萨斯理工大学)
本文提出mPRED多任务机器学习方法,利用预训练语言模型、专用下游模型、数据增强、思维链和图神经网络,实现跨语言程序错误修复与可解释诊断。
2025-01-06 cs.AI cs.SE
Improving Testability and Reuse by Transitioning to Functional Programming
声明式风格(如函数式编程(FP))正在迅速地在其命令式兄弟(包括过程式和面向对象编程)中占据一席之地。这种转变是微妙的,因为它发生在多范式程序设计语言(如JavaScript)的上下文中。FP更适合测试驱动开发(TDD)等现代流程,以及大规模并行、基于云计算等架构。本文描述了从命令式到FP的转变的技术细节,以及对软件质量管理的影响,特别是重用和可测试性。
2016-06-21 cs.PL cs.SE
Evaluation-Strategy Gap in Fault Diagnosis of Deep Learning Programs
Sigma Jahan(西格玛·贾汗)
针对深度学习程序训练故障诊断技术,发现程序内交叉验证与留出完整程序评估间存在0.190的平衡准确率差距,归因于特征的程序级结构,并分析了曲率特征和优化器特征在不同程序上的表现。
2026-06-26 cs.AI cs.LG cs.SE
Extending Answer Set Programming with Rational Numbers
University of Calabria(卡拉布里亚大学)
针对 ASP 无法原生处理非整数算术且浮点算术损害可复现性与声明语义的问题,本文提出将非整数近似为有理数,为扩展的 ASP-Core-2 定义语义并实现。
2023-12-07 cs.AI cs.LO cs.PL
$\{log\}$: Set Formulas as Programs
$\{log\}$是一种程序设计语言,介于约束逻辑编程、集合编程和声明式编程之间。但是$\{log\}$也是有限集合和有限二元关系理论的可满足性求解器。有了$\{log\}$,程序员可以使用集合论和二元关系的所有功能编写抽象程序。这些程序不是很有效,但它们非常接近规范。其正确性更加明显。此外,$\{log\}$程序也是设定的公式。因此,程序员可以再次使用$\{log\}$来自动证明他们的程序验证非平凡属性。在本文中,我们通过几个例子来展示这种开发方法。
2021-04-16 cs.LO cs.PL cs.SE