The type ascription Mt : MT is opaque. Thus the compiler can't use the information about the type definition, since you could change the definition (that could be compiled separately) at any time. To see this, if you do
module type MT =
sig
type ('a,'b) fct = 'a -> 'b
val create : ('a -> 'b) -> ('a,'b) fct
end;;
then the code you wrote compiles fine.