Dans la section sur l'insertion dans les arbres Braun du Verified Programming in Agda book (page 118), l'auteur explique ce que le code est censé faire, mais en laissant de côté ce qu'il fait, une ommision singulière dans le livre n'est pas encore expliquer la syntaxe étrange dans la correspondance de modèle de fonction pour la démonstration de théorème.Comment lire la syntaxe de l'insertion de l'arbre de Braun?
Je comprends que le with pattern peut encore être déstructuré en utilisant |
et je peux comprendre que lors de l'utilisation rewrite
, |
peut également être utilisé pour séparer les différents remaniements, mais cela rend confus. Pour autant que je sache, réécrire n'est définitivement pas une fonction. Et puis vient ce qui suit:
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)))
Je suis vraiment confus quant à la façon dont rewrite +comm n m with p | if a <A a' then (a , a') else (a' , a)
doit être analysé mentalement. Et comment lit-on | inj₁ p | (a1 , a2) rewrite p
? Aussi, tout en testant les exemples précédents, j'ai découvert que pour une raison quelconque, l'ordre des réécritures n'a pas d'importance. Pourquoi donc?