自动推导比较器、显示函数及形式化纽结理论
1. 比较器的代码方程
在逻辑中定义函数的主要目的是为代码生成服务。在定义了比较器并证明相关方程后,将这些方程注册为代码方程。这样,生成的代码中只会出现比较器,部分应用的比较器和显示函数的内部构造不会出现在生成代码里。
不过,这些代码方程在执行时间上并非最优。在使用急切求值的语言中, comp-lex [c x y, cmplist c xs ys] 存在问题。即便第一次比较 c x y 的结果是 Lt 或 Gt ,第二个参数 cmplist c xs ys 仍会被求值。
为避免这种低效情况,在将方程交给代码生成器之前,需完全展开 comp-lex 的应用。展开依据以下三个易于证明的方程:
comp-lex [ ] = Eq
comp-lex [x] = x
comp-lex (x # y # xs) = (case x of Eq ⇒ comp-lex (y # xs) | z ⇒ z)
仅为代码生成进行展开的好处是,在证明过程中仍可使用 comp-lex 的性质,同时能保持规范结构,无需进行大量的情况拆分。展开后,代码方程的右侧变为 case c x y of Eq ⇒ cmplist c xs ys | z ⇒ z ,在急切求值的语言中,递归调用只会按需求值。
自动推导与纽结理论形式化
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



