我很难找到nat => string
类型的函数来转换像
42
像这样的术语
''42''
它存在吗?我找到char_of_nat
(在String库中),但这有点太低级了,关注ASCII代码等。
答案 0 :(得分:2)
在正式证明的存档中,在Real_Impl/Show
下,您会找到一个类show
,其功能基本上是'a => string
类型。在Real_Impl/Show_Instances
中,实例化了几种常见类型,包括nat
,rat
和int
。
答案 1 :(得分:1)
与此同时,我已经开始编写自己的string_of_nat
和string_of_int
函数。在没有其他预先存在的功能的情况下,这些将很适合我。
fun string_of_nat :: "nat ⇒ string"
where
"string_of_nat n = (if n < 10 then [char_of_nat (48 + n)] else
string_of_nat (n div 10) @ [char_of_nat (48 + (n mod 10))])"
definition string_of_int :: "int ⇒ string"
where
"string_of_int i = (if i < 0 then ''-'' @ string_of_nat (nat (- i)) else
string_of_nat (nat i))"
答案 2 :(得分:1)
AFP entry Show中有一个类似Haskell的show
类。
nat
类型的实例在Show.Show_Instances
中。
示例:
theory Show_Test
imports "Show.Show_Instances"
begin
lemma "show (123 :: nat) = ''123''"
by (simp add: Show_Instances.shows_prec_nat_def showsp_nat.simps shows_string_def)
end