" nat"的字符串在伊莎贝尔?

时间:2014-05-26 07:33:36

标签: isabelle

我很难找到nat => string类型的函数来转换像

这样的术语
42

这样的术语
''42''

它存在吗?我找到char_of_nat(在String库中),但这有点太低级了,关注ASCII代码等。

3 个答案:

答案 0 :(得分:2)

在正式证明的存档中,在Real_Impl/Show下,您会找到一个类show,其功能基本上是'a => string类型。在Real_Impl/Show_Instances中,实例化了几种常见类型,包括natratint

答案 1 :(得分:1)

与此同时,我已经开始编写自己的string_of_natstring_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