在 Isabelle 中将前 n 个自然数的列表写为整数

Writing the list of first n natural numbers as ints in Isabelle

我需要一个描述范围的列表,例如:

[0..<length P]

但是它的类型是 nat list。我稍后需要它的类型是 int list.

如何进行这样的转换?

最简单的方法可能是map int [0..<length p]。事实上,如果你只是写下 [0..<length p] Isabelle 可能会自动将其作为强制插入。

有点遗憾的是这个符号只存在于nat;我想它根本不经常使用。集合的等效表示法({a..<b} 等)更加灵活。

还有 List.upto 具有特殊语法 [m..n] 以生成从 m 到 [=26] 的整数列表(类型 int list) =] n(下限和上限都包括在内)。

所以在你的情况下我可能会使用

[0 .. int (length xs) - 1]

(请注意,对于 length 的结果,您仍然需要从 nat 转换为 int