【发布时间】:2022-01-25 19:01:38
【问题描述】:
抱歉,如果这被认为是一个愚蠢的问题,但我怎样才能让 Isabelle 理论识别 ML 代码?例如,假设我有一个 Isabelle 文件,看起来像
ML ‹
type vec = real * real;
fun addvec ((a,b):vec) ((c,d):vec) : vec = (a+b,c+d);
›
lemma "addvec (1,2) (3,4) = (4,6)"
很遗憾,addvec 在引理中未被识别。如何使功能被识别?我已经阅读了How to get ML values from HOL? 以及 Isabelle Cookbook。前者使用local_setup 使用名为mk_const 的函数将常量分配给Isabelle 常量(据我所知)
fun mk_const c t =
let
val b = Binding.name c
val defb = Binding.name (c ^ "_def")
in (((b, NoSyn), ((defb, []), t)) |> Local_Theory.define) #> snd end
Binding.name 和 Local_Theory.define 函数有什么作用,local_theory 类型是什么?
提前致谢!
【问题讨论】:
-
短版:你不容易。如果只是因为您可以在 ML 而不是在 Isabelle 中编写非终止函数。想要达到什么目标?
-
我什至认为函数一般是不可能的。您需要在 SML 中进行反射才能研究函数的结构。
-
@MathiasFleury 我正在尝试最终在 ML 中编写一个函数,该函数可以获取 Isabelle 中记录的字段名称,然后在 Isabelle 中使用此函数。它的内容非常丰富,我是 ML 的完整初学者。
-
您是尝试使用 SML 类型在 SML 中编写函数,还是尝试使用 Isabelle(又名“术语”)在 SML 中编写函数?链接的问题询问了前者(我认为不可能将记录从 Isabelle 翻译成 SML)。但后者也很有意义。
-
@MathiasFleury 最初我想用 SML 类型在 SML 中编写一个函数,我可以在 Isabelle 中使用它,因为记录字段是在 SML 中实现的。