在树上有良好的感应

时间:2011-05-19 13:14:14

标签: math functional-programming sml

我有一周的考试(SML中的功能编程)。我对编程语言SML和功能范例已经相当自信,但我对证明有一个很大的问题。

我正在努力解决以下问题,这是去年考试的一部分:


考虑树的数据类型和两个函数的以下声明:

datatype tree = Lf | Br of int * tree * tree;

fun size Lf = 0
| size(Br(i,t1,t2)) = 1 + size t1 + size t2;

fun sizeI Lf k = k
| sizeI (Br(i,t1,t2)) k = sizeI t1 (1 + sizeI t2 k);

证明

sizeI tr k = k + size tr

适用于所有树tr和所有整数k。


我想通过使用Well Founded Induction来解决上述问题。首先,我已经解决了基本情况:

k = 0 & tr = Lf

sizeI Lf 0 = 0+size Lf
0 = 0

然后我尝试解决归纳步骤,但卡住了:

sizeI tr k = k + size tr
sizeI Br(k,t1,t2) k = k + size Br (k,t1,t2)
size t1 (1+ sizeI t2 k) = k+1+size t1 + size t2
.... STUUUUCK

我真的非常感谢这里的任何帮助。如果你有任何关于归纳的链接或提示(请不要指出维基百科上邪恶的“有根据的关系”文章),我会很高兴。另外,如果你能帮我解决这个问题......

谢谢! : - )

1 个答案:

答案 0 :(得分:3)

要做好引导,首先需要在树上定义一个很好的关系:

二元关系c其中(t1,k1)c(t,k)如果t1是t的子树,则是一个很好的关系。

其次,陈述你的归纳假设:

t1和t2是t的子树,我们有:

sizeI t1 k1 = k1 + size t1 (1)
sizeI t2 k2 = k2 + size t2 (2)

我们必须建立:

sizeI Br(i,t1,t2) k = k + size Br(i,t1,t2)

你已经完成了基本情况。

归纳案例:

请注意:

sizeI Br(i,t1,t2) k
= sizeI t1 (1 + sizeI t2 k) // definition of sizeI
= 1 + sizeI t2 k + size t1 // induction hypothesis (1)
=  1 + k + size t2 + size t1 // induction hypothesis (2)
= k + size Br(i, t1, t2) // definition of size

我们完成了证明。