protected

protected は,ある名前空間 Hoge にある定義 foo に対して,必ずフルネームの Hoge.foo でアクセスすることを強要するものです.

structure Point where
  x : Nat
  y : Nat

namespace Point

  protected def sub (p q : Point) : Point :=
    { x := p.x - q.x, y := p.y - q.y }

  -- 名前空間の中にいても,短い名前ではアクセスできない
  #check_failure sub

  -- フルネームならアクセスできる
  #check Point.sub

end Point

open Point

-- 名前空間を開いていても,短い名前でアクセスできない
#check_failure sub

-- フルネームならアクセスできる
#check Point.sub