ATS における型検査は制約の生成と解決を引き起こします。 例えば、次のコードはよく知られた階乗関数を実装しています:
fun fact{n:nat} ( x: int(n) ) : [r:nat] int r = if x > 0 then x * fact (x-1) else 1 // end of [fact]
それぞれの自然数 n について、n > 0 が n - 1 >= 0 の意味を含む
それぞれの自然数 n とそれぞれの自然数 r1 について、n > 0 が n * r1>= 0 の意味を含む
それぞれの自然数 n について、常に 1 >= 0 である
初期設定では、ATS/Postiats で実装されている制約ソルバは標準の任意精度演算を用いています。 効率の理由で、整数の制約の解決にマシンレベル演算を使うこともまた選択できます。 演算のオーバーフローの可能性があるため、 マシンレベル演算を使う制約ソルバが返す結果は不正確である可能性があります。 (しかし今までのところ実際にはそのような状況に遭遇したことはありません。)