在关于插入到博朗树(第118页)的章节中,作者对代码应该做什么做了一些解释,但是将其留在一边,本书中的一个明显ommision并不是解释函数模式匹配中用于定理证明的奇怪语法。如何读取Braun树插入的语法?
据我所知,with pattern可以通过使用|
进一步解构和我可以理解,使用时rewrite
,|
也可以用来分离不同的重写,但是这使得它混乱。
据我所知,重写绝对不是一个函数。然后出现以下内容:
bt-insert a (bt-node{n}{m} a' l r p)
rewrite +comm n m with p | if a <A a' then (a , a') else (a' , a)
bt-insert a (bt-node{n}{m} a' l r _) | inj₁ p | (a1 , a2)
rewrite p = (bt-node a1 (bt-insert a2 r) l (inj₂ refl))
bt-insert a (bt-node{n}{m} a' l r _) | inj₂ p | (a1 , a2) =
(bt-node a1 (bt-insert a2 r) l (inj₁ (sym p)))
我真的很困惑,应该如何精神分析rewrite +comm n m with p | if a <A a' then (a , a') else (a' , a)
。一个人如何阅读| inj₁ p | (a1 , a2) rewrite p
?另外,在测试前面的例子时,我发现由于某种原因,重写的顺序并不重要。这是为什么?