安全性判定の分解規則
式Eの計算が、すべての部分式の計算も含めて安全に行われる(と予測できる)とき、《E》 と書く。式Eのすべての部分式とパイプ記号には、番号(一意的ならなんでもいい)が振ってあるとする。異なる番号が同じ場所を指す可能性がある。([追記]そんなにイッパイ番号いらねー[/追記])
分解規則(逆推論規則)を ⇒| で示す。□ は空の目印。
基底:コマンド呼び出しと定数
- 《f》 ⇒| □
- 《c》 ⇒| □
帰納ステップ:
- 《E |i F》 ⇒| 《E》 [Cod(E)⊆Dom(F)]i 《F》
- 《[E, F]》 ⇒| 《E》 《F》
- 《{α:E, β:F}》 ⇒| 《E》 《F》
- 《when {α=>E, β=>F}》 ⇒| 《E》 《F》
- 《each{E}》 ⇒| 《E》
- 《@a E》 ⇒| 《E》
- 例外:void規則 《E |i F》 ⇒| 《E》 《F》 (Dom(F) = void のとき)
制限付き安全性:iは式の入り口番号、jは式の出口番号
[追記]なんであれ、名前を付けてあげないとそれを指し示すことができないので、Caty-Jcentric 型理論/型推論/意味論 - 檜山正幸のキマイラ飼育記 メモ編 で触れている演繹系を SIL と呼ぶことにした。Simple Inclusion Logic 、発音は「汁」。[/追記]
安全性の主張(証明ターゲット)は、SIL(Simple Inclusion Logic)命題の有限集合まで還元される。それぞれのSIL命題には、パイプ番号、式入り口番号、式出口番号が付いている。SIL命題(原子論理式)を、SIL演繹系で証明し、失敗した命題番号に対応する位置にマークして、あとは目的に応じて対処する。