Fixpoint nsum (n:Nat) {struct n} : seq n Nat -> Nat :=
match n return (seq n Nat -> Nat) with
|O => fun x:seq 0 Nat => 0
|S m => fun x:seq (S m) Nat => (head x) + (nsum m (Seqtl x)) end.

(* Specifications: *)
Lemma seqtlobv:forall(n:Nat)(G:Setoid)(A:part_set G) (AH:seq(S n)A) (g:G)(gH:in_part g (seq_set(Seqtl(Map_embed AH)))), in_part g A.
Lemma Q8:forall(G:Setoid)(a:G)(A:part_set G)(n:Nat) (FINA:has_n_elements n A)(H:in_part a A),n>0.
Lemma shrink_one:forall(E:Setoid)(B:part_set E) (k:Nat)(H:has_n_elements k B)(x:E)(Hx:in_part x B), has_n_elements (k-1) (minus_part B x).
Lemma finfull:forall(G:Setoid)(n:Nat)(H:has_n_elements n G), has_n_elements n(full G).
Lemma samecardB:forall(E F:Setoid)(M:MAP F E) (S:surjective M)(I:injective M)(n:Nat)(C:has_n_elements n F), has_n_elements n E.
Lemma samecardA:forall(E F:Setoid)(M:MAP E F) (S:surjective M)(I:injective M)(n:Nat)(C:has_n_elements n E), has_n_elements n F.