Section products_limit_def.
Variables (C : Category) (I : Type) (a : I -> C).
Definition FunDiscr_ob (i : Discr I) := a i.
Definition FunDiscr_arrow (i j : Discr I) (f : i --> j) :=
match f in (Discr_mor d d0) return (Carrier (a d --> a d0)) with
| Build_Discr_mor k => Id (a k)
end.
Canonical Structure FunDiscr_map (i j : Discr I) :=
Build_Map (FunDiscr_map_law (i:=i) (j:=j)).

Lemma FunDiscr_id_law : Fid_law FunDiscr_map.