private

private は,その定義があるファイルの中でだけ参照可能になるようにする修飾子です.他のファイルからはアクセス不能になります.

不安定なAPIなど,外部に公開したくないものに対して使うのが主な用途です.

なお private コマンドでセクションや名前空間にスコープを制限することはできません.

namespace Hoge
  section
    -- private とマークした定義
    private def addOne (n : Nat) : Nat := n + 1
  end
end Hoge

open Hoge

-- アクセスできる
#check addOne

以下の例 1 のように,変数のスコープを制限するようなセクションの変種を自作することは可能です.

open Lean Elab Command

elab "private section" ppLine cmd:command* ppLine "end private section": command => do
  let old ← get
  try
    for cmd in cmd do
      elabCommandTopLevel cmd
    throwAbortCommand
  finally
    set old

private section
  def foo := "hello!!"

  -- セクションの中なら当然アクセスできる
  #check foo
end private section

-- `foo` にアクセスできない
#check_failure foo
1

Alex J. Best さんによる Zulip Chat/lean4/private section での投稿を元にした例です.