我试图计算一些可枚举类型的两个有限集(例如 char )分别使用最小和最大不动点计算。我希望我的定义可以提取到SML,并且在执行时是“半有效的”。我有什么选择?
char
通过探索HOL库和代码生成,我有以下观察结果:
complete_lattice.lfp
complete_lattice.gfp
ccpo_class.fixp
Complete_Partial_Order
iterates
是否有任何现有的不动点组合隐藏在某个地方,适合用于有限集,可以生成我错过的半有效代码生成?
Isabelle标准库中的通用不动点组合器都不打算直接用于代码提取,因为它们的构造过于通用,无法在实践中使用。(理论中还有一个 ~~/src/HOL/Library/Bourbaki_Witt_Fixpoint )但是理论 ~~/src/HOL/Library/While_Combinator lfp 和 gfp 您正在寻找的迭代实现的不动点,请参见定理 lfp_while_lattice gfp_while_lattice 这些特征具有函数单调的前提,因此不能直接用作代码方程。所以你有两个选择:
~~/src/HOL/Library/Bourbaki_Witt_Fixpoint
~~/src/HOL/Library/While_Combinator
lfp
gfp
lfp_while_lattice
gfp_while_lattice
使用 while / 绿色荧光蛋白 在代码方程和/或定义中。
while
绿色荧光蛋白
告诉代码预处理器使用 [code_unfold] 方程式如果您还添加了预处理器需要的所有规则,以证明这些方程的假设适用于它应该应用的实例,那么这是可行的。因此,我建议您也添加为 [代码展开] 函数的单调性陈述和证明函数有限性的定理 char set finite_class.finite .
[code_unfold]
[代码展开]
char set
finite_class.finite