我有一周的考试(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
我真的非常感谢这里的任何帮助。如果你有任何关于归纳的链接或提示(请不要指出维基百科上邪恶的“有根据的关系”文章),我会很高兴。另外,如果你能帮我解决这个问题......
谢谢! : - )
答案 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
我们完成了证明。