我在理论中写了一个定义,说:
定义mycmd :: string其中 " mycmd =='' external_executable''"
然后我需要在ML代码块中使用 mycmd 的值" external_executable" 作为的参数Isabelle_System.bash_output ,但我不知道如何获得 mycmd 的值。有什么建议吗?
谢谢!
答案 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 *}