从记录类型声明强制

时间:2015-02-19 23:19:35

标签: isabelle

我有记录类型

record foo =
  main_stuff :: "nat list"
  other_stuff :: "int"

如果f的类型为foo,我希望能够f在必要时自动强制转移到nat list字段中的main_stuff 。例如,我希望能够将f ! 5 typecheck等表达式设为main_stuff f ! 5。我尝试过使用

declare [[coercion_enabled]]
declare [[coercion main_stuff]]

但是,类型检查仍然失败。我的基本问题是:Isabelle强制是否与Isabelle记录类型兼容?

1 个答案:

答案 0 :(得分:0)

我没有看到为什么记录应该特殊的原因w.r.t.强制,因为foo只是另一种类型(无论它是如何创建的)。事实上,你的例子对我有用:

record foo =
  main_stuff :: "nat list"
  other_stuff :: "int"

abbreviation "x ≡ ⦇ main_stuff = [0], other_stuff = 1 ⦈"

declare [[coercion_enabled]]
declare [[coercion main_stuff]]

term "x ! 0"

最后一行导致

"main_stuff x ! 0"
  :: "nat"

但也

term "(f :: foo) ! 5"

按预期工作。也许在您的示例f由于某种原因没有正确的类型?