Динамический предикат работает так, как вы ожидаете, поэтому есть что-то еще не так, если он не работает для вас.
Если test.P выглядит так:
:- dynamic likes/2.
likes(mary,tom).
С ним можно ознакомиться, и тогда можно утверждать больше лайков / 2 факта:
XSB Version 3.2 (Kopi Lewak) of March 15, 2009
[i686-pc-linux-gnu; mode: optimal; engine: slg-wam; scheduling: local; word size: 32]
| ?- consult('test.P').
[Compiling ./test]
[test compiled, cpu time used: 0.0440 seconds]
[test loaded]
yes
| ?- assert(likes(mary, bob)).
yes
| ?- likes(X,Y).
X = mary
Y = tom;
X = mary
Y = bob;