Syntax 如何读取Braun树插入的语法?

Syntax 如何读取Braun树插入的语法?,syntax,pattern-matching,agda,invariants,Syntax,Pattern Matching,Agda,Invariants,在(第118页)关于插入到布朗树的部分中,作者对代码应该做什么做了一些解释,但撇开它的作用不谈,书中的一个重要注释到目前为止并没有解释定理证明的函数模式匹配中的奇怪语法 我知道可以通过使用|进一步解构,并且我可以理解,当使用重写时,|也可以用于分离不同的重写,但这会让人困惑 据我所知,重写绝对不是一项功能。接下来是以下内容: bt-insert a (bt-node{n}{m} a' l r p) rewrite +comm n m with p | if a <A a' then

在(第118页)关于插入到布朗树的部分中,作者对代码应该做什么做了一些解释,但撇开它的作用不谈,书中的一个重要注释到目前为止并没有解释定理证明的函数模式匹配中的奇怪语法

我知道可以通过使用
|
进一步解构,并且我可以理解,当使用
重写时,
|
也可以用于分离不同的重写,但这会让人困惑

据我所知,重写绝对不是一项功能。接下来是以下内容:

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)))
bt插入a(bt节点{n}{m}a'lrp)

用p | if a重写+comm n m经过一段时间的思考,我意识到如果

              p | if a <A a' then (a , a') else (a' , a)
         inj₁ p | (a1 , a2) 

p |如果a忽略证明一秒,此函数可以简化为

bt-insert :  ∀ {n: ℕ} → A → braun-tree n → braun-tree (suc n)
bt-insert a (bt-node {n} {m} a' l r _) = bt-node a1 (bt-insert a2 r) l _
  where 
    (a1, a2) = if a <A a' then (a , a') else (a' , a)
bt插入:∀ {n:ℕ} → A.→ 布朗树→ 布朗树(suc n)
bt插入a(bt节点{n}{m}a'lr_)=bt节点a1(bt插入a2r)l_
哪里
(a1,a2)=如果a