Σ

Σ は、依存ペア(dependent pair)型を表します。

たとえば、[(Nat, 1), (String, "hello"), (Bool, true)] というようなリストを考えてみます。 このリストに正しく型を付けるにはどうすればいいでしょうか? 通常の直積型では、「右の要素の型が左の要素の型に依存する」ことが許されないので、型を付けることができません。

#check_failure [(Nat, 1), (String, "hello"), (Bool, true)]

しかし、依存ペア型を使うことで解決できます。 この場合、リストの中身の型は Σ (α : Type), α になります。 これは、(α : Type) × α と同じ意味です。

example : (Σ (α : Type), α) = ((α : Type) × α) := by rfl

これを使うと、次のようにリストに型を付けることができます。

def sample : List ((α : Type) × α) :=
  [⟨Nat, 1⟩, ⟨String, "hello"⟩, ⟨Bool, true⟩]