Prolog, >256 Bytes
I am using { _ | _ } which is a findall/3 that can be used inside is/2, _ [ _ , _ ] which is some arg/3 that, and sum(_) which is some aggregate. They can all be also used inside is/2:
*(X, Y, Z) :- functor(Y, matrice, _), L is len(X[1]), L =:= len(Y), !, M is len(X), N is len(Y[1]), Z is { { sum({ X[J,K] * Y[K,I] | between(1,L,K) }) | between(1,N,I) } | between(1,M,J) }. Together with the extra definitions for the aforementioned predicates and the non-standard is/2 that can return more than numbers, its sure >256 bytes.