🦆
Lean 入門:Scribble (1)
Lean のチュートリアルの Scribble の問題を順に解いていきます。
オンラインチュートリアルで、入力欄に回答を記入すると先に進めます。Scribble は
「Lean 速習コース」とも言うべきもので、これを一通りやると Lean で証明できる様になります。復習にはちょうど良いです。ただ結構な分量があります。
また本当にエッセンスだけ伝える感じなので、これから Lean を初めて学ぶ、と言う人は Lean Game Serverから、"A Lean Intro to Logic" をやって "Natural Number Game" をやった方が良いかもしれません。
Logo
命題論理の問題。
-
tauto: 命題論理の恒等式を一発で証明出来ますが、すぐにこの技は封印されてしまう・・・ -
rfl: ゴールが等式で、左辺と右辺が等しい時に使います -
assumption: ゴールと同じものが仮定の中にある時に使います -
decide: とりあえずゴールがTrueの時は使える -
contradiction: 仮定が矛盾している時に使える -
constructor:- ゴールの
を2つのゴールA\wedge B とA に分解するB - ゴールの
をA\leftrightarrow B ,A\to B に分解するB\to A
- ゴールの
-
obtain:-
obtain ⟨hA, hBC⟩ := hで 仮定の をh: A\wedge B\wedge C ,hA に分解するhBC -
obtain h | h := hで仮定の をh: A\vee B とh:A の2つの場合に場合分けするh:B -
の場合、h:A\leftrightarrow B obtainを使わなくてもh.mp,h.mprでアクセスできる
-
-
left,right: ゴールの のA\vee B かA かを選ぶB
Implis
含意を含む命題論理の問題。
-
intro: ゴールの をA\to B intro hAで仮定 とゴールhA:A に分解B -
revert: ゴールが で仮定にB があると、hA:A revert hAで仮定hAを消してゴールを に出来る。A\to B introの逆。 -
apply: ゴールが で仮定にB があると、hAB:A\to B apply hABでゴールを にする。A apply hAB at hみたいなことも出来る。 -
symm: ゴールの演算子の左右を入れ替える。symm at hなども書ける。 -
rw:rw [h1]とかrw [← h1]とかで書き換える。 -
trans: ゴールが の時、A\leftrightarrow B trans Cで ,A\leftrightarrow C と中間にC\leftrightarrow B を挿入できる。C -
by_cases:by_cases h:Aで とh:A の場合分けをする(古典論理)。h:\neg A -
rw [not_not]: 二重否定除去
Saturn
等式に関する問題。
-
ring: 環に関する等式証明をやってくれる
Quantus
量化子の練習。最後の「酒場のパラドックス」は難しいですね。
-
use: を証明するのに、\text{Nonempty }\mathbb{N} use 0と実例を1つ挙げる -
obtain: に対してh:\text{Nonempty }A obtain ⟨a⟩ := hとすると、 が手に入る。a:A -
unfold: 関数とかの定義を展開する -
choose: 仮定 を\exists (r:\mathbb{N}): n = r+r choose s hs using hで に変換する。hs:n = s + s -
push Not: を\neg\exists に書き換える。\forall\neg
Piazza
集合の包含関係の練習。
-
simp: 計算を進める。 -
ext x: 集合に関する等式 をA=B に書き換える。x\in A\leftrightarrow x\in B -
univ: Set N: の中の最大の集合、なので数学的には\mathbb{N} なんだけど\mathbb{N} は値の型で集合の型では無いので区別して書く、ということなんだと思う。\mathbb{N} -
eq_univ_iff_forall:s = \text{Set.univ} \leftrightarrow \forall (x : \alpha), x \in s
-
-
\emptyset:eq_empty_iff_forall_notMem:s = \emptyset \leftrightarrow \forall (x : \alpha), x \notin s - ゴールが
のとき、x\in A をh:B\subseteq A applyするとゴールが に変わる。x\in B
包含関係の問題は ext, simp, tauto で割と解ける。
Spinoza
否定に関する命題論理っぽいテーマ。
-
have,suffices: 補題を みたいに作れる。\text{have } g:\neg B -
by_contra: ゴールが ならば、P by_contra hで仮定 を作り、ゴールがh:\neg P Falseになる。 -
contrapose: ゴールを対偶で書き換える。 -
revert: 対偶の形を作るのに使える
Luna
不等式に関する証明。
-
omega: 強力な自動証明。整数なら使える。 -
linarith: たまに使える。実数、有理数でOK。 -
lt_trichotomy:obtain h | h | h := lt_trichotomy x yで ,x < y ,x = y の場合分けが出来る。x > y -
Icc:Icc a bで と閉区間を表す。\{a, a+1, \ldots, b\} -
simpで不等式に直す
-
-
subset_iff:s_1\subseteq s_2 \leftrightarrow \forall x:A, x\in s_1 \to x\in s_2.
Discussion