多路(玫瑰)树的结构诱导

时间:2015-03-24 13:05:05

标签: haskell tree proof induction

由于可以将多路树定义为递归类型:

data RoseTree a = Node {leaf :: a, subTrees :: [RoseTree a]}

对这种类型进行结构诱导是否有相应的原理?

1 个答案:

答案 0 :(得分:3)

要声明属性P适用于所有(*)玫瑰树,您必须证明

  • 如果l :: [RoseTree]是玫瑰树的列表,其元素满足P,而x :: a是任意的,则Note x l满足P

P关于l元素的部分是感应假设,您可以使用它来证明P(Node x l)

这里没有明确的基本情况:这是因为没有明确的基本案例构造函数。然而,Node x []充当树木的隐含基础案例, 实际上,当l为空时,我们会隐式地得到一个基本情况。具体而言,当l为空时,假设“P满足l”的所有元素都变为空洞,因此我们从上面的归纳原则得到P(Node x [])

(*)更准确地说,这个原则证明了每个有限深度玫瑰树的P。如果你真的需要考虑无限深度的(例如圆形树),你需要共同诱导。