Isabelle 如何从HOL中获取ML值?
我有一个嵌入式ML代码,如下所示:Isabelle 如何从HOL中获取ML值?,isabelle,ml,hol,Isabelle,Ml,Hol,我有一个嵌入式ML代码,如下所示: ML ‹ val boo = true; val num = 1234; val rea = 3.14; val str = "hi"; › 有谁能给我一个从HOL获取这些值的代码示例吗?对于所讨论的值的类型,在SML类型和一些规范的Isabelle/HOL类型之间(术语的子集)建立同构应该不会太困难。在实践中,它们通常采用函数的形式,从SML类型的术语到Isabelle/HOL中某些类型的术语。 例如,Isabelle/
ML ‹
val boo = true;
val num = 1234;
val rea = 3.14;
val str = "hi";
›
有谁能给我一个从HOL获取这些值的代码示例吗?对于所讨论的值的类型,在SML类型和一些规范的Isabelle/HOL类型之间(术语的子集)建立同构应该不会太困难。在实践中,它们通常采用函数的形式,从SML类型的术语到Isabelle/HOL中某些类型的术语。 例如,Isabelle/HOL的标准库已经为您感兴趣的三种类型提供了至少三个这样的函数:
允许将SML的Quickcheck\u Common.reflect\u bool:bool->term
转换为Isabelle/HOL的bool
bool
允许将SML的HOLogic.mk_nat:int->term
的(适当子集)转换为Isabelle/HOL的int
nat
允许将SML的HOLogic.mk_string:string->term
转换为Isabelle/HOL的字符串
字符列表
boo
、num
和str
执行此操作:
ML‹
val boo = true
val num = 1234
val str = "hi"
›
ML‹
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
›
ML‹
val boo_t = Quickcheck_Common.reflect_bool boo;
val num_t = HOLogic.mk_nat num;
val str_t = HOLogic.mk_string str;
›
local_setup‹mk_const "num" num_t›
local_setup‹mk_const "boo" boo_t›
local_setup‹mk_const "str" str_t›
lemma "num = 1234"
unfolding num_def by simp
lemma "boo = True"
unfolding boo_def by simp
lemma "str = ''hi''"
unfolding str_def by simp
我不知道SML类型转换的标准函数
real
,但想出一些东西应该不会太难(我建议您研究函数HOLogic.mk_nat
和HOLogic.mk_string
)的实现。在这种情况下,可能还值得查看有关Isabelle代码生成的文档/出版物。谢谢。我从你的指导中学到了很多。