2017-06-26 2 views

Antwort

6

minus n nicht reduziert, weil minus ist defined mit Muster auf dem ersten Argument übereinstimmt, gefunden

total minus : Nat -> Nat -> Nat 
minus Z  right  = Z 
minus left  Z   = left 
minus (S left) (S right) = minus left right 

Sie müssen also Ihre Z undteilenFälle auch:

minusReduces : (n : Nat) -> n `minus` Z = n 
minusReduces Z = Refl 
minusReduces (S k) = Refl 
+0

Es funktioniert. Obwohl ich immer noch verwirrt bin. Es gibt eine "minus links Z = links" -Klausel, ich kann nicht sehen, wie es beim ersten Argument geteilt wird. –

+3

Ja, aber zuerst musst du durch den 'Minus Z'-Fall fallen, um dorthin zu gelangen! Denken Sie daran, die Fälle sind bestellt. – Cactus

+1

Interessant. Das Verhalten unterscheidet sich von impliziten Auflösungsregeln in formlos/Scala. –

Verwandte Themen