代码等式左侧的部分应用常数
Partially applied constant on left hand side of code equation
我需要使用 nat_plus_commute.fold_set_fold_remdups
代码方程而不是 Finite_Set.fold_def
:
interpretation nat_plus_commute: comp_fun_commute "plus :: nat ⇒ nat ⇒ nat"
by standard auto
declare Finite_Set.fold_def [code del]
declare nat_plus_commute.fold_set_fold_remdups [code]
问题是第一个方程仅为 plus
运算定义,因此我收到以下警告:
Partially applied constant "Groups.plus_class.plus" on left hand side of equation, in theorem:
Finite_Set.fold op + ?y (set ?xs) ≡ fold op + (remdups ?xs) ?y
作为以下语句的结果
value "Finite_Set.fold plus 0 (set [1::nat, 2])"
returns异常:
exception Fail raised (line 29 of "generated code"): Finite_Set.fold
是否可以针对特定操作 (plus
) 和类型 (nat
) 使用专门的代码方程?
我不太确定你想要实现,但请注意 Finite_Set.fold 是一个低级构造,其他具有实际可用属性的操作只能得到相当大的努力,cf。理论 src/HOL/Finite_Set.thy 和 src/HOL/Groups_Big.thy 一个粗略的想法。
对于有限集和列表的求和,有sum和sum_list已经配备了代码方程。
我需要使用 nat_plus_commute.fold_set_fold_remdups
代码方程而不是 Finite_Set.fold_def
:
interpretation nat_plus_commute: comp_fun_commute "plus :: nat ⇒ nat ⇒ nat"
by standard auto
declare Finite_Set.fold_def [code del]
declare nat_plus_commute.fold_set_fold_remdups [code]
问题是第一个方程仅为 plus
运算定义,因此我收到以下警告:
Partially applied constant "Groups.plus_class.plus" on left hand side of equation, in theorem:
Finite_Set.fold op + ?y (set ?xs) ≡ fold op + (remdups ?xs) ?y
作为以下语句的结果
value "Finite_Set.fold plus 0 (set [1::nat, 2])"
returns异常:
exception Fail raised (line 29 of "generated code"): Finite_Set.fold
是否可以针对特定操作 (plus
) 和类型 (nat
) 使用专门的代码方程?
我不太确定你想要实现,但请注意 Finite_Set.fold 是一个低级构造,其他具有实际可用属性的操作只能得到相当大的努力,cf。理论 src/HOL/Finite_Set.thy 和 src/HOL/Groups_Big.thy 一个粗略的想法。
对于有限集和列表的求和,有sum和sum_list已经配备了代码方程。