你在这里: 主页 教学 2024年夏季学期 程序验证(讲座)

程序验证(讲座)

课程类型 讲座
讲师
多米尼克·克伦普,弗兰克·舒赛尔Lena Funk,Andreas Podelski教授
讲座 周一16:15-18:00,101号楼SR 01-009/13室
星期三14:15-16:00,101号楼HS 00-026室
锻炼 与讲座紧密结合
语言 英语
考试 待定
课程目录 程序验证(讲座)

新闻

  • 2024-04-02:链接至ILIAS课程补充
  • 2024-04-02:课程网站在线

动机

你曾经写过一个不能正常工作的计算机程序吗?也许对于局外人来说,每个程序员的反应都是“是的”,这令人惊讶,因为特别是在软件开发过程中,错误的程序是规则而非例外。

我们如何处理代码中经常出现错误的问题?有两种典型的方法:

  1. 我们可以编写测试。如果程序产生预期的输出,我们检查给定的输入
  2. 我们可以非常仔细地分析代码。

即使您非常仔细地分析代码并进行了一些测试,您的代码中是否有错误?即使对于这个问题,答案“是”也不奇怪,因为测试不能捕获程序的所有行为,而且代码分析是冗长且容易出错的。从我们日常使用电子设备的经验中,我们知道不仅计算机科学专业的学生,而且专业程序员经常无法编写正确的代码。事实上,有一长串昂贵或安全关键的故障软件系统表明,问题不仅在于程序员的草率,还在于需要新的方法来提高软件的可靠性。

在这节课中,我们将学习一种称为软件验证的方法。首先,我们将正式声明属性,例如,如果程序到达第42行,则变量x为正,或者如果输入与23不同,则不会发生溢出。然后我们将学习如何编写数学证明,证明给定的程序满足给定的属性。

不幸的是,找到这样的数学证明可能会很枯燥和困难,而且人类在给出数学证明时也容易出错。因此,我们希望让计算机完成这项任务。

在这节课中,我们将看到一些算法,这些算法使计算机能够发现计算机程序中的错误,或者找到证明没有错误的证据。

 

目录

虽然我们将使用工具,但这是一个理论性的讲座,我们将在其中学习程序验证的基本概念。

我们经常将问题归结为逻辑公式的可满足性问题。(因此,如果你不喜欢数学逻辑,你可能不想听这节课。)例如,下面公式的一个令人满意的赋值将向我们展示如何违反所描述程序中的断言语句。

x_0>=0/\y_0>=0/\ x_0<=4294967296/\y_0<=4294967296/\x_0+y_0<=42/\y_0>=100/\x_1=(2*x_0-y_0)%4294967296/\x+y<100

 

为了熟悉逻辑推理,本课程将从命题逻辑和一阶逻辑的介绍开始。然后,我们将正式介绍霍尔微积分,它将允许我们说明程序的正确性,并给出程序正确的数学证明。

在整个讲座中,我们将使用类似Z3 SMT求解器Ultimate Automizer软件验证程序为了在实际例子中看到我们的算法的效果。例如,如果我们想知道下面的C程序是否正确,我们可以询问Ultimate Automizer.

讲座

每周有两次现场讲座。练习课(见下文)被整合到讲座中。

主要课程材料是幻灯片和练习。这个演讲幻灯片与演讲稿非常相似,由两种幻灯片组成。首先,我会在演示中展示一些幻灯片。其次,这些幻灯片中有一些附有更多详细信息的附加幻灯片(带有紫色文本的幻灯片)。我们将在整个学期更新幻灯片。

我们很高兴能改进课程材料。如果你有问题,并且你认为应该更详细地解释一些事情,那么请让我们知道。

练习

我们每周上传两张练习表:
  • 每周一晚上,我们都会上传一份简短的练习表。简短的练习表是为了帮助准备周三的讲座,应该在讲座之前提交(周三,14:00)。
  • 每周三晚上,我们都会上传一份更长的练习表。此练习表应在下周一上课前(周一16:00)提交。

您可以通过以下方式以电子方式将解决方案提交给练习ILIAS公司。您的提交将被标记,您将收到个人反馈。此外,我们将在每堂课开始时讨论练习的解决方案。

你可以(我们鼓励你)与同学讨论练习和可能的解决方法。但是,请自己写下并提交解决方案。

要通过本次讲座的“Studienleistung”考试,您必须获得至少50%的练习点(总结所有练习表),你必须至少做一次练习在练习课上。这样做的目的是训练自己以正式正确的方式写东西,并练习谈论讲座的概念。你对练习的解决方案将帮助我们评估你的知识,并相应地调整讲座。

考试

待定

文学类