如何在Isabelle中使用ML代码获取const的值?

时间:2014-12-19 03:50:04

标签: isabelle

我在理论中写了一个定义,说:

定义mycmd :: string其中 " mycmd =='' external_executable''"

然后我需要在ML代码块中使用 mycmd 的值" external_executable" 作为的参数Isabelle_System.bash_output ,但我不知道如何获得 mycmd 的值。有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

要静态评估Isabelle / ML中的Isabelle / HOL术语,通常使用@ {code}反引号。在您的示例中,它显示为ML {* @{code mycmd} *}。 Isabelle将在编译时插入必要的代码来评估mycmd并使用该值。唯一的困难是HOL类型string没有序列化为ML类型string。因此,您应该在HOL术语中使用类型String.literal并使用它。

以下是Isabelle2014的例子:

definition mycmd :: String.literal where "mycmd == STR ''external_executable''"
ML {* Isabelle_System.bash_output @{code mycmd} *}

答案 1 :(得分:0)

我认为这就是你想要的,尽管我并不真正理解你想做什么:

ML {*  Thm.concl_of @{thm mycmd_def}
  |> Term.dest_comb |> snd
  |> HOLogic.dest_string *}

以及更强大的版本(取决于定义样式,使用" ="或" =="):

ML {* Thm.concl_of @{thm mycmd_def}
  |> (fn x => if fst (dest_Const (fst (strip_comb x))) = @{const_name "Trueprop"} 
    then snd (dest_comb x) else x)
  |> dest_comb |> snd
  |> HOLogic.dest_string *}