我正在尝试编写一个带有第二个参数的函数,该参数可以为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编写此定义的正确方法是什么?
答案 0 :(得分:1)
理论bit
中的类型为HOL-Library.Bit
,具有两个元素0
和1
。其中包含使0
和1
标记对bit
起作用的所有设置,包括模式匹配。