Idris-dev/test/proof001/test029.idr
2014-01-30 17:24:08 +00:00

39 lines
742 B
Idris

module simple
plus_comm : (n : Nat) -> (m : Nat) -> (n + m = m + n)
-- Base case
(Z + m = m + Z) <== plus_comm =
rewrite ((m + Z = m) <== plusZeroRightNeutral) ==>
(Z + m = m) in refl
-- Step case
(S k + m = m + S k) <== plus_comm =
rewrite ((k + m = m + k) <== plus_comm) in
rewrite ((S (m + k) = m + S k) <== plusSuccRightSucc) in
refl
-- QED
append : Vect n a -> Vect m a -> Vect (m + n) a
append [] ys ?= ys
append (x :: xs) ys ?= x :: append xs ys
---------- Proofs ----------
simple.append_lemma_2 = proof {
intros;
compute;
rewrite (plusSuccRightSucc m n);
trivial;
}
simple.append_lemma_1 = proof {
intros;
compute;
rewrite sym (plusZeroRightNeutral m);
exact value;
}