【发布时间】:2019-05-24 11:26:18
【问题描述】:
Isabelle 需要很多时间来证明(在我看来)相当简单的数据类型转换函数的正确性。例如,我创建了数据类型来表示数学和布尔表达式以及简化此类表达式的函数。
datatype 'a math_expr =
Num int |
Add "'a math_expr" "'a math_expr" |
Mul "'a math_expr" "'a math_expr" |
Sub "'a math_expr" "'a math_expr" |
Div "'a math_expr" "'a math_expr"
datatype 'a expr =
True |
False |
And "'a expr" "'a expr" |
Or "'a expr" "'a expr" |
Eq "'a math_expr" "'a math_expr" |
Ne "'a math_expr" "'a math_expr" |
Lt "'a math_expr" "'a math_expr" |
Le "'a math_expr" "'a math_expr" |
Gt "'a math_expr" "'a math_expr" |
Ge "'a math_expr" "'a math_expr" |
If "'a expr" "'a expr" "'a expr"
function (sequential) simplify :: "'a expr ⇒ 'a expr" where
"simplify (And a True) = a" |
"simplify (And True b) = b" |
"simplify (Or a True) = True" |
"simplify (Or True b) = True" |
"simplify e = e"
by pat_completeness auto
termination by lexicographic_order
在我的笔记本上,Isabelle 需要相当长的时间来证明功能(突出显示签名和正文),甚至需要更多时间来证明其完整性(突出显示by pat_completeness auto)。所需的计算时间很大程度上取决于expr 数据类型的复杂性和simplify 中模式匹配规则的数量。数据类型中的构造函数越多,模式匹配规则越多,耗时越长。
这种行为的原因是什么?有没有办法让这样的函数更容易证明?
【问题讨论】:
标签: isabelle formal-verification