Relational Reactive Programming: miniKanren for the Web
本文提出关系式响应式编程方法,通过实现响应式 Javascript 版 miniKanren 和集成编程模型,解决前端开发中模型与视图同步演化问题。
2024-08-30 cs.PL
Tackling the Awkward Squad for Reactive Programming: The Actor-Reactor Model
针对响应式编程在真实应用中难以处理长时间计算、副作用及命令式与响应式代码协调的问题,提出 Actor-Reactor 模型,通过严格分离与数据流组合,在 Stella 语言中实现验证。
2023-06-21 cs.PL
Smoothly Navigating between Functional Reactive Programming and Actors
我们正式定义了一个优雅的多范式统一的功能反应式编程,演员系统,面向对象编程。这就实现了一种直观的声明式编程,在保持安全性的同时获得了并发性的强大功能。我们使用对象和引用功能来突出和驯服命令式功能:引用功能跟踪别名和可变性,对象功能跟踪I/O。形式上,我们的类型系统限制了不纯代码的范围、影响和交互。- 作用域:输入为纯的表达式将表现出确定性。- 影响:避免了数据竞争和同步问题。参与者非确定性行为的唯一方法是根据消息传递顺序改变其状态。- 相互作用:信号提供了命令式代码和函数式代码之间的功能边界,防止不纯代码使函数假设无效。
2021-01-08 cs.PL
Juniper: A Functional Reactive Programming Language for the Arduino
本文介绍了Juniper的设计和实现:一种针对Arduino和相关微控制器系统的功能反应式程序设计语言(FRP)。Juniper提供了许多高级功能,包括参数多态函数、匿名函数、自动存储管理和不可变数据结构。还包括一个标准库,提供了许多有用的FRP信号处理功能。Juniper被翻译成标准C++,并使用现有的Arduino开发工具进行编译,使Juniper程序能够适应资源受限的设备,并实现与这些设备的现有C++库的无缝互操作性。
2019-11-29 cs.PL
Simply RaTT: A Fitch-style Modal Calculus for Reactive Programming without Space Leaks
函数式反应式编程(FRP)是一种使用信号和事件进行编程的范例,允许用户在高抽象级别上描述反应式程序。要做到这一点,FRP语言必须确保所有程序都是因果关系的,并且可以在不引入空间泄漏和时间泄漏的情况下实现。为此,某些FRP语言不提供对信号的直接存取,而只是提供对信号函数的存取。最近,模态类型已被建议作为一种替代方法,以确保在同步情况下的FRP语言的因果关系,直接存取的信号和事件的抽象。本文提出了一种新的反应式编程模式演算Simply RaTT。与以前的演算不同,Simply RaTT使用Fitch风格的方法来处理模态类型,这简化了类型系统,使程序更加简洁。呼应Krishnaswami以前的结果为不同的语言,我们设计了一个操作语义,安全地执行简单的RaTT程序没有空间泄漏。我们还确定了其他模态FRP语言中存在的时间泄漏的来源:延迟计算中不动点的展开。Simply RaTT型系统消除了这些时间泄漏。
2019-06-11 cs.PL
Functional Reactive Programming with Effects, A More Permissive Approach
本文提出一种扩展 WORMHOLES 的函数式响应式编程语言,将资源分为输入/输出资源与内部资源,放宽单次使用限制,并证明程序可翻译为等价的无效应 YAMPA 程序。
2025-03-08 cs.PL
Topology-Level Reactivity in Distributed Reactive Programs: Reactive Acquaintance Management using Flocks
响应式编程是一种流行的事件驱动应用程序编程范式,并且经常被提议作为编写分布式应用程序的范式。其中一种类型的应用程序是 *prosumer* 应用程序,它们是分布式应用程序,既产生又消费许多事件。我们分析了使用反应式程序设计语言或框架来实现产消者应用程序时出现的问题。我们发现,开放网络的假设,这意味着各种类型的产消者自发地加入和离开网络,可能会导致大量的代码复杂性或运行时效率低下。这些问题的基础在于熟人管理:在生产者加入和离开网络时发现他们的能力,并在整个反应式程序中正确地保持这种状态。大多数现有的反应式程序设计语言和框架对管理熟人的支持有限,导致代码意外复杂或计算效率低下。在本文中,我们提出了反应式程序的熟人管理。首先,我们设计了一个熟人发现机制来创建一个自动发现网络上的产消者的群体。群的一个重要方面是它们与反应式程序的集成,使得反应式程序可以正确有效地维护其状态。为此,我们设计了一个熟人维护机制:一种新型的函数式反应程序设计语言操作符,我们称之为“部署-*”。“deploy-*”操作符能够对所发现的产消者的随时间变化的集合做出正确和有效的反应。所提出的机制是在一个反应式程序设计语言称为斯特拉,它作为一个语言的车辆来展示我们的方法的想法。我们的熟人管理的结果在计算效率和惯用的反应代码的实现。我们通过基准测试定量评估我们的方法,这些基准测试表明我们的实现是有效的:每当发现一个新的产消…
2022-02-18 cs.PL
Reactive Graphs for Efficient Markov Chain Monte Carlo Inference in Probabilistic Programming Languages
KTH Royal Institute of Technology(瑞典皇家理工学院);Swedish Museum of Natural History(瑞典自然历史博物馆)
提出一种自动将概率程序转换为动态反应图的方法,显式表示数据依赖,使得MCMC提议仅重新计算依赖已重绘随机变量的部分,从而提升推断效率。
2026-06-29 cs.PL
Simple Modal Types for Functional Reactive Programming
IT University of Copenhagen(哥本哈根信息技术大学)
本文提出了一种简化模态类型系统的功能反应式编程语言,通过改进信号语义提升语言表达力和效率。
2026-08-05 cs.PL
Choreographies for Reactive Programming
模块化编程是软件开发的基石,因为它允许从简单组件的组装中构建复杂的系统,并支持可重用性和替代原则。在分布式环境中,组件组装由通信支持,通信通常需要遵循指定的交互协议。在本文中,我们提出了一种语言的分布式系统的模块化开发,组件的组装是由指定的通信协议的编排支持。我们的语言允许单独的组件行为,给出的反应数据端口,和编排,指定为第一类实体。这允许我们考虑组件和编排的可重用性和替换原则。我们展示了我们的模型如何可以被编译成一个更可操作的角度在一个可证明是正确的方式,我们提出了一个类型的纪律,解决通信安全和系统的进展,其中的替代性的概念自然出现。
2018-01-24 cs.PL
Reactive Programming without Functions
本文提出一种无函数、无提升的纯响应式编程语言,以 reactors 与 deployments 为核心并增量引入状态、动态依赖、递归和词法作用域,从而避免 EDSL 中宿主代码带来的发散与范式失配问题。
2024-03-04 cs.PL
Active Expressions: Basic Building Blocks for Reactive Programming
没有反应式编程的现代软件开发是难以想象的。响应式编程支持对用户输入、网络消息和其他事件做出响应的广泛的当代软件系统。虽然反应式编程是一个活跃的研究领域,但反应式概念的实现仍然具有挑战性。特别是,变化检测是实现反应式概念时的一个困难但不可避免的必要条件。通常,变更检测机制并不打算重用,而是与特定的变更解决机制紧密耦合。因此,开发人员经常不得不重新实现类似的抽象。仍然缺少用于变化检测的可重用原语。为了找到一个合适的原语,我们确定现有的反应概念的共性。我们发现了一类反应概念,基于状态的反应概念。所有基于状态的反应式概念都有一个共同的变化检测机制:它们检测表达式求值结果的变化。在此基础上,我们提出了一种可重用的原语活动表达式。通过抽象变化检测的繁琐实现细节,主动表达式可以简化反应式编程概念的实现。我们评估的设计活动表达式重新实现了一些现有的基于状态的反应式的概念,使用它们。由此产生的实现突出了活动表达式的表现力。当推理反应式编程概念时,活动表达式可以将基本部分与非基本部分分离。通过使用活动表达式作为变更检测的原语,反应式语言构造和运行时支持的开发人员现在可以专注于设计应用程序员应该如何对变更做出反应。最终,我们希望主动表达式能够鼓励人们尝试新的反应式编程概念,并由此产生更多的可供探索的概念。
2017-03-31 cs.PL cs.SE
Bidirectional Reactive Programming for Machine Learning
Inria(法国国家信息与自动化研究所);Google DeepMind(谷歌DeepMind)
本文提出一种支持向后递推的双向反应式编程构造,并证明其能自然表达反向传播、批归一化、双向RNN及强化学习等机器学习核心算法。
2023-11-28 cs.LG cs.PL
Density-Based Semantics for Reactive Probabilistic Programming
针对概率同步语言仅对已调度方程定义语义的局限,提出两种与调度无关的基于密度函数流的语义(共迭代与关系语义),并利用关系语义证明了状态空间模型优化推理所需程序变换的正确性。
2023-09-07 cs.PL
Tempo: Reconstructing Synchronous Reactive Programming with OCaml 5 Effects
Univ. Orléans, INSA Centre Val de Loire, LIFO UR 4022(奥尔良大学,中央卢瓦尔河谷国立应用科学学院,LIFO UR 4022)
研究能否在普通OCaml 5内重构同步响应式编程核心机制,提出基于代数效果和深度处理程序的Tempo库运行时,通过效果操作界定暂停点、处理程序具体化延续为任务,比较研究量化其开销并确定主导成本的运行时机制。
2026-07-28 cs.LO cs.PL
ROSY: An elegant language to teach the pure reactive nature of robot programming
Universidade do Minho(米尼奥大学);INESC TEC(葡萄牙系统与计算机工程研究所)
机器人技术非常有趣,长期以来一直被认为是教授编程的好方法,同时与数学、物理或电子等工程和科学的其他分支建立了鼓舞人心的联系。虽然机器人和编程之间的这种共生关系被认为是非常有益的,但教育方法往往觉得有必要隐藏机器人系统的潜在复杂性,但结果是无法将机器人编程的反应本质传递给未来的机器人专家和程序员。本文介绍了ROSY,一种通过机器人技术教授新手程序员的新语言。它的函数式风格既熟悉高中代数背景,又体现了机器人编程固有的反应性。在更高的抽象层次上工作也教导了将机器人软件分解为交互控制器集合的有价值的设计原则。尽管它很简单,但ROSY是完全有效的Haskell代码,与ROS生态系统兼容。我们通过演示如何轻松清晰地表达非平凡的应用程序,揭示其良好的功能编程基础,并开发支持Web的机器人编程环境,为我们的语言提供了令人信服的案例。
2019-11-08 cs.PL cs.RO
Diamonds are not forever: Liveness in reactive programming with guarded recursion
当设计函数式反应式编程(FRP)的语言时,主要的挑战是为用户提供一个简单、灵活的界面,以便在高抽象级别上编写程序,同时确保所有程序都可以用低级语言有效地实现。为了迎接这一挑战,一个新的家庭的模态FRP语言已被提出,在中野的守护不动点算子的变种用于编写递归程序,保证属性,如因果关系和生产力。作为一个明显的扩展,也有人建议使用线性时态逻辑(LTL)作为一种通过Curry-Howard同构进行反应式编程的语言,允许将终止,活性和公平性等属性编码在类型中。然而,这两个想法是相互冲突的,因为不动点算子将非终止性引入到应该提供终止保证的归纳类型中。在本文中,我们表明,关于模态时间步长运营商的LTL的一个子模态的一个用于保护递归(而不是等同于他们),可以得到一个模态类型系统能够表达活性性质,同时保留权力的保护不动点运营商。我们介绍的语言活泼的RaTT,一个模态FRP语言与守卫不动点运算符和一个“直到”类型的构造函数在LTL,并显示如何编程的事件和公平的流。使用一个步骤索引的Kripke逻辑关系,我们证明了活泼的RaTT的业务性质,包括生产力和因果关系,以及终止和活性预期的LTL类型的属性。最后,我们证明了Lively RaTT的类型系统保证了不存在隐式空间泄漏。
2020-08-20 cs.PL
Categorical Semantics for Functional Reactive Programming with Temporal Recursion and Corecursion
函数式反应式编程(FRP)使得以声明的方式表达计算的时间方面成为可能。最近,我们发展了两种类型的FRP范畴模型:抽象过程范畴(APC)和具体过程范畴(CPC)。此外,我们发现,APC泛化CPC。在本文中,我们扩展APC与额外的结构。这个结构对与时间相关的递归和共递归运算符进行建模。我们表明,由此产生的分类模型概括了那些CPC施加额外的约束时间尺度。这个限制归结为排除了$ω$ -超级任务,它与芝诺的阿基里斯和乌龟悖论密切相关。
2014-06-09 cs.LO cs.PL
Reactive Imperative Programming with Dataflow Constraints
数据流语言为动态应用程序中指定对象之间的约束提供了自然支持,其中程序需要有效地对环境的变化做出反应。研究人员长期以来一直在研究如何通过将它们嵌入到过程语言中来利用Challow-constraints。然而,以前的混合命令式/并行系统需要语法扩展或专门的数据类型库来将命令式程序绑定到并行求解器。在本文中,我们提出了一种新的方法,顺利地结合了这两种范式,而不会给程序员带来不必要的负担。在我们的框架中,程序员可以定义主机命令式语言的普通命令,这些命令强制执行存储在“反应式”内存位置中的对象之间的约束。反应对象可以是宿主语言中的任何合法类型,包括基本数据类型、指针、数组和结构。约束在每次输入内存位置改变时自动重新执行,让程序表现得像电子表格,其中某些变量的值取决于其他变量的值。通过改变宿主语言的基本操作的语义来读取和修改对象,从而透明地处理约束求解机制。我们提供了一个正式的语义和描述我们的技术到C/C++的一个具体实施例,展示了如何有效地实现它在传统的平台上使用现成的编译器。我们讨论了相关的应用反应的情况下,包括增量计算,观察者设计模式,和数据结构修复。我们的实现的性能相比,特设问题特定的变化传播算法和以语言为中心的方法,如自调整计算和主体/观察者通信机制,表明所提出的方法是有效的,在实践中。
2011-04-12 cs.PL
Probabilistic Programming Concepts
现今存在大量不同的概率程序设计语言,它们都用原语扩展了传统的程序设计语言,以支持复杂的结构化概率分布的建模。这些语言中的每一种都使用自己的概率原语,并具有特定的语法,语义和推理过程。这使得很难理解底层的编程概念,也很难理解不同语言之间的差异。为了更好地理解概率编程,我们确定了一些核心的编程概念的基础上使用的各种概率语言的原语,讨论了执行机制,他们需要和使用这些定位国家的最先进的概率语言及其实现。在这样做的同时,我们专注于逻辑程序设计语言,如Prolog,这已经开发了20多年的概率扩展。
2013-12-16 cs.PL
Implementing a Library for Probabilistic Programming using Non-strict Non-determinism
本文介绍了PFLP,函数逻辑程序设计语言库里的概率编程库。它演示了函数逻辑程序设计语言的概念如何支持概率编程库的实现。事实上,函数逻辑和概率编程的范式是紧密相连的。也就是说,一个地区的语言特征存在于另一个地区,反之亦然。例如,从函数逻辑编程中已知的非确定性选择和调用时间选择的概念分别与概率编程中的随机记忆和概率选择相关并一致。我们将进一步看到,与标准的基于列表的实现相比,基于函数逻辑编程概念的实现在性能方面具有优势,甚至可以与成熟的概率程序设计语言竞争,我们通过几个基准测试来说明。逻辑程序设计理论与实践(TPLP)
2019-05-17 cs.PL
A Formal Model for Direct-style Asynchronous Observables
像F#、C#和最近的Scala这样的语言提供了“异步”编程模型,旨在通过避免基于回调的编程模型中固有的控制反转来使异步编程更容易。本文提出了一种新的方法来集成异步模型与可观察流的反应式扩展模型。响应式扩展在.NET平台上最为知名,其编程模型的广泛使用的实现也存在于Java、Ruby和其他语言中。本文贡献了一个形式化的统一的“反应异步”模型的背景下,基于对象的核心演算。我们的正式模型捕捉到的异步可观的协议使用堆演化属性的本质。我们证明了一个主题约简定理,该定理意味着约简保持堆的演化性质。因此,对于良好类型的程序,我们的演算确保协议的异步可观的。
2015-11-02 cs.PL
Interactive Music and Synchronous Reactive Programming
本文介绍了Skini,一种交互式结构音乐的编程方法和执行环境。有了这个系统,作曲家用HipHop.js同步反应语言编写他的乐谱。然后,他们被执行,或发挥,在现场音乐会,在与观众的互动。该系统旨在帮助作曲家在作品的决定性和与公众互动的非决定性之间找到一个很好的平衡。每一个Skini评分的执行都会产生不同但美学上一致的解释。这部作品在音乐领域提出了许多问题。如何将构图和互动结合起来?当听众影响下一场演奏时,如何控制音乐风格?与生成音乐有什么可能的联系?这些都是Skini系统的重要问题,但它们超出了本文的范围,本文只关注该系统的计算机科学方面。从这个角度来看,主要的问题是如何编程的分数和在哪种语言?通用语言是不合适的,因为它们的基本结构(即,变量、函数、循环等)与表达音乐和音乐约束所需的结构不匹配。我们发现,同步程序设计语言是一个更好的适合,因为它们依赖于时间结构,可以直接用于表示乐谱,因为他们的可塑性,使作曲家很容易实验与艺术的变化,他们的初始分数。本文主要研究分数规划。它揭示了一个作曲家应该遵循的过程,从他的第一个音乐直觉到音乐作品的产生。本文介绍了一些摘录的编程的古典音乐作品,它然后精确地涉及到一个实际的录音。电子音乐和爵士乐的例子也提出了,与音频工件,以证明系统的多功能性。最后,简要介绍了过去的现场音乐会作为一个证据的可行性系统。
2020-06-04 cs.PL
Consistent Distributed Reactive Programming with Retroactive Computation
本文提出一种混合反应式/回溯式与命令式计算的编程语言核心演算,支持分布式信号源及数据丢失恢复,并通过定理和微基准测试保证时间一致性,为物联网分析提供基础。
2025-02-27 cs.PL
From Events to Reactions: A Progress Report
Syndicate是一种新的协调、并发程序设计语言。它在线程的共享一切范式和参与者的无共享方法之间占据了一个新的点。辛迪加演员通过一个精心控制的数据库交换信息,分享共同的知识,该数据库清楚地界定了对话的范围。这种方法显然简化了并行活动的协调。然而,使用Syndicate编程的经验表明,需要提高语言抽象的水平。除了编写事件处理程序和直接管理事件订阅之外,该语言还必须支持响应式编程。本文介绍了面向事件的辛迪加编程,然后描述了一个初步的设计,以增强它与新的反应式编程结构。
2016-06-20 cs.PL
Harmonizing Signals and Events with a Lightweight Extension to Java
当前对与周围环境无缝连接的需求使软件更具反应性。例如,这种需求在由物联网组成的系统中是显而易见的。这样的系统包括响应于外部或内部事件而周期性地更新的一组反应值,以在这样的更新被传播到其他反应值的意义上形成反馈流。实现这种反应值的两种有效方法已经被提出:基于事件编程中的事件机制和函数反应编程中的信号。这两种方法现在在几种语言中混合使用,如Flaptrix和REScala,这使得这些语言在模块化反应式软件实现方面表现突出。例如,REScala提供了一个丰富的API,其中包含将事件转换为信号的函数,反之亦然。在本文中,我们探索另一种更简单的方法在反应式程序设计语言的设计空间:事件机制与信号相协调,从而简化编程接口,主要是基于信号。基于这种方法,我们实现了SignalJ,一个简单的扩展Java的事件和信号。我们值得注意的发现是(1)事件可以表示为信号的更新,(2)这样一个有效的信号可以使用注释来表示,而不是为信号引入类型和构造函数,以进一步简化语言。本文的另一个贡献是SignalJ的形式化模型。由于事件和信号的机制可能相互干扰,这种混合有时会导致令人惊讶的行为。例如,信号的功能行为受到事件的命令性特征的影响。因此,理解这种混合的形式模型实际上很重要。核心演算,Featherweight SignalJ(FSJ),开发作为Featherweight Java的扩展,并提供证明,以确保FSJ的…
2018-03-27 cs.PL
Multi-Language Probabilistic Programming
本文提出MultiPPL,一种概率多语言,实现两种概率编程语言的互操作,结合精确离散推理与近似重要性采样,支持异构概率程序的推理,并证明其可靠性。
2025-02-26 cs.PL
Design and Implementation of Probabilistic Programming Language Anglican
Anglican是一个概率编程系统,旨在与Clojure和其他JVM语言互操作。我们介绍了程序设计语言英国,概述了我们的设计选择,并深入讨论了英国的语言和运行时,包括基于宏的编译,扩展的CPS为基础的评估模型,概率范式,如分布,随机过程和推理算法的功能表示的实现。我们表明,概率函数语言可以有效地实现,并与传统的函数语言紧密集成,只有适度的计算开销。我们还展示了如何先进的概率建模概念自然映射到功能的基础。
2016-11-30 cs.PL
Synthesizing Functional Reactive Programs
函数式反应式编程(FRP)是一种简化反应式程序构造的范例。有许多库实现了FRP的具体化,使用了抽象,如Application,Monads和Arrows。然而,找到一个好的控制流,正确地管理状态并在正确的时间切换行为,仍然是开发人员面临的一个重大挑战。一个有吸引力的替代方案是指定行为而不是编程,最近开发的逻辑:时间流逻辑(TSL)使之成为可能。然而,它还没有被探索到目前为止,如何控制流模型(CFM),从TSL规范合成,可以变成可执行代码,是与FRP上的库兼容。我们弥合这一差距,表明CFMs确实是一个合适的形式主义变成应用,一元,箭头FRP。我们证明了我们的翻译在现实世界的厨房定时器应用程序,我们翻译到桌面应用程序使用箭头化FRP库Yampa,一个Web应用程序使用的一元三便士GUI库,并使用应用硬件描述语言ClaSH硬件的有效性。
2019-05-23 cs.PL
Conditioning in Probabilistic Programming
我们调查的语义复杂性的条件,概率规划的一个主要特点。我们提供了一个最弱的(自由)前置条件(w(l)p)的基本概率程序设计语言pGCL扩展条件的语义。我们证明了定量最弱(自由)的先决条件与条件(自由)期望回报的马尔可夫链,并表明语义条件是一个真正的保守扩展。我们提出了两个程序转换,完全消除任何程序的条件,并证明其正确性使用的w(l)p-语义。最后,我们展示了如何的w(l)p-语义可以用来确定条件概率的参数匿名协议,并表明,一个归纳的w(l)p-语义的条件在非确定性的概率程序不存在。
2015-04-01 cs.PL
CoreDPPL: Towards a Sound Composition of Differentiation, ODE Solving, and Probabilistic Programming
本文提出 CoreDPPL,为融合概率编程、一等微分与 ODE 的高阶 DPPL 核心建立类型化形式语义,并在 Agda 中机械化证明其可靠性。
2025-03-18 cs.PL
Exact Recursive Probabilistic Programming
对递归数据的递归调用对于生成概率分布是有用的,并且概率编程允许以模块化和直观的方式来表达对这些分布的计算。精确推理也是有用的,但不幸的是,现有的概率程序设计语言不对递归数据上的递归调用执行精确推理,迫使程序员手动编写许多应用程序。我们介绍了一种概率语言,其中各种各样的递归可以自然地表达,并进行准确的推理。例如,概率下推自动机及其推广易于表达,并且可以自动导出多项式时间解析算法。我们使用与去功能化和再功能化相关的程序转换来消除递归数据类型。这些变换由线性类型系统保证是正确的,并且如果存在变换的成功选择,则保证由贪心算法找到。
2023-03-27 cs.PL
Hop and HipHop : Multitier Web Orchestration
富应用程序融合了经典计算、客户端-服务器并发、基于Web的接口以及嵌入式系统中复杂的基于时间和事件的反应式编程。为了处理它们,我们通过HipHop扩展了Hop Web编程平台,HipHop是一种专用于基于事件的流程编排的特定领域语言。借鉴Esterel的同步反应模型,HipHop基于同步并发和抢占原语,这些原语是复杂反应行为的模块化设计的关键组件。由于Hop的自反性,HipHop能够处理Web应用程序的动态性,这与Esterel不同。通过一个音乐播放器的例子,我们展示了如何使用HipHop编排代码模块化地构建一个非平凡的Hop应用程序。
2013-11-30 cs.PL
Real-Time Probabilistic Programming
本文提出实时概率编程语言概念并实现ProbTime,结合概率编程与实时原语,在汽车测试平台上验证其可用性,并提出公平性引导方法在可调度性约束下自动优化系统精度。
2024-07-08 cs.PL
Paradoxes of Probabilistic Programming
概率论程序设计语言允许程序员将表示统计和机器学习模型的条件概率分布写为使用观察语句的程序。这些程序通过在每个观察语句处累积似然性来运行,并使用似然性来引导随机选择并使用诸如重要性采样或MCMC之类的推理算法来权衡结果。我们认为,天真的似然积累没有得到理想的语义,并导致悖论时,观察语句是用来测量零事件的条件,特别是当观察语句有条件地执行随机数据。我们发现,如果我们明确地将零测量事件建模为正测量事件的极限,则悖论消失,并且我们可以通过累积无穷小概率而不是概率密度来执行这些类型的概率程序。我们的扩展改进了概率程序设计语言作为一个可执行符号的概率分布,使其更好的行为和更有表现力,通过允许程序员明确的限制是打算条件时,测量零的事件。
2021-01-22 cs.PL
Diva: A Declarative and Reactive Language for In-Situ Visualization
在大规模科学模拟中,使用自适应工作流管理进行现场可视化和分析已经成为一个日益增长的趋势。然而,协调自适应工作流与传统的过程程序设计语言可能是困难的,因为系统流是由不可预测的科学现象,这往往出现在一个未知的顺序,并可以逃避事件处理。这使得自适应工作流的实现繁琐且容易出错。最近,反应式和声明式编程范式已经被认为是其他领域中类似问题的合适解决方案。然而,有一个缺乏的研究,以适应这些方法在原位可视化和分析。在本文中,我们提出了一种语言设计和运行时系统开发自适应系统,通过声明式和反应式编程范式。我们说明了如何使用我们的方法实现自适应工作流编程系统,并证明它与燃烧模拟的用例。
2020-09-06 cs.HC cs.PL
Automated Verification of Reactive and Concurrent Programs by Calculation
反应式程序将传统的顺序编程结构与原语相结合,以允许与其他并发代理进行通信。它们在现代应用中无处不在,从组件系统和Web服务到网络物理系统和自主机器人。在本文中,我们提出了一个代数验证策略的并发反应式程序,与一个大的或无限的状态空间。我们定义了新的运营商来描述相互作用和状态更新,以及相关的方程理论。有了这个,我们可以计算一个反应式程序的指称语义,从而促进自动证明。值得注意的是,我们的推理支持迭代程序与反应不变量,Kleene代数的基础上,并行组成。我们通过验证反应缓冲区来说明我们的策略。我们的法律和战略是机械化的伊莎贝尔/UTP,我们的霍尔和他的统一编程理论(UTP)框架的实施,提供健全的保证和实际的验证支持。
2021-04-12 cs.LO cs.PL
Causal Probabilistic Programming via Magmadic Do-Notation
提出基于非结合幺半群magmads的do-notation元语言,推导因果概率编程构造,实现因果概率编程的新途径。
2026-09-03 cs.LO cs.PL
ReactiFi: Reactive Programming of Wi-Fi Firmware on Mobile Devices
网络可编程性将需要处理未来增加的网络流量和不断变化的应用需求。然而,当前没有使用高级的、易于使用的程序设计语言来对Wi-Fi固件进行编程的方法。这阻碍了新网络服务/应用的快速原型设计和部署,并阻碍了Wi-Fi网络中的持续性能优化,因为所使用的硬件平台和Wi-Fi域都需要专业知识。在本文中,我们提出了ReactiFi,一种高级反应式程序设计语言,用于在移动消费设备上对Wi-Fi芯片进行编程。ReactiFi使程序员能够实现PHY,MAC和IP层机制的扩展,而无需Wi-Fi芯片的专业知识,从而允许新的应用和网络协议。ReactiFi程序直接在Wi-Fi芯片上执行,与在主CPU上执行相比,提高了性能和功耗。ReactiFi在概念上类似于函数式反应式语言,但专用于Wi-Fi固件的特定领域需求。首先,它可以处理底层平台特定的细节,而不会干扰Wi-Fi芯片的核心功能。其次,它支持关于应用程序的内存使用的静态推理,这对于通常内存受限的Wi-Fi芯片很重要。第三,它将计算之间的依赖关系的动态变化限制为动态分支,以实现关于计算顺序的静态推理。我们在两个真实案例研究中对ReactiFi进行了经验评估。我们的研究结果表明,在Wi-Fi芯片上执行应用程序时,而不是在操作系统内核或用户空间中执行应用程序时,吞吐量、延迟和功耗都得到了显着改善。此外,我们表明,与手动编写的C代码相比,ReactiFi的高级编程…
2021-03-04 cs.NI cs.PL
Automatic Alignment of Sequential Monte Carlo Inference in Higher-Order Probabilistic Programs
概率编程是一种用于表达灵活的概率模型的编程范式。概率程序设计语言的实现采用各种推理算法,其中通常使用顺序蒙特卡罗方法。使用顺序蒙特卡罗推断的当前最先进的实现的问题是程序同步点的对齐。提出了一种基于0-CFA算法的高阶概率程序自动对齐的静态分析方法。我们评估了系统发育模型上的自动比对,显示出运行时间的显着减少和准确性的增加。
2018-12-18 cs.PL
Using human-in-the-loop synthesis to author functional reactive programs
响应异步事件的程序编写起来很有挑战性;它们很难推理,测试和调试也很棘手。因为这些程序可能有一个巨大的输入时间和交错空间,程序员可能很容易错过角落的情况。我们建议应用合成,以帮助程序员更容易地创建程序,并在其正确性有更高的信心。我们已经写了一个有效的编码的功能反应式编程(FRP)语义的基础上的功能编程在玫瑰解除列表。我们证明,这种技术是最先进的,首先比较其性能对现有的两个合成工具,产生列表操作程序,然后通过合成一套基准完整的规格。我们还提出了一个交互式工具,在该工具中,程序员以输入/输出示例或不变量的形式提供一些初始部分规范;该工具通过合成两个候选程序来发现规范中的歧义,并给用户一个区分它们的输入;用户更新规范并继续迭代直到找到正确的程序。作为评估,我们展示了使用该工具的一套基准测试,从网络编程和物联网领域,走查一个现实的网络基准测试的样本交互,表明我们可以收敛到目标程序与易处理的互动数量。作为未来的工作,我们讨论对其他FRP语言进行编码,以探索元语言特征、允许合成更大程序的分解策略以及改进的程序员工具(例如GUI),以更容易地得出规范。
2019-09-24 cs.PL
Semi-Symbolic Inference for Efficient Streaming Probabilistic Programming
在流媒体环境中,使用Rao-Blackwellized粒子滤波器(RBPF)通常可以进行有效的推理,RBPF在可能的情况下可以精确地解决推理问题,并在必要时返回采样近似。虽然RBPF可以手动实现以提供有效的推理,但流式概率编程的目标是在给定输入概率程序的情况下自动生成这种有效的推理实现。在这项工作中,我们提出了半符号推理,一种使用运行时推理系统,自动实现Rao-Blackwellized粒子滤波执行概率程序的技术。为了一起执行精确和近似推理,半符号推理系统操纵符号分布以在可能时执行精确推理,并且在必要时回到近似采样。这种方法使系统能够实现开发人员手工编写的相同RBPF。为了确保这一点,我们确定封闭的家庭分布-如线性高斯和有限离散模型-推理系统保证准确的推理。我们已经实现了运行时推理系统的ProbZelus流概率程序设计语言。尽管平均$1.6\times$放缓相比,现有的基准测试的最先进的状态,我们的评估表明,$3\times$ - $87\times$的加速是可获得的一组新的具有挑战性的基准测试,我们已经设计利用封闭的家庭。
2022-11-05 cs.PL
Deep Probabilistic Programming Languages: A Qualitative Study
IBM Research(IBM研究公司/IBM研究(注:IBM Research通常译为IBM研究,属于企业研究机构,按要求提取到公司级别))
深度概率程序设计语言试图将深度学习的优势与概率程序设计语言的优势结合起来。如果成功,这将是机器学习和程序设计语言的一大步。不幸的是,到目前为止,这种新的语言很难使用和理解。本文通过解释深度概率程序设计语言直接解决了这个问题,并通过描述其当前的优势和劣势间接解决了这个问题。
2018-04-17 cs.AI cs.PL
Modular probabilistic programming with algebraic effects (MSc Thesis 2019)
本文提出Koka Bayes库,结合代数效应处理与模块化设计,解决概率编程中推理算法的模块化实现问题。
2024-12-18 cs.PL stat.CO
Compositional Stochastic Modeling and Probabilistic Programming
概率规划是一种通过从离散时间动态切换到连续时间动态来进行随机建模的组合方法。在连续时间中,一个算子代数语义是可用的,其中并行进行的进程(可能相互作用)具有求和的时间演化算子。在此基础上,可以系统地导出用于模拟、推理和模型简化的算法。这些有用的结果可能在计算科学、机器学习及其他领域产生深远的影响。混合成分随机建模/概率编程方法也是可能的。
2012-12-03 cs.AI cs.PL
Deployable probabilistic programming
PUB+
我们提出了一个适合作为生产软件系统的一部分部署的概率编程设施的设计准则。作为一个参考实现,我们介绍Infergo,一个概率编程工具去,一个现代程序设计语言的选择服务器端软件开发。我们认为,一个类似的概率编程设施可以添加到大多数现代通用程序设计语言。概率编程能够通过基于数据的概率推理来自动调整程序参数和算法决策。为了便于增加概率编程能力,其他程序设计语言,我们分享实施的选择和技术,在开发的Infergo。我们说明了适用性的Infergo的各种用例的案例研究,并评估Infergo的性能在几个基准,比较Infergo专用的推理为中心的概率编程框架。
2019-06-20 cs.AI cs.LG cs.PL
A Compilation Target for Probabilistic Programming Languages
University of Oxford(牛津大学)
通过创造性地使用标准化的操作系统功能,包括进程、分叉、互斥和共享存储器,可以用任何程序设计语言来实现诸如用于概率编程的顺序蒙特卡罗和粒子马尔可夫链蒙特卡罗的前向推理技术。利用这一点,我们已经定义,开发和测试的概率程序设计语言中间表示语言,我们称之为概率C,它本身可以被编译成机器码的标准编译器和链接到操作系统库产生一个有效的,可扩展的,便携式的概率编程编译目标。这为优化概率编程系统开辟了一条新的硬件和系统研究路径。
2014-07-10 cs.AI cs.PL stat.ML
Modular Abstractions of Reactive Nodes using Disjunctive Invariants
我们希望将反应式程序设计语言(如Lustre)中的节点抽象为具有更简单控制结构的节点,并限制控制状态的数量。为了做到这一点,我们在谓词抽象中计算析取不变量,其中有有限数量的析取,然后我们抽象节点,每个析取代表一个抽象状态。析取不变量的计算是通过使用SMT求解表示的量词消去的形式来执行的。同样的方法也可以用来获得析取循环不变量。
2011-09-09 cs.LO cs.PL
Expectation Programming: Adapting Probabilistic Programming Systems to Estimate Expectations Efficiently
University of Oxford(牛津大学)
我们表明,概率编程系统(PPS)的标准计算管道可能是低效的估计预期,并引入期望编程的概念来解决这个问题。在期望编程中,后端推理引擎的目的是直接估计程序的期望返回值,而不是近似它们的条件分布。这种区别虽然微妙,但使我们能够通过根据我们关心的期望量身定制计算来实现标准PPS计算管道的实质性性能改进。我们实现了一个特定的实例,我们的期望编程的概念,期望编程图灵(EPT),通过扩展PPS图灵允许所谓的目标感知推理自动运行。然后,我们从理论上验证了EPT的统计合理性,并表明它在实践中提供了大量的经验收益。
2022-06-21 cs.LG cs.PL
Spreadsheet Probabilistic Programming
Invrea(Invrea公司)
电子表格工作簿内容是简单的程序。正因为如此,概率编程技术可以用于执行电子表格计算的贝叶斯反演。更重要的是,电子表格应用程序(如Microsoft Excel)中的现有执行引擎可以仅使用内置功能来完成此任务。我们证明了这一点,通过开发一个本地的Excel实现的粒子马尔可夫链蒙特卡罗变量和黑盒变分推理的电子表格概率编程。由此产生的引擎在电子表格计算上执行概率一致的推理,特别是包括包含用户定义的黑盒函数的电子表格。选择集成我们在本文中描述的功能的电子表格引擎将使其用户能够轻松开发概率模型,并通过简单的用户界面机制包含实际值来随着时间的推移维护它们。对于电子表格最终用户来说,这意味着可以访问高效且概率一致的概率建模和推理,用于不确定性下的各种决策。
2016-06-14 cs.AI cs.PL
Slice Sampling for Probabilistic Programming
University of Cambridge(剑桥大学)
我们介绍了第一个,通用的,切片采样推理机的概率程序。该引擎作为StocPy的一部分发布,StocPy是一种新的图灵完备概率程序设计语言,可作为Python库使用。我们提出了一个transdimensional概括切片采样,这是必要的推理机工作的痕迹与不同数量的随机变量。我们表明,StocPy相比其他PPL的灵活性和可用性方面,切片采样可以优于以前介绍的推理方法。我们的实验包括逻辑回归,HMM和贝叶斯神经网络。
2015-01-20 cs.AI cs.PL
Towards representation agnostic probabilistic programming
Institute for Visual and Analytic Computing(视觉与分析计算研究所)
本文提出了一种因素抽象方法,实现表示无关的概率编程,允许在统一框架中混合不同表示进行复杂模型推断。
2025-12-25 cs.AI cs.PL
Bachelor's thesis on generative probabilistic programming (in Russian language, June 2014)
这篇用俄语撰写的学士论文致力于机器学习和人工智能领域的一个相对较新的方向,即概率编程。本文简要介绍了已经存在的概率程序设计语言:Church,Venture和Anglican。它还描述了第一次实验的结果,自动归纳的概率程序。该论文于2014年6月提交,部分符合俄罗斯克拉斯诺亚尔斯克西伯利亚联邦大学数学和计算机科学系数学理学学士学位的要求。本文中所描述的工作已经在2012-2014年由作者的同事和他自己在麻省理工学院和牛津大学进行。
2016-01-26 cs.AI cs.PL
VAEL: Bridging Variational Autoencoders and Probabilistic Logic Programming
University of Bologna(博洛尼亚大学);KU Leuven(鲁汶大学)
我们提出了VAEL,神经符号生成模型集成变分自编码器(VAE)与概率逻辑(L)编程的推理能力。除了标准的潜在子符号变量,我们的模型利用概率逻辑程序来定义一个进一步的结构化表示,这是用于逻辑推理。整个过程是端到端的差异化。一旦经过训练,VAEL可以通过(i)利用神经组件中编码的先前获得的知识以及(ii)在结构化潜在空间上利用新的逻辑程序来解决新的看不见的生成任务。我们的实验提供了支持的好处,这种神经符号积分的任务泛化和数据效率。据我们所知,这项工作是第一个提出一个通用的端到端框架集成概率逻辑编程到一个深生成模型。
2022-05-25 cs.LG cs.PL