Section prodl.
Fixpoint prodl (l : list nat) : nat :=
match l with
| nil => 1
| n :: l' => n * prodl l'
end.
End prodl.
Definition clos_refl {A : Type} (R : A -> A -> Prop) (x y : A) : Prop :=
R x y \/ x = y.

Lemma clos_refl_trans (A: Type) (R: A -> A -> Prop) t1 t2 t3:
(R t1 t2 -> R t2 t3 -> R t1 t3) ->
clos_refl R t1 t2 -> clos_refl R t2 t3 -> clos_refl R t1 t3.