我想证明不合格(curry(f))= f,curry(uncurry(g))= g使用ML

时间:2016-05-03 14:09:56

标签: currying ml

我有两个ML功能

fun curry f x y = f(x, y);
fun uncurry g (x, y) = g x y;

我想证明

uncurry(curry(f)) = f

curry(uncurry(g)) = g

我在搜索引擎网站上搜索,但没有让我满意。 位于本文顶部的两个函数未明确定义。 例如,为了证明不连续(咖喱(f))= f我必须使用咖喱功能(有趣的咖喱f x y = f(x,y);)但是没有明确定义的咖喱。 如何证明两件事?

1 个答案:

答案 0 :(得分:2)

我将展示如何演示curry (uncurry f) = f

curry (uncurry f) =                       (* by definition of uncurry *)
curry (fn (x,y) -> f x y) =               (* by definition of curry *)
fn x y -> ((fn (x,y) -> f x y) (x,y)) =   (* beta-reduction on innermost level *)
fn x y -> (f x y) =                       (* by eta-expansion *)
f

另一个问题可以解决。

注意:函数curry (uncurry f)f在扩展意义上是相同的(我们接受函数扩展性公理,可以找到更多细节here