首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从HOL获取ML值?

如何从HOL获取ML值?
EN

Stack Overflow用户
提问于 2020-12-10 08:09:34
回答 1查看 94关注 0票数 1

我有一个嵌入的ML代码,如下所示:

代码语言:javascript
复制
ML ‹
  val boo = true;
  val num = 1234;
  val rea = 3.14;
  val str = "hi";
›

谁能给我一个从HOL获取这些值的代码示例?

EN

回答 1

Stack Overflow用户

发布于 2020-12-10 09:29:12

对于所讨论的值的类型,在SML类型和一些规范的Isabelle/HOL类型之间建立同构(术语的子集)应该不是太难。在实践中,它们通常采用函数的形式,从SML类型的术语到Isabelle/HOL中的某种类型的术语。例如,Isabelle/HOL的标准库已经为您感兴趣的三种类型提供了至少三个这样的函数:

  • Quickcheck_Common.reflect_bool : bool -> term允许将SML的bool.
  • HOLogic.mk_nat : int -> term转换为Isabelle/HOL的nat.
  • HOLogic.mk_string : string -> term允许将SML的int转换为Isabelle/HOL的char list.

允许将SML的bool转换为Isabelle/HOL的int

可以通过声明和定义新的常量来将这些值“带入”Isabelle/HOL。以下示例说明如何对常量boonumstr执行此操作

代码语言:javascript
复制
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_natHOLogic.mk_string的实现)。在这种情况下,可能还值得查看有关Isabelle代码生成的文档/出版物。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65226738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档