On correctness of an n queens program
Thom Frühlynth提出了一个简短,优雅和有效的Prolog程序的n皇后问题。然而,该程序可能被视为相当棘手,人们可能不相信它的正确性。本文以声明的方式解释了程序,并证明了程序的正确性和完整性。规范和证明是声明性的,即它们从任何操作语义中抽象出来。该规范是近似的,不需要精确地描述程序的语义。尽管该程序的工作在非地面条款,这项工作采用了标准的语义,基于逻辑后果和Herbrand解释。本文的另一个目的是提出一个关于逻辑程序语义的精确声明推理的例子。
2020-07-17 cs.LO cs.PL cs.SE
Treo: Textual Syntax for Reo Connectors
Reo是一个以交互为中心的并发模型,用于通信和协调协议的组合规范。存在形式化验证工具以确保Reo中指定的协议的正确性和合规性,其可以容易地在不同的应用程序中(重新)使用,或组成更复杂的协议。最近的基准测试表明,编译这样的高级Reo规范产生的可执行代码可以与使用传统并发结构的C或Java等语言编写的手工程序的性能竞争,甚至击败它们。Reo的原始声明性图形语法不支持参数传递、迭代、递归或条件规范的直观构造。这一缺点阻碍了Reo在大规模实际应用中的应用。尽管过去出现了许多受Reo启发的语法替代方案,但它们都没有遵循Reo的主要设计原则:a)声明性规范; b)所有通道类型及其排序都是用户定义的; c)通道通过共享节点组成。在本文中,我们为Reo提供了一个文本语法,它尊重这些原则,并支持灵活的参数传递、迭代、递归和条件规范。在正在进行的工作中,我们使用这种文本语法将Reo编译成目标语言,如Java、Promela和Maude。
2018-06-26 cs.PL cs.SE
Compiling a Calculus for Relaxed Memory: Practical constraint-based low-level concurrency
Crary和Sullivan的松弛内存演算(Relaxed Memory Calculus,RMC)提出了一种新的声明式方法,用于在现代松弛内存多处理器体系结构和优化编译器的情况下编写低级共享内存并发程序。在RMC中,程序员显式地指定对操作执行顺序和内存写入可见性的约束。这些约束然后由编译器强制执行,编译器在如何实现其目标方面具有很大的自由度。我们提出了rmc-compiler,一个Clang和LLVM为基础的编译器的RMC扩展的C和C++。除了使用障碍来强制排序之外,rmc编译器还可以利用控制和数据依赖关系,这超出了当前C/C++编译器的能力。在rmc编译器中,RMC编译被建模为一个带有代价项的SMT问题,具有最小代价的解决定编译策略。在ARM和POWER设备上的测试中,RMC表现相当不错,在我们的大多数数据结构基准测试中,相对于C++11,RMC的性能有了适度的改进,并且(在某些架构上)在主要读列表测试中有了显着的改进,这在很大程度上得益于使用数据依赖关系进行排序。
2019-04-10 cs.PL
Sound and Complete Bidirectional Typechecking for Higher-Rank Polymorphism with Existentials and Indexed Types
双向类型检查(Bidirectional typechecking),其中术语要么合成一个类型,要么针对一个已知类型进行检查,由于其对各种类型系统的适用性、错误报告以及易于实现而变得流行。遵循证明论的原则,双向类型可以应用于许多类型构造。索引类型(广义代数数据库)的双向方法背后的原则不太清楚。建立在证明理论的平等待遇,我们给出了一个声明性规范的基础上聚焦类型。这种方法允许使用声明性规则来覆盖模式匹配,以及使用聚焦子类型判断来支持第一类存在类型。我们使用细化类型来避免在我们的术语语法中显式地传递相等性证明,使我们的演算类似于Haskell和OCaml等语言。我们还扩展了一个明确的规则推导时,类型是主要的声明性规范,使我们能够给一个完整的声明性规范丰富的类型系统与显着的类型推断。我们还给出了一组算法类型规则,并证明了它是健全的和完整的声明系统。证明需要一些技术创新,包括以相互递归的方式证明可靠性和完整性。
2020-09-19 cs.LO cs.PL
Morello: Compiling Fast Neural Networks with Dynamic Programming and Spatial Compression
University of Washington(华盛顿大学)
Morello 编译器利用动态规划与空间压缩技术,将大型程序规范分解为较小规范并组合出使仿射成本模型最小化的程序,从而在更大搜索空间中高效生成高吞吐量神经网络代码。
2025-05-03 cs.LG cs.PL
P6: A Declarative Language for Integrating Machine Learning in Visual Analytics
University of California at Davis(加州大学戴维斯分校)
我们提出了P6,一个声明性语言,用于建立高性能的可视化分析系统,通过其支持指定和集成机器学习和交互式可视化方法。随着基于机器学习和人工智能的数据分析方法不断发展,可视化分析解决方案可以利用这些方法更好地利用大型复杂数据。然而,将机器学习方法与交互式视觉分析相结合是具有挑战性的。现有的用于可视化的声明性编程库和工具包缺乏对耦合机器学习方法的支持。通过为可视化分析提供声明性语言,P6可以使更多的开发人员能够创建可视化分析应用程序,这些应用程序将机器学习和可视化方法结合起来,用于数据分析和问题解决。通过各种示例应用程序,我们展示了P6的功能,并展示了使用声明式规范构建可视化分析系统的好处。我们还确定并讨论了声明式视觉分析的研究机会和挑战。
2020-09-03 cs.HC cs.LG cs.PL
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
A Declarative Language for Building And Orchestrating LLM-Powered Agent Workflows
PayPal
本文提出一种声明式语言,用于构建和协调基于大语言模型的智能体工作流,通过统一DSL减少开发时间和部署速度,提升非工程师的使用效率。
2025-12-22 cs.AI cs.PL cs.SE
Declarative Statistical Modeling with Datalog
LogicBlox, Inc.(LogicBlox公司);Oxford University(牛津大学)
用于指定统计模型的形式,例如概率程序设计语言,通常由两部分组成:随机过程的规范(先验)和将概率空间限制为条件子空间的观测规范(后验)。这种形式主义的用例包括机器学习和人工智能中的算法的开发。我们提出并研究了一个声明性的框架,通过适当的扩展数据库的数据库上指定的统计模型。通过扩展数据库,我们的框架提供了一个自然的集成与数据库,并具有强大的声明性语义。我们的数据库扩展提供了方便的机制,包括数值概率函数,特别是,规则的结论可能包含从这些功能得出的值。程序的语义是输入数据库中关于程序的可能结果的概率分布;这些结果是关于结论中存在量化变量的相关程序的最小解。通过对外延关系和内涵关系的完整性约束,观察自然地被合并。我们专注于使用离散数值分布的程序,但即使这样,可能结果的空间也可能是不可数的(因为解决方案可以是无限的)。我们定义了一个概率测度可能的结果,通过应用已知的概念,圆柱集的概率追逐过程。我们表明,由此产生的语义是强大的,在不同的追逐。我们还确定了保证所有可能结果都是有限的条件(然后概率空间是离散的)。我们认为,我们提出的框架保留了纯粹的声明性质的数据库,并允许自然规范的统计模型。
2015-01-05 cs.AI cs.DB cs.PL
Deriving monadic quicksort (Declarative Pearl)
为了演示一元程序的推导,我们提出了一个规范的排序使用非确定性单子,并得出纯快速排序列表和状态一元快速排序数组。在推导中,可以在无点和逐点风格之间切换,并部署函数式程序员熟悉的技术,如模式匹配和结构或大小的归纳。有状态程序的派生类似于从后置条件反向推理。
2021-01-27 cs.DS cs.PL
Compiling Language Definitions: The ASF+SDF Compiler
ASF+SDF元环境是一个交互式语言开发环境,其主要应用领域是领域专用语言的定义、程序分析和转换工具的生成、软件更新工具的生成以及通用规范和原型。它使用条件重写规则来定义语言的动态语义和其他面向工具的方面,因此生成的工具的有效性严重依赖于重写规则实现的质量。ASF+SDF重写规则编译器生成C代码,从而利用C的可移植性和当前C编译器的复杂优化能力,并避免潜在的抽象机器接口瓶颈。它可以处理大型(10 000+规则)的语言定义,并使用一个有效的运行时存储方案能够处理大型(1 000 000+节点)的条款。术语存储使用最大子术语共享(hash-consing),这在ASF+SDF中比在Lisp或SML中更有效。广泛的基准测试表明,生成的代码的时间和空间性能与当前最好的重写规则和函数式语言编译器一样好,甚至更好。
2000-07-06 cs.PL cs.SE
A Specification for Typed Template Haskell
多阶段编程是一种经过验证的技术,可以通过控制代码生成来提供可预测的性能特征。我们提出了一个核心语义类型化模板Haskell,扩展的Haskell,支持多阶段的编程,以及与多态性和合格的类型进行交互。我们的语义与一个声明性的源语言与合格的类型的核心语言的基础上的多态λ演算增强多阶段的结构。
2021-12-07 cs.PL
Proving Correctness and Completeness of Normal Programs - a Declarative Approach
我们提倡使用声明性方法来证明逻辑程序的属性。完全正确性可以分为正确性、完整性和干净终止;后者包括非挣扎。只有干净的终止依赖于操作语义,特别是选择规则。我们展示了如何处理的正确性和完整性的声明方式,治疗程序只从逻辑的角度来看。这种方法中使用的规范是解释(或理论)。我们指出,规范的正确性可能不同于那些完整性,因为通常有答案,既不被认为是错误的,也不需要计算。给出了确定性程序正确性和完备性的证明方法,并将其推广到正规程序。对于正常的程序,我们使用3值完成语义;这是一个标准的语义对应于否定有限失败。证明方法仅采用经典的2值逻辑。我们使用的3值完成语义,这可能是单独的利益的2值表征。所提出的方法进行了比较与基于操作语义的方法。我们还采用这项工作的想法推广一个已知的方法证明终止正常程序。
2005-01-25 cs.LO cs.PL
SPL: Orchestrating Workflows with Declarative Deterministic-Probabilistic Composition
Independent Researcher(独立研究者)
研究提出SPL语言统一确定性与概率性计算模式,通过共享语法等实现跨平台运行。经实验验证,求解器分支有较高机器验证正确性,对比仅用大语言模型的分支,呈现后端难度梯度,主要失败模式为求解器错误。
2026-07-10 cs.CL cs.PL
A Prolog Specification of Giant Number Arithmetic
本文中描述的基于树的表示,遗传二进制数,递归地应用游程长度压缩机制,使计算限制其操作数的结构复杂性,而不是由其位大小。虽然在其最坏情况行为的传统对应物的恒定因子内,但我们的算术运算为有趣的数值计算打开了大门,这是传统数字表示法所不可能的。我们提供了一个完整的规范,我们的算法的形式,一个纯粹的声明性Prolog程序。
2013-07-17 cs.PL
Extensible type checker for parser generation
解析器生成器根据语言规范生成翻译器。在许多情况下,这样的规范包含用与生成的代码相同的语言编写的语义操作。由于这些操作很少受到静态检查,因此它们通常是错误的来源,只有在编译生成的代码时才能发现这些错误。在本文中,我们提出了一个解析器生成器前端静态检查语义动作的类型错误,并防止此类错误出现在生成的代码。类型检查过程是可扩展的,以支持许多实现语言。Java的扩展与声明式类型系统描述的扩展一起呈现。
2010-02-08 cs.PL cs.SE
Correctness and completeness of logic programs
讨论了定子句逻辑程序的正确性和完备性的证明。我们提出了一种方法来证明完整性,而证明正确性,我们采用了一种方法,应该是众所周知的,但往往被忽视。此外,我们展示了如何证明的完整性和正确性的存在SLD树修剪,并指出,近似规范简化规范和证明。我们比较证明方法声明式诊断(算法调试),表明近似规范消除了后者的一个主要缺点。我们认为,我们的证明方法反映了程序的自然声明性思维,它们可以正式或非正式地用于日常编程。
2015-05-17 cs.LO cs.PL
Mystra: Declarative Dynamic Taint Analysis via Shadow Virtual Machine
Johns Hopkins University(约翰斯·霍普金斯大学)
研究针对解释型语言的动态污点分析问题,核心方法是引入影子虚拟机并设计声明式污点规范语言Mystra,主要贡献是实现工具Shar,在准确性和性能上均有出色表现,如V8实例召回率高且零误报,运行时开销低。
2026-07-16 cs.PL cs.SE
Imperative vs. Declarative Programming Paradigms for Open-Universe Scene Generation
本文提出一种命令式编程范式,让LLM生成逐步程序以迭代放置对象,生成复杂三维场景布局,并通过无需LLM的错误修正机制提高鲁棒性,实验表明人类偏好度远超声明式系统。
2025-10-17 cs.GR cs.PL
Information-gain computation
University of California, Davis(加州大学戴维斯分校)
尽管有大量的激励措施,软件的正确性仍然是一个难以捉摸的目标。声明式编程技术,其中算法是从所需行为的规范中派生出来的,提供了解决这个问题的希望,因为在编程中,在规范而不是算法方面存在复杂性的组合降低,并且可以直接在规范中表达和执行任意所需属性。然而,性能上的限制阻止了使用声明性规范的编程成为通用编程的主流技术。为了解决性能瓶颈,从规范中派生的算法,我提出了信息增益计算,一个框架,自适应评估策略是用来有效地执行搜索,派生算法,提供有关查询的信息最直接。在这个框架内,压缩搜索空间的机会,这表明,信息理论的界限,这样一个系统的性能可能会阐明和系统设计,以实现它们。在一个简单的测试程序的自适应评估的初步实证研究,评估策略适应成功地评估一个查询有效。
2017-08-14 cs.AI cs.IT cs.PL
ALEA IACTA EST: A Declarative Domain-Specific Language for Manually Performable Random Experiments
提出一种名为 Alea 的声明式领域特定语言,用于规范可人工执行的随机实验,支持静态分析概率分布和模拟执行,面向非专业程序员,设计实现仍在进行中。
2025-08-06 cs.PL math.PR
On the Effectiveness of Large Language Models in Writing Alloy Formulas
University of Texas at Austin(德克萨斯大学奥斯汀分校)
该研究通过对照实验探究大语言模型编写Alloy公式的三类应用场景,使用ChatGPT和DeepSeek在11个规约上验证了其在公式生成、等价改写及草图补全方面的良好效果,为规约编写提供了新助力。
2025-02-21 cs.AI cs.FL cs.PL
Veracity: Declarative Multicore Programming with Commutativity
人们一直在努力提供编程抽象,以减轻利用多核硬件的负担。许多编程抽象(例如,并发对象、事务存储器等)简化问题,但仍然涉及复杂的工程。我们认为,一些困难的多核编程可以改善通过声明式编程风格,程序员直接表示独立的顺序程序的片段。在我们提出的范例中,程序员以熟悉的顺序方式编写程序,并增加了明确表达代码片段顺序交换条件的能力。将这样的交换性条件放入源代码中为编译器提供了一个新的切入点,以利用交换性和并行性之间的已知联系。我们给出了一个语义程序员的顺序的角度来看,在正确的条件下,发现编译器转换的并行执行是等价的顺序语义。可串行化/可线性化不适合这种情况,因此我们引入了作用域可串行化,并展示了如何使用锁合成技术来实现它。接下来,我们描述了一种技术,通过一个新的减少从我们的交换块的逻辑规范,符号交换推理可以执行自动验证和合成的交换条件。我们用一种名为Veracity的新语言实现了我们的工作,该语言在多核OCaml中实现。我们证明了交换性条件可以在各种新的基准程序中自动生成,确认了并发加速可以随着计算的增加而被看到的期望,并将我们的工作应用于小型内存文件系统和众筹区块链智能合约的适应。
2022-04-29 cs.PL
Natural Hoare Logic: Towards formal verification of programs from logical forms of natural language specifications
形式化验证为软件的正确性提供了强有力的保证,这在安全或安全关键系统中尤为重要。霍尔逻辑是一种广泛使用的形式主义,用于以前置条件/后置条件断言的形式针对规范对软件进行严格验证。语义解析技术的进步和更高的计算能力使我们能够从自然语言文本中提取语义内容作为形式逻辑形式,具有越来越高的准确性和覆盖率。本文提出了一个基于霍尔逻辑的命令式程序形式化验证的形式化框架,该框架使用由自然语言断言的组合语义解析生成的逻辑形式。我们称这种推理方法为自然霍尔逻辑。这使得能够直接针对领域专家以自然语言指定的安全需求对软件进行形式化验证。我们认为这两个声明性断言的程序不变量和状态变化以及命令性断言,指定命令改变程序状态。我们将讨论如何推理方法可以扩展使用领域知识和实用的方法,防止语义分析器错误。
2021-03-04 cs.PL
Compiling Linear Datalog to SQL for Program Analysis
TU Darmstadt(达姆施塔特工业大学);University of Edinburgh(爱丁堡大学);EPFL(洛桑联邦理工学院);RelationalAI(关系人工智能)
本文提出将线性 Datalog 程序编译为递归 SQL 的框架,通过中间语言 Midlog 和函数依赖恢复,使现有数据库引擎高效执行程序分析,在 Umbra 上比 Soufflé 快一个数量级。
2026-09-09 cs.DB cs.PL
On completeness of logic programs
程序正确性(在命令式和函数式编程中)在逻辑编程中分为正确性和完整性。完整性意味着一个程序产生了它的规范所要求的所有答案。很少有人致力于对完备性的推理。本文给出了定规划完备性的几个充分条件。我们还研究了在SLD树的某些修剪情况下(例如,由于使用切割)保持完整性。我们将逻辑编程视为一种声明性的范例,尽可能地从任何操作语义中抽象出来。我们认为,所提出的方法是足够简单的应用,可能在一个非正式的水平,在实际的Prolog编程。我们指出近似规格的重要性。
2014-11-11 cs.LO cs.PL
GUBS, a Behavior-based Language for Open System Dedicated to Synthetic Biology
在这篇文章中,我们提出了一个领域特定的语言,GUBS(基因组统一行为规范),致力于合成生物设备的行为规范,被视为离散的开放动力系统。GUBS是一种基于规则的声明性语言。与封闭系统相比,程序总是对系统行为的部分描述。语言的语义说明了一些隐藏的非指定动作的存在,这些动作可能会改变编程设备的行为。编译框架遵循类似于自动定理证明的方案,旨在提高合成生物设计的安全性。
2012-11-19 cs.CE cs.PL
Specifying and Executing Optimizations for Parallel Programs
编译器优化,通常表示为程序图上的重写,是所有现代编译器的核心部分。然而,即使是生产编译器也有bug,这些bug很难检测和解决。当编译并行程序时,问题只会变得更加复杂;从图形表示的选择到竞争条件的可能性,优化设计人员需要考虑一系列在处理单线程程序时不会出现的因素。在本文中,我们提出了PTRANS,一个特定领域的编译器转换的形式规格说明语言,并描述其可执行的语义。PTRANS的基本方法是将程序转换描述为带有时序逻辑边条件的控制流图上的重写。PTRANS的语法允许更清晰,更易于理解的程序优化规范;其可执行语义允许这些规范充当优化本身的原型,以便候选优化可以在继续将其包含在编译器中之前进行测试和改进。我们演示了使用PTRANS的状态,测试,并完善规范的冗余存储消除并行程序的优化。
2014-07-30 cs.LO cs.PL
$\{log\}$: Set Formulas as Programs
$\{log\}$是一种程序设计语言,介于约束逻辑编程、集合编程和声明式编程之间。但是$\{log\}$也是有限集合和有限二元关系理论的可满足性求解器。有了$\{log\}$,程序员可以使用集合论和二元关系的所有功能编写抽象程序。这些程序不是很有效,但它们非常接近规范。其正确性更加明显。此外,$\{log\}$程序也是设定的公式。因此,程序员可以再次使用$\{log\}$来自动证明他们的程序验证非平凡属性。在本文中,我们通过几个例子来展示这种开发方法。
2021-04-16 cs.LO cs.PL cs.SE
Moderately Complex Paxos Made Simple: High-Level Executable Specification of Distributed Algorithms
本文介绍了一种高级语言和方法的应用,在开发更简单的规范更复杂的变种的Paxos算法的分布式共识。这些规范适用于具有抢占、复制状态机和重新配置的Multi-Paxos,并通过状态减少和故障检测进行了优化。语言是DistAlgo。关键是使用非确定性等待和消息历史查询,在高级别上精确地表达复杂的控制流和同步条件。我们获得了完整的可执行规范,几乎完全是声明性的-除了发送和接收的消息集之外,只更新协议轮的一个数字。我们展示了以下结果:1.分布式算法的英文和伪代码描述可以在高层次上完全准确地捕获,而无需添加,删除或重新制定算法细节以适应较低层次,更抽象或更不直接的语言。2.我们创建了比以往所有规范更高层次的控制流和同步条件,得到了更简单、更小的规范,甚至比省略了许多算法细节的抽象规范匹配或更小。3.简单的规范使我们很容易发现无用的回复,不必要的延迟,以及在以前发布的规范中的活性违规(如果消息可能丢失),只需遵循简化的算法流程。4.产生的规范可以直接执行,我们可以清楚地表达优化,产生显着的性能改善,天真的执行和促进合并进程的一般方法。5.我们系统地将由此产生的规范翻译成TLA+,并开发了机器检查的安全证明,这也使我们能够检测和修复早期未发布的规范中的细微安全违规。
2019-08-12 cs.DC cs.PL
ClassInvGen: Class Invariant Synthesis using Large Language Models
Stanford University(斯坦福大学);Microsoft Research(微软研究院);Purdue University(普渡大学)
本文提出ClassInvGen,利用大语言模型生成C++等主流语言的可执行类不变式及测试输入,优于纯LLM方法和Daikon等传统技术,提供基准测试和案例研究验证其有效性。
2025-06-10 cs.AI cs.PL cs.SE
Mover Logic: A Concurrent Program Logic for Reduction and Rely-Guarantee Reasoning (Extended Version)
University of California, Santa Cruz(加利福尼亚大学圣克鲁兹分校);Williams College(威廉姆斯学院)
研究多线程软件正确性推理中RG逻辑函数规范难复用问题,提出移动逻辑,通过原子函数概念扩展RG逻辑,避免稳定化要求,实用验证器已证其优势,移动逻辑为该领域未来工作奠定基础。
2026-07-28 cs.PL
Visual Backpropagation
Inductive Solutions, Inc.(归纳解决方案公司);New York University Tandon School of Engineering(纽约大学坦登工程学院)
我们展示了如何声明性的函数编程规范的反向传播产生一个可视化和透明的实现电子表格内。我们称我们的方法为Visual Backpropagation。这种反向传播实现利用数组工作表公式,手动计算,并具有类似于脉动数组处理的计算顺序。该实现不使用隐藏的宏,也不使用用户定义的函数;没有循环,赋值语句或链接到任何用传统语言编写的过程程序。作为示例,我们将Visual Backpropagation解决方案与标准回归问题的Tensorflow(Python)解决方案进行了比较。
2019-06-06 cs.LG cs.PL