Isabelle - 字符和字符串文字支持

时间:2015-10-28 14:34:42

标签: isabelle theorem-proving

Isabelle中如何声明字符和字符串文字?我想在Isabelle教程的trie示例中使用一个字符节点值(声明为'v option)。

datatype ('a,'v)trie = Trie "'v option" "('a * ('a,'v)trie)list"

1 个答案:

答案 0 :(得分:3)

char类型(代表8位字符)和string类型(定义为字符列表)。字符和字符串文字还有一些语法和漂亮的打印设置:

typ string
(* char list *)

term "''foobar''"
(* ''foobar'' :: char list *)

value "hd ''foobar''"
(* CHR ''f'' :: char *)

请注意,字符串文字必须用两个单引号''分隔。必须将字符文字输入为CHR ''c''。这当前适用于大多数可打印的ASCII字符,但不在0x7F之上。

有些函数nat_of_charchar_of_nat可以在这些8位字符及其ANSI代码之间进行转换(重新命名为nat)。

还有类型String.literal,它本质上是string的类型克隆,隐藏了基础列表的性质。这主要用于代码生成,因为目标语言(例如Scala)可能提供专用的字符串类型(而不仅仅是字符列表)。 stringString.literal之间的转换时间为implodeexplode

请注意,如果您想使用字符串导出代码,则应该导入~~/src/HOL/Library/Code_Char.thy以将Isabelle的字符类型转换为目标语言的字符类型。即使这样,使用string导出代码也会导致代码使用字符列表;你需要在你的Isabelle代码方程中明确使用String.literal,以便在SML,Scala和OCaml中获得正确的字符串类型。

对于Isabelle的字符类型的一般化有一些想法,以支持多字节字符,但这仍然是将来。