intros.
congruence.
Qed.
intros.
congruence.
Qed.
(* 15=0 /\ 10=0 /\ 6=0 -> 0=1 *)
intros.
congruence.
Qed.
(* Examples that fail due to dependencies *)
(* yields transitivity problem *)
intros;  dependent rewrite e; exact e0.
Qed.
(* yields congruence problem *)
intros;  rewrite e; reflexivity.
Qed.
(* example that Congruence. can solve (dependent function applied to the same argument)*)
congruence.
Qed.
(* Examples with injection rule *)
intros.
split;  congruence.
Qed.
intros.
congruence.
Qed.
(* Examples with discrimination rule *)
intros.
congruence.
Qed.
intros.
congruence.
Qed.
(* example with implications *)
congruence.
Qed.
Set Implicit Arguments.
Parameter elt: Set.
Parameter elt_eq: forall (x y: elt), {x = y} + {x <> y}.
Definition t (A: Set) := elt -> A.
Definition get (A: Set) (x: elt) (m: t A) := m x.
Definition set (A: Set) (x: elt) (v: A) (m: t A) :=
fun (y: elt) => if elt_eq y x then v else m y.

Lemma gsident:
forall (A: Set) (i j: elt) (m: t A), get j (set i (get i m) m) = get j m.