Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Isabelle/HOL将字符串输出到文件中_Isabelle - Fatal编程技术网

从Isabelle/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

我想将字符串从Isabelle/HOL理论输出到文件中

我提出的解决方案涉及在ML级别执行文件和字符串操作

例如,假设下面的Isabele/HOL代码定义了一种非常简单的表达式语言的抽象语法:

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表示之间的必要转换至关重要


这是最好的方法吗?

你是如何得出结论的?动态计算?你能举一个你想要达到的目标的例子吗?你是如何达到目标的?动态计算?你能举一个你想达到的目标的例子吗?