proposition: Theorem spec_add: forall x y, [add x y] = [x] + [y].
proof: Proof. intros x y. rewrite add_fold. apply spec_same_level; clear x y. intros n x y. cbv beta iota zeta. generalize (ZnZ.spec_add_c x y); destruct ZnZ.add_c as [z|z]; intros H. rewrite spec_mk_t. assumption. rewrite spec_mk_t_S. unfold interp_carry in H. simpl. rewrite ZnZ.spec_1. assumption. Qed.
imports: Bool BigNumPrelude ZArith Lia Nnat Ndigits CyclicAxioms DoubleType Nbasic Wf_nat StreamMemo NSig NMake_gen