∀
∀
記号は基本的に、全称量化を表します。つまり述語 P : α → Prop
に対して、∀ x : α, P x
は「すべての x : α
に対して P x
が成り立つ」という意味になります。
しかし、∀
は述語以外のものに対しても実は使うことができます。
#check ∀ n : Nat, Vector Nat n
この場合何を意味するかというと、∀ a : A, B
は (a : A) → B
と同じ意味になります。
set_option pp.foralls false
/- info: (n : Nat) → Vector Nat n : Type -/
#check ∀ n : Nat, Vector Nat n
実際のところ両者は常に同じです。型が Prop
になるときは、カリー・ハワード同型対応により「命題は型、証明はその項」なので全称量化の意味になるというだけで、型としては同じものです。型が Prop
になるときだけ、見やすいので ∀
記号を使う慣習になっています。
universe u
variable {A : Type} {B : A → Sort u}
example : ((a : A) → B a) = (∀ a : A, B a) := by rfl