前回,'a * 'b -> 'b * 'aといったMLの型は,「AかつBならばBかつA」といった命題に対応する,という話をした。命題が成り立つことは,そのような型を持つ式が存在することに対応するのだった(ただし例外などの副作用や無限ループ,組み込み関数やライブラリ関数などは使用しないとする。以下同様)。 前回の繰り返しになるが,'a * 'b -> 'b * 'aは,「任意の型'aと'bについて,'a型の値と'b型の値の組を受け取り,'b型の値と'a型の値の組を返す」という関数の型だ。そのような型を持つ式としては,例えば以下のような関数が存在した。
![第15回 型からプログラムを当てる](https://cdn-ak-scissors.b.st-hatena.com/image/square/bed39b5962a5d552c95b6d796db8f55e72d32943/height=288;version=1;width=512/https%3A%2F%2Fxtech.nikkei.com%2Fimages%2Fn%2Fxtech%2F2020%2Fogp_nikkeixtech_hexagon.jpg%3F20220512)