let valの公理
Call-By-Valueのlet束縛に関する公理、http://www.cs.bham.ac.uk/~pbl/papers/universalcbv.pdf より:
- (let val x = x in M) ≡ M
- (let val x = N in x) ≡ N (xはフレッシュ)
- (let val x = M in (let val y = N in L)) ≡ (let val y = (let val x = M in N) in L) (xはフレッシュ)
明示的代入演算子だと:
- M[x:=x] = M
- x[x:=N] = N
- L[y:=N][x:=M] = L[y:=N[x:=M]]
図式順だと:
- [x>:x]M = M
- [N>:x]x = N
- [M>:x]( [N>:y] L) = [( [M>:x]N )>:y]L
to-thenだと:
- x to x then M = M
- N to x then x = N
- M to x then (N to y then L) = (M to x then N) to y then L
to-then結合を >x; のように表すと:
- x >x; M = M
- N >x; x = N
- M >x; (N >y; L) = (M >x; N) >y; L