Fixpoint quote_positive (p: positive) : value :=
match p with
| xI p' => c_capply suc1 [quote_positive p']
| xO p' => c_capply suc0 [quote_positive p']
| xH    => c_capply suc1 [c_capply zero []]
end.
Definition quote_value (n: N) : value :=
match n with
| N0     => c_capply zero []
| Npos p => quote_positive p
end.

Lemma add_correct m n:
evaluates (fapply addf [term_from_value (quote_value m); term_from_value (quote_value n)]) (quote_value (m + n)) /\
evaluates (fapply addt [term_from_value (quote_value m); term_from_value (quote_value n)]) (quote_value (N.succ( m + n))).