Are you able to provide a minimal example with code one could actually evaluate?
I think there are some fundamental issues in your syntax. For example to define a function XX
with 3 arguments you would want to instead do
XX[aa_, bb_, UU_] := -Inverse[aa].(bb.UU )
or something similar. The following doesn't really make a ton of sense:
XX = -Inverse[aa].(bb.UU );
X=XX&[aa=4,bb=5,cc=6]
Consider this documentation page: https://reference.wolfram.com/language/tutorial/DefiningFunctions.html