
Definition ide (X: Type) (x: X) := x.

(* On equality *)
Lemma l1e : ide nat 2 = 2.
Proof. reflexivity. Qed.

Lemma l2e : ide (nat ->nat) (ide nat) 2 = 2.
Proof. reflexivity. Qed.

Definition ideide (X:Type) : X->X := ide (X->X) (ide X).

Lemma l3e : forall X, ideide X = ide X.
Proof. reflexivity. Qed.

Lemma l3'e : ideide = ide.
Proof. reflexivity. Qed.

(* Making X an implicit arguments *)

Definition id {X: Type} (x: X) := x.


(* On equality *)
Lemma l1 : id 2 = 2.
Proof. reflexivity. Qed.

Lemma l2 : id id 2 = 2.
Proof. reflexivity. Qed.

Definition idid (X:Type) : X->X := id id.

(* @id is id, but where arguments are explicit *)
Lemma l3 : forall X, @idid X = @id X.
Proof. reflexivity. Qed.

