{0,1}作为Isabelle中的函数类型

时间:2019-07-14 09:00:13

标签: isabelle

我正在尝试编写一个带有第二个参数的函数,该参数可以为0或1:

typedef f_2 = "{0::nat,1}"

function proj_add :: "(real × real) × f_2 ⇒ (real × real) × f_2 ⇒ (real × real) × f_2" where
  "proj_add ((x1,y1),l) ((x2,y2),j) = ((add (x1,y1) (x2,y2)), (l+j) mod 2)" 
    if "delta x1 y1 x2 y2 ≠ 0"
| "proj_add ((x1,y1),l) ((x2,y2),j) = ((ext_add (x1,y1) (x2,y2)), (l+j) mod 2)" 
    if "delta' x1 y1 x2 y2 ≠ 0"

如果我直接写{0::nat,1},则会收到错误内部语法错误。

如果我写f_2,则会得到错误的未定义类型名称f_2。

用Isabelle编写此定义的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

理论bit中的类型为HOL-Library.Bit,具有两个元素01。其中包含使01标记对bit起作用的所有设置,包括模式匹配。