open
open
は名前空間を開くためのコマンドです.
名前空間 N
の中にある定義 S
を使いたいとき,通常はフルネームの N.S
を使う必要がありますが,open N
とすることで短い別名 S
でアクセスできるようになります.
namespace Hoge
def foo := "hello"
end Hoge
-- 名前空間の外からだと `foo` という短い名前が使えない
#check_failure foo
section
-- 名前空間 `Hoge` をオープン
open Hoge
-- `open` することで `foo` という短い名前が使えるようになる
#check foo
end
-- セクションが終わると再び短い名前は使えなくなる
#check_failure foo
入れ子になった名前空間
名前空間 N₁
と N₂
が入れ子になっているとき,その下にある定義に短い名前でアクセスするには,open N₁ N₂
とすればよいです.
namespace Foo
namespace Bar
def baz := "world"
end Bar
end Foo
-- 入れ子の名前空間を開く
-- `Foo` の後に `Bar` を開く必要がある
open Foo Bar
#check baz
名前空間と公理
また名前空間 Foo
内に bar
という公理(axiom
で宣言されたもの)が存在する場合,Foo
を開くと同時に公理 Foo.bar
もインポートされます.
open Classical
-- 選択原理
#print choice
variable (P : Prop)
-- 選択原理が仮定された状態になっているため,
-- 任意の命題が決定可能になっている
#synth Decidable P