【问题标题】:How do I add the additional type variables in my specification of an inductive type in Isabelle?如何在 Isabelle 的归纳类型规范中添加其他类型变量?
【发布时间】:2020-05-21 16:08:28
【问题描述】:

我定义了一个这样的归纳类型:

inductive I :: "tau ⇒ bool" where
rule0: "I C0" |
rule1: "I x" |
rule2: "Q x ⟹ I x" |
rule3: "Q x ⟹ I x'" |
rule4: "Q x ⟹ I (C1 x)" |
rule5: "Q (C1 x) ⟹ I x" |
rule6: "Q (C1 x) ⟹ I x'" |
rule7: "Q x ⟹ I (C2 x' x'')"

我认为这已经足够了,但伊莎贝尔抱怨/警告我:

Additional type variable(s) in specification of "I": 'a, 'b 

我不明白这是什么意思。我知道这是说我应该把归纳谓词放在某个地方接受任何两种类型(如类型变量'a'b 所示)。但这不是我想做的。我只希望输入始终为tau 类型,即:

datatype tau = 
C0 |
C1 tau |
C2 tau tau

显然,这些定义是虚构的,并不是真的要证明什么。我只是想检查一下它使用这些定义生成的定理(特别是归纳法)。

1) 我如何让它停止抱怨我的变量是任意类型并让它们始终是 tau 类型?


另外,我真的很好奇投诉的含义以及如何使用'a'b 语法修复它,这是建议。虽然这不是我最初的意图,但我很想看看我的归纳谓词的更一般定义,看看它会产生什么归纳定理。

2) 我如何用 Isabelle 想要的任意类型定义我的归纳谓词?我在哪里把'a'b 放在定义中?如果我不这样做会怎样?

【问题讨论】:

  • 这是规则 4 和 7 的原因。左侧包含一个变量 x,它没有出现在右侧。而且,你还没有说Q 是什么。它是一个变量吗?是参数吗?它的类型是什么?目前,Isabelle 只是认为 Q 可以是任何谓词,因此仅通过规则 3,您就可以证明 I x 对所有 x 都是正确的。这也是额外类型变量的来源。您的定义中没有任何内容限制规则 3 和 7 中 x 的类型,因此 Isabelle 推断这些可以具有任何类型。
  • @ManuelEberl Isabelle 正确推断 Q 是任何谓词。我认为它这样做是因为它在元含义的 LHS 上,所以这是理解它的一种方式(也许是唯一的方式)。我知道for r where 成语。我认为这是以某种方式修复谓词。也许我可以在那里输入它的类型。我还没有彻底玩过它,所以我不是 100% 会发生什么。感谢您指出这一点。
  • @ManuelEberl 是通过说出Q 的类型来约束它们的唯一方法?我希望 Qany 类型为 tau => bool 的谓词(但不固定)。

标签: isabelle theorem-proving


【解决方案1】:

为了在我的规则中限制类型,我可以在I 的归纳定义中修饰类型:

inductive I :: "tau ⇒ bool"  where
rule0: "I C0" |
rule1: "I x" |
rule2: "Q x ⟹ I x" |
rule3: "Q (x::tau) ⟹ I x'" |
rule4: "Q x ⟹ I (C1 x)" |
rule5: "Q (C1 x) ⟹ I x" |
rule6: "Q (C1 x) ⟹ I x'" |
rule7: "Q (x::tau) ⟹ I (C2 x' x'')"

现在的定理是这样的:

thm I.induct

⟦I ?x; ?P C0; ⋀x. ?P x; ⋀Q x. Q x ⟹ ?P x; ⋀Q x x'. Q x ⟹ ?P x'; ⋀Q x. Q x ⟹ ?P (C1 x); ⋀Q x. Q (C1 x) ⟹ ?P x; ⋀Q x x'. Q (C1 x) ⟹ ?P x'; ⋀Q x x' x''. Q x ⟹ ?P (C2 x' x'')⟧ ⟹ ?P ?x

感谢曼努埃尔·埃伯尔!

【讨论】:

  • Q 在你的介绍规则中仍然被普遍量化,这不是你想要的。这使您的定义等同于I x = True。再说一次,rule1 已经做到了。
  • @ManuelEberl 你是对的,这是一个愚蠢的例子。没关系,这不是真正的证据。我只是想自己看看关于构造函数规则的归纳规则假设。一个更现实的例子是让for Q 构造来解决您所指的问题,据我了解,它修复了Q 并假设它是恒定的,而不是对其进行普遍量化。
猜你喜欢
  • 1970-01-01
  • 2018-05-06
  • 2013-08-21
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
相关资源
最近更新 更多