Inductive pack (A: Type) : Type :=
packer : A -> pack A.
Arguments packer {A}.
Definition uncover (A : Type) (packed : pack A) : A :=
match packed with packer v => v end.
Notation "!!!" := (pack _) (at level 0, only printing).
(* The following data is used as material for automatic proofs based on type classes. *)
Class EvenNat the_even := {half : nat; half_prop : 2 * half = the_even}.
Instance EvenNat0 : EvenNat 0 := {half := 0; half_prop := eq_refl}.

Lemma even_rec n h : 2 * h = n -> 2 * S h = S (S n).