萌えハッカーニュースリーダー

2025/08/17 09:01 Beyond Booleans

出典: https://overreacted.io/beyond-booleans/
hakase
博士

やあ、ロボ子!今日のITニュースはLeanという言語での命題の扱い方についての記事じゃ。

roboko
ロボ子

Leanですか、博士。初めて聞きました。どんな言語なのですか?

hakase
博士

Leanはね、数学的な定理を証明することに特化した言語なのじゃ。面白いことに、Leanでは`2 + 2 = 4`のような式は、TypeScriptのような言語の`Boolean`型ではなく、命題(`Prop`型)として扱われるんじゃよ。

roboko
ロボ子

命題、ですか。それはどういうことでしょう?

hakase
博士

つまり、Leanでは`2 + 2 = 4`は真偽を判定するものではなく、証明を必要とするものなのじゃ!

roboko
ロボ子

証明が必要…ですか。なんだか難しそうですね。

hakase
博士

難しくはないぞ!Leanでは命題が型としても機能するから、命題が真であることを証明するには、その命題の型の値(証明)を提示すれば良いのじゃ。

roboko
ロボ子

型の値を提示する、ですか。例えば、どうすれば良いのでしょう?

hakase
博士

`by rfl`というLeanの組み込み値を使うと、`foo = foo`のような自明な命題の証明を生成できるんじゃ。これは、反射律(reflexivity)の略なのじゃ。

roboko
ロボ子

`by rfl`…なるほど、自明な場合はそれを使うんですね。

hakase
博士

そうじゃ!そして、もっと複雑な命題を証明するには、公理や既存の証明に基づいて論理的な議論を組み立てるのじゃ。Mathlibというライブラリには、たくさんの証明が用意されているぞ。

roboko
ロボ子

既存の証明を活用できるのは便利ですね。

hakase
博士

じゃろ?さらに面白いのは、Leanでは命題が偽であることを示すには、その否定の証明を提示する必要があるということじゃ。

roboko
ロボ子

否定の証明、ですか。

hakase
博士

そうじゃ!矛盾を含む公理を使わない限り、`2 + 2 = 5`のような命題の型の値を生成することはできないのじゃ。

roboko
ロボ子

なるほど。Leanは、真偽を厳密に扱うための仕組みが整っているんですね。

hakase
博士

その通り!そして、Leanでは同じ命題に対するすべての証明は等しいとみなされるんじゃ。命題には最大で1つの「異なる」証明が存在する(証明が見つかった場合、命題は真)。

roboko
ロボ子

証明が一つ見つかれば、それで十分なのですね。

hakase
博士

そうじゃ!Leanでは、「xが0と1の間にある」のような事実をプログラム内で安全に受け渡すことができるんじゃ。関数は、引数が特定の範囲内にあることの証明を要求できる。

roboko
ロボ子

それはすごいですね!型付けされた真実性、とでも言うのでしょうか。

hakase
博士

その通り!`by rfl`は、`Eq.refl`の呼び出しを生成するマクロじゃ。`Eq`は、Leanで等価性を表現するために使用される型なのじゃ。

roboko
ロボ子

奥が深いですね。Lean、少し興味が湧いてきました。

hakase
博士

じゃろ?Leanでは、型がパスすると、それが証明されたことになるんじゃ。

roboko
ロボ子

なんだか、禅問答みたいですね。

hakase
博士

ふむ、ロボ子よ。Leanをマスターするには、まずお経を唱えるところから始めるかのじゃ?

roboko
ロボ子

博士、それはちょっと違うと思います…

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search