📜  原型验证系统(PVS)(1)

📅  最后修改于: 2023-12-03 15:37:04.879000             🧑  作者: Mango

原型验证系统(PVS)

简介

原型验证系统(Prototype Verification System,PVS)是一个用于机器可读机器验证的交互式定理证明器,由斯里兰卡布赖顿大学和美国斯坦福大学的计算机科学家合作开发。

PVS使用基于类型的语言规范描述和验证程序的性质。PVS支持多种证明技术,包括基于自动化的SMT求解器,基于交互的定理证明,基于模型检测和基于抽象解释。

特点
基于类型

PVS使用类型转换来表示程序中的各种元素,并对这些元素进行检查和验证。PVS使用依赖类型来检查程序的正确性,它还提供了强大的类型推理功能,可以自动推导类型信息。

全自动证明

PVS集成了多种自动化证明技术,包括基于SMT求解器的证明,基于模型检测的证明,基于抽象解释的证明等。这些技术可以帮助程序员快速地验证程序的正确性。

可扩展

PVS提供了丰富的库和工具,可帮助程序员快速开发和验证程序。同时,PVS还支持自定义规范和证明策略,可以根据不同的需求进行定制。

使用场景

PVS适用于开发高可靠性的系统,并且可以应用于各种行业,例如航空航天、汽车、医疗等。PVS被广泛应用于研究、教育和工业界。

示例

以下是一个简单的PVS程序,用于验证一个二分查找算法的正确性。

%include "nat.pvs"

%begin

%search

num_positions: pos:
    pos = num(positions)

%define
        binary_search(A:arr[nat], x:nat): bool =
            %pre A_sorted(A, 0, n - 1)
    let n be the size of A in nat
        lo be 0,
        hi be n - 1
        while lo <= hi
        do let mid be (lo + hi) div 2
        if A[mid] == x
        then true
        elseif A[mid] < x
        then lo :by= mid + 1
        else hi :by= mid - 1
        P:
    pos :num_positions := if binary_search(A, x)
        then the position of x in A
    else -1

%end

在这个例子中,我们定义了一个名为binary_search的函数,使用二分查找算法搜索一个已排序数组中的元素。函数使用了PVS的类型转换和类型推导功能,使用了PVS的全自动证明技术来证明程序的正确性。

结论

原型验证系统(PVS)是一个强大的交互式定理证明器,适用于开发高可靠性的系统。PVS使用基于类型的语言规范描述和验证程序的性质,并支持多种证明技术,包括基于自动化的SMT求解器,基于交互的定理证明,基于模型检测和基于抽象解释。PVS被广泛应用于研究、教育和工业界。