为什么最小定点(lfp)在程序分析中很重要


11

我试图对程序分析中最小不固定点(lfp)的重要性有一个全面的了解。例如,抽象解释似乎使用了lfp。关于程序分析的许多研究论文也都集中在寻找最小固定点上。

更具体地说,这篇Wikipedia中的文章:Knaster-Tarski定理提到lfp用于定义程序语义。

它为什么如此重要?任何简单的例子都可以帮助我。(我正在尝试了解大图)。

编辑

我认为我的措辞不正确。我不质疑lfp的重要性。我的确切问题(初学者)是:计算lfp对程序分析有何帮助?例如,为什么/如何抽象解释使用lfp?如果抽象域中没有lfp,会发生什么?

希望我的问题现在更具体。


@DW这是程序分析中的初学者问题。在发布问题是否过于模糊之前,我进行了多次辩论。我正在寻找的是:lfp在程序分析中起什么作用(当然很重要,但是如何?)。我正在寻找一个不会深入研究数学细节的答案。我认为我的问题措词也不清楚。我将编辑问题。
2015年

@DW我同意这可能不是经过充分研究的问题。但是,每当我继续阅读论文时,都会有很多数学上的细节,因此我很快就会松懈。例如,更具体地说,这篇论文《控制流的Widening》(berkeleychurchill.com/research/papers/vmcai14.pdf)对我来说似乎很抽象。它直接吸引了最小定点的计算。程序分析中的大多数论文似乎都与此问题有关。我失去了全局。我很高兴知道为什么计算lfp很重要。
2015年

Answers:


13

编程中任何形式的递归或迭代实际上都是一个固定点。例如,while循环的方程式为

while b do c done  ≡  if b then (c ; while b do c done)

这是说,while b do c done是一个解决方案W的方程的

W  ≡  Φ(W)

在哪里Φ(x) ≡ if b then (c ; x)。但是,如果Φ很多固定点怎么办?哪一个对应于while循环?编程语义学的基本见解之一是它是最固定的点。

让我们举一个简单的例子,这次是递归。我将使用Haskell。递归函数f定义为

f :: a -> a
f x = f x

是无处不在的函数,因为它永远运行。我们可以用一种更不寻常的方式来重写该定义(但它仍然可以在Haskell中使用):

f :: a -> a
f = f

所以f是身份功能的固定点:

f ≡ id f

但是每个功能都是的固定点id。在通常的域理论顺序下,“未定义”是最小的元素。实际上,我们的功能f是无处不在的功能。

whilenx1,,xnVVnVn{}(v1,,vn)VnVnVnVn{}

  • Vn{}VnVnVn{}
  • while true do skip done
  • 每个递增的序列都有一个极值

只是为了让您了解它的工作原理,程序的语义

x_1 := e

(v1,,vn)Vnvee(v1,,vn)(ve,v2,,vn)


1
+1示例。但是,我有点困惑。 But what if Φ has many fixed points?虽然我了解定点方程,但在这种情况下,W \ in L吗?我们如何在这里定义晶格?感谢您对此的进一步阐述。
2015年

在上面的评论中,我使用“ L”代表晶格(或坐姿)
拉姆

我修改了答案。
安德烈·鲍尔

感谢更新。我特别感谢它,因为它给了我关于程序的不同看法。我现在正在阅读Nielson的“应用程序的语义:正式介绍”中的“定点理论”,该观点完成了关于使用IMP语言的部分函数构造晶格的观点。
拉姆

6

这是直觉:最小固定点可帮助您分析循环。

程序分析涉及执行程序-但抽象出一些数据细节。一切都很好。抽象可以使分析比实际运行程序更快,因为它可以让您忽略不关心的方面。例如,这就是抽象解释的工作方式:它基本上模拟了程序的执行,但是仅跟踪有关程序状态的部分信息。

棘手的是当您进入循环时。该循环可以执行很多次。通常,您不希望程序分析必须执行循环的所有这些迭代,因为这样一来,程序分析将花费很长时间……甚至可能不会终止。因此,这就是您使用最少固定点的地方。如果您不知道循环将迭代多少次,那么最不固定的点基本上是您可以肯定地说出的内容。

这就是最不固定点的用途。由于在整个程序中都存在循环,因此在整个程序分析中使用最少的固定点。最少的固定点很重要,因为循环无处不在,并且能够分析循环也很重要。

顺便说一下,递归和相互递归只是循环的另一种形式-因此它们也倾向于使用最少固定点来处理。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.