Isabelle中的条件定义

时间:2019-07-12 16:17:53

标签: isabelle

假设您要在Isabelle中正式定义以下定义:

add a b = 
 if f(a,b) ≠ 0 then add_1 a b
 if g(a,b) ≠ 0 then add_2 a b

我不想给任何选项任何 preference 。实际上,我需要证明的下一个属性是:

  1. add为任何输入至少分配一个值
  2. 添加定义明确

在Isabelle中应使用什么建模模型?也许是部分函数?

您可以在this paper上看到等式(17)和引理4.3.4、4.3.4,以了解我在说什么引理。

1 个答案:

答案 0 :(得分:1)

您可以将function命令与重叠的方程式和前提条件一起使用:

function add :: "..." where
  "add a b = add_1 a b" if "f a b ≠ 0"
| "add a b = add_2 a b" if "g a b ≠ 0"
apply(atomize_elim) (* makes the exhaustiveness goal more readable *)

这为您提供了证明义务,即案例确实是详尽无遗的,并且当它们重叠时,右侧会出现相同的脱节。显示此内容后,您必须显示终止(如果您的函数不是递归的,则可以通过以下方式简单完成

termination by lexicographic_order

如果您的方程式实际上并不详尽,那么您首先必须添加更多的情况。在此示例中,您可以添加

| "add a b = undefined a b" if "f a b = 0 & g a b = 0"

表示,如果fg均为0,则add a b表示一些未指定的值,并且对于每个{{ 1}}和a