我有记录类型
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记录类型兼容?
答案 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
由于某种原因没有正确的类型?