>>103
再帰の終了条件を指定するものなのだと思った方が良いようですね。

P(x):=x>0;
matchdeclare(a,P);
tellsimp(fact(a),a*fact(a-1));
tellsimp(fact(0),1);
fact(10);
fact(-10);
fact(x);

述語という語感から

matchdeclare(b,Human);
tellsimpafter(Human(b),Mortal(b));
Human(Socrates);

みたいな書き方をするイメージを受けていたのですが、
これだと、Humanという述語が真偽値を返すように具体的に定義されていないので、
HumanをMortalに置き換える規則が適用されない。

matchdeclare(b,true);

と書かなければならない。
この場合bを使って再帰的定義をすると、無限再帰になると。