以下のサンプルコードでは、 大きな数のフィボナッチ数計算を、途中の計算結果を保存することで可能にしています。
ところが二度三度と繰り返すと、重複して計算結果が溜まってしまいます。
そこで abolish したいのですが、これを実行すると元の定義も消えてしまいます。
こういう場合の定番となっている処理方法はありますか?

:- dynamic('_n番目のフィボナッチ数は_n-1番目のフィボナッチ数と_n-2番目のフィボナッチ数を加算したものになる'/2).  

フィボナッチ数(_n番目,_フィボナッチ数) :-  
    '_n番目のフィボナッチ数は_n-1番目のフィボナッチ数と_n-2番目のフィボナッチ数を加算したものになる'(_n番目,_フィボナッチ数).  


'_n番目のフィボナッチ数は_n-1番目のフィボナッチ数と_n-2番目のフィボナッチ数を加算したものになる'(0, 0) :- !.  
'_n番目のフィボナッチ数は_n-1番目のフィボナッチ数と_n-2番目のフィボナッチ数を加算したものになる'(1, 1) :- !.  
'_n番目のフィボナッチ数は_n-1番目のフィボナッチ数と_n-2番目のフィボナッチ数を加算したものになる'(_n番目,_フィボナッチ数) :-  
    '_n-1番目のフィボナッチ数と_n-2番目のフィボナッチ数を加算したものになる'(_n番目,_フィボナッチ数).  

'_n-1番目のフィボナッチ数と_n-2番目のフィボナッチ数を加算したものになる'(_n番目,_フィボナッチ数) :-  
    '_n-1番目のフィボナッチ数と'(_n番目,_フィボナッチ数_1),  
    '_n-2番目のフィボナッチ数を'(_n番目,_フィボナッチ数_2),  
    加算したものになる(_フィボナッチ数_1,_フィボナッチ数_2,_フィボナッチ数),  
    '_n番目のフィボナッチ数の計算結果を保存する'(_n番目,_フィボナッチ数).  


'_n-1番目のフィボナッチ数と'(_n番目,_フィボナッチ数_1) :-  
    _n_1番目 is _n番目 - 1,  
    '_n番目のフィボナッチ数は_n-1番目のフィボナッチ数と_n-2番目のフィボナッチ数を加算したものになる'(_n_1番目,_フィボナッチ数_1).  

'_n-2番目のフィボナッチ数を'(_n番目,_フィボナッチ数_2) :-  
    _n_2番目 is _n番目 - 2,  
    '_n番目のフィボナッチ数は_n-1番目のフィボナッチ数と_n-2番目のフィボナッチ数を加算したものになる'(_n_2番目,_フィボナッチ数_2).  

加算したものになる(_フィボナッチ数_1,_フィボナッチ数_2,_フィボナッチ数) :-  
    _フィボナッチ数 is _フィボナッチ数_1 + _フィボナッチ数_2.  

'_n番目のフィボナッチ数の計算結果を保存する'(_n番目,_フィボナッチ数) :-  
    asserta(('_n番目のフィボナッチ数は_n-1番目のフィボナッチ数と_n-2番目のフィボナッチ数を加算したものになる'(_n番目,_フィボナッチ数) :- ! )).