Isabelle/Isar(その9)
前回の内容を入力し終わると,Outputは
proof (prove): step 0 goal (1 subgoal): 1. a n = 2 ^ n - 1
となり,証明待ちモードに入ったことが判ります.
ここからいよいよ証明です.最初の
proof (induction n)
はshowsで指定した結論を自由変数nについての数学的帰納法の結論とするようなmethodを用いるということで,入力後のOutputは
proof (state): step 1
goal (2 subgoals):
1. a 0 = 2 ^ 0 - 1
2. ⋀n. a n = 2 ^ n - 1 ⟹ a (Suc n) = 2 ^ Suc n - 1
となり2つのサブゴールが出来たことが判ります.proofコマンドはこのように証明の最初に適用するmethodを指定するもので,引数を略すると,結論の形に応じたmethodが適用されます.例えば
lemma shows "A <-> B" proof
に対するOutputは
proof (state): step 1
goal (2 subgoals):
1. A ⟹ B
2. B ⟹ A
となります.なお,何もして欲しくない場合には
lemma shows "A <-> B" proof -
のように「何もしない」methodを指定すれば
proof (state): step 1
goal (1 subgoal):
1. A = B
のままです.また,システムが適当なmethodを見つけられない場合にはエラーになりますので,そのときも proof - としておきます.
上のOutputにある通り,proofコマンドの実行が完了すると「次に証明したい事柄を書いてください」状態,すなわち,proof (state)モードに入ります.