Im Anschluss an meine anderen question, ich versuchte, die tatsächliche Übung in Type-Driven Development with Idris für same_cons
zu beweisen, dass bei zwei gleiche Listen vor dem gleichen Element zu jeder Liste in zwei gleiche Listen führt.Liste Gleichheit w/`cong`
Beispiel:
prove that 1 :: [1,2,3] == 1 :: [1,2,3]
So kam ich mit dem folgenden Code auf, die kompiliert:
sameS : {xs : List a} -> {ys : List a} -> (x: a) -> xs = ys -> x :: xs = x :: ys
sameS {xs} {ys} x prf = cong prf
same_cons : {xs : List a} -> {ys : List a} -> xs = ys -> x :: xs = x :: ys
same_cons prf = sameS _ prf
ich anrufen kann es über:
> same_cons {x=5} {xs = [1,2,3]} {ys = [1,2,3]} Refl
Refl : [5, 1, 2, 3] = [5, 1, 2, 3]
In Bezug auf die cong
Funktion , mein Verständnis ist, dass es einen Beweis braucht, dh a = b
, aber ich verstehe sein zweites Argument nicht: f a
.
> :t cong
cong : (a = b) -> f a = f b
Bitte erläutern.