由于可以将多路树定义为递归类型:
data RoseTree a = Node {leaf :: a, subTrees :: [RoseTree a]}
对这种类型进行结构诱导是否有相应的原理?
答案 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
。如果你真的需要考虑无限深度的(例如圆形树),你需要共同诱导。