

derive(Gamma,methInv(E0,M,E),C) :-
        
             derive(Gamma,E0,C0),
             mtype(M,C0,arrowtype(D,C)),
             derive(Gamma,E,C),
             subtype(C,D).


subtype(T,T):- !.

subtype(T1,T2) :- extends(T1,T2),!.
subtype(T1,T2) :- extends(T1,T), subtype(T,T2).
