停止性の証明?

プログラムが必ず終了するか? 無限ループにならないか?  の証明。
これであってるのかな?

例題:階乗。言語はVDMで。

階乗: nat +> nat
階乗(n) == if n=0 then 1 else n*階乗(n-1);

n=0のとき
停止するか?:階乗(0)
停止するか?:if 0=0 then 1 else 0*階乗(0-1);
停止するか?:1
停止するか?:YES

n=kのとき、階乗(k)は停止すると仮定する。
n=k+1のとき
停止するか?:階乗(k+1)
停止するか?:if (k+1)=0 then 1 else (k+1)*階乗((k+1)-1);
停止するか?:(k+1)*階乗((k+1)-1);
停止するか?:階乗((k+1)-1);
停止するか?:階乗(k);
ここで、階乗(k)は停止すると仮定しているので、
停止するか?:YES

一般的には引数は複数だし、いろんな型があるから証明は難しいよなぁ〜。
VDMにmeasureができたけど、どうつかうんだ?