Require Import Omega. Require Import ArithRing. Require Import Nat. Require Import Coq.Unicode.Utf8. Notation "1 + n" := (S n) (at level 41). Fixpoint sumFirstN (n : nat) : nat := match n with | O => O | 1 + n' => (1 + n') + (sumFirstN n') end. Recursive Extraction sumFirstN. Eval compute in (sumFirstN 3). Lemma gauss : ∀ n, sumFirstN n = (n * (1+ n))/2. Proof. intro. SearchPattern (?a = ?b/?c). apply Nat.div_unique_exact; [auto| symmetry]. induction n. compute. reflexivity. simpl sumFirstN. ring_simplify. rewrite IHn. ring. Show Proof. Qed. Require Import ExtrOcamlBasic. Require Coq.Lists.List. Import List.ListNotations. Open Scope list_scope. Fixpoint length {A} (l:list A) : nat := match l with | [] => 0 | h::tl => 1 + (length tl) end.