从Isabelle/HOL将字符串输出到文件中
我想将字符串从Isabelle/HOL理论输出到文件中 我提出的解决方案涉及在ML级别执行文件和字符串操作 例如,假设下面的Isabele/HOL代码定义了一种非常简单的表达式语言的抽象语法:从Isabelle/HOL将字符串输出到文件中,isabelle,Isabelle,我想将字符串从Isabelle/HOL理论输出到文件中 我提出的解决方案涉及在ML级别执行文件和字符串操作 例如,假设下面的Isabele/HOL代码定义了一种非常简单的表达式语言的抽象语法: datatype Exp = expid string | exppar Exp | expplus Exp Exp | expminus Exp Exp | expnum int 我想将这个简单语言的表达式打印输出到一个文件中。例如,表达式,例如: definition ex
datatype Exp = expid string
| exppar Exp
| expplus Exp Exp
| expminus Exp Exp
| expnum int
我想将这个简单语言的表达式打印输出到一个文件中。例如,表达式,例如:
definition exp_exmp :: "Exp"
where
"exp_exmp ≡ expplus
(exppar (expminus (expnum 2) (expid ''x'')))
(exppar (expplus (expid ''y'') (expnum 5)))"
通过使用Isabele/HOL的代码生成功能,我成功地在ML级别实现了这一点:
export_code exp_exmp expid str_int in SML module_name Example file "example.sml"
为了简化字符串操作,我在ML中定义了pretty print函数。因此,我最后给出了代码:
ML_file "example.sml"
ML {*
open Example;
fun charsToStr [] = ""
| charsToStr (c::cs) = (str c)^charsToStr cs
fun wrExp (Expid i) = charsToStr i
| wrExp (Exppar e) = "(" ^ wrExp e ^ ")"
| wrExp (Expnum n) = charsToStr (str_int n)
| wrExp (Expplus (e1, e2)) =
wrExp e1 ^"+"^wrExp e2
| wrExp (Expminus (e1, e2)) =
wrExp e1 ^ "-" ^ wrExp e2
val file = TextIO.openOut("exmp.txt");
TextIO.output (file, wrExp exp_exmp);
TextIO.closeOut(file);
*}
为此,导入理论“~~/src/HOL/Library/code\u Char”对于简化字符和字符串的Isabelle/HOL表示与ML表示之间的必要转换至关重要
这是最好的方法吗?你是如何得出结论的?动态计算?你能举一个你想要达到的目标的例子吗?你是如何达到目标的?动态计算?你能举一个你想达到的目标的例子吗?