使用Isabelle理论中的原生整数/单词(非bignums)进行程序提取

时间:2014-04-20 02:02:18

标签: isabelle

这个问题出现在Isabelle与正式软件开发一起使用的背景下,而不是纯粹的数学理论(以及独立的开发人员的上下文)。

似乎充其量,从Isabelle理论生成的SML程序使用SML的IntInf.int,而不是本地整数类型,即Int.int;即使使用Code_Target_IntCode_Binary_NatCode_Target_Nat也是如此。对这些理论来源的调查似乎证实了它能够做到的一切。原始平台整数可能由于多种原因而需要,包括效率和SML命令式程序可选地转换为命令式语言子集(例如C或Ada)的情况,当理论依赖于{{1}时,这是相关的。理论。 Isabelle发行版附带的Imperative_HOL文档对此没有帮助,除了建议下面的第一个选项。

选项可能是:

  • 不使用Isabelle的codegen.pdfint并从头开始重新创建新的数字类型,然后使用nat命令(code_printingtype_constructor })给它原生平台的表示和操作(意味着在理论中以某种方式包含范围限制):由于正式的环境,我希望不可能出现容易出错的错误。请注意,对于Isabelle自己的constantint来说这似乎是可行的......这会使代码生成失败,并且没有任何内容告诉nat命令中缺少哪些常量。
  • 如果要直接编译SML程序(例如使用MLTon),请使用替换code_printing结构调整SML环境:可能不安全或不可行,并且仍需要将范围限制嵌入到理论,所以以前的选择可能最终比这个更好。
  • 触摸生成的程序,将IntInf更改为IntInf:简单,但是安全吗? (至少,Int实现与IntInf相同的签名,因此可能是安全的)。如上所述,需要以某种方式指定理论中的界限,这是可以的。
  • 潜入Isabelle内部:肯定是不合理的,甚至比第二种选择更糟糕。
  • 存在Int理论,但根据一些读物,它似乎不适合这个目的。

这些未列出的其他已知选项吗?他们是否对列出的选项发表评论?

如果没有现成的解决方案(我觉得当时没有),那么哪些提示或曲目最为人所知? (例如,文件链接,概念提及)。

更新

列表的第2点和第3点,只有存在单个整数类型时才可以(如果确实存在)。如果程序使用的不止一个,则不适用。

1 个答案:

答案 0 :(得分:1)

直接从Isabelle int生成本地单词会不合理,因为您的形式化不会考虑现实中存在的溢出。

看起来AFP条目Native_Word可以满足您的需求,但是: http://afp.sourceforge.net/entries/Native_Word.shtml