現在、おそらく最も強力な型システムを持つと思われるLean 4によるコード。型ファミリーや依存タプルを含む型を定義して、型チェックは型システムに任せる。プログラマは、データの整合性をチェックするようなコードは書かない。処理のみを書く。
/-- 既婚かどうかのフラグにより変化する型の定義 既婚の場合は配偶者の名前である文字列型 未婚なら特に値はない(空集合ではなくて、Void = Unit 型) -/ def Partner (married : Bool) : Type := match married with | true => String -- married = true なら文字列型 | false => Unit -- married = false ならUnit型 /-- アンケートデータを引数にもらって処理する関数 name : 本人の名前 married : 既婚かどうか partner : 配偶者の名前(ただし、既婚の場合だけ) -/ def processEnqueteData (name : String) -- 本人の名前 (married : Bool) -- 既婚かどうか (partner : Partner married) -- 配偶者の名前(ただし、既婚の場合だけ) : String -- 戻り値の型 := -- 既婚なら、本人の名前と配偶者の名前を " and " を挟んでつなぐ -- 未婚なら、本人の名前のみ match married with | true => .append (.append name " and ") partner | false => name
型定義と関数定義の区別がないことに注意。型も「Type型の値」とみなすので、型定義も「型という値を計算する関数」となる。$`|{\bf Set}|`$ もサイズがでかいけど集合に違いはない、と考えるのと同じ。
宇宙階層は型システムに正式に組み込まれている(「火の鳥」の世界観が実装されている)。宇宙に関する多相は universe polymorphism と呼ぶ。例えば、どの宇宙でも動作する関数は宇宙多相関数〈universe polymorphic function〉という。