あるモジュールで、別の定義済みモジュールの宣言を使用できるようにすることを、モジュールの輸入 (import) と呼ぶ。
モジュールの輸入には、protecting
、extending
、using
(およびそれぞれの省略形 pr
、ex
、us
) を用いる:
pr(
<module-exp>)
ex(
<module-exp>)
us(
<module-exp>)
<module-exp> はモジュール式と呼ばれる式であり、輸入するモジュール名を指定する他、様々な指定が行える。最も簡単なモジュール式は、モジュール名である。より複雑なモジュール式については、本講義では割愛する。
pr
、ex
、us
の違いは輸入する際に、元のモジュールが表すモデルにどのような変更を許容するかである。
pr
: モデルに新しい要素を付け加えたり、異なっていた 2つの要素を等しいものとしない。ex
: モデルに新しい要素を付け加えることが許すが、異なっていた 2つの要素を等しいものとしない。us
: 特に制限はない。例えば、ex
では Nat
に新しい要素 nan
を追加することが許されるが、pr
では許されない:
mod! NAT+NAN { ex(NAT+) op nan : -> Nat }
また、us
では s(s(s(s(s(s(s(s(s(s(s(s(0))))))))))))
(12) と 0
を同じ要素と宣言することで、12 を法とする数を宣言できる※が、pr
や ex
では許されない
※ 12 = 0 だけでなく、13 = 1、14 = 2、... も一つの等式で宣言されていることに注意せよ。
mod! HOUR12 { us(NAT+) eq s(s(s(s(s(s(s(s(s(s(s(s(0)))))))))))) = 0 . }
Original Copyright © Takahiro Seino, all rights reserved.