Isabelle/Isar(その15)

 さらに1つ目のサブゴールの証明は

  from 1
  have "a 0 = 0"
    by simp
  also
  have "... = 1 - 1"
    by simp
  also
  have "... = 2 ^ 0 - 1"
    by simp
  finally
  show "a 0 = 2 ^ 0 - 1"
    by this

のように,calculationを生成するコマンドalsoと,その結果をthisとして参照するコマンドfinallyを用いて,推移律を活かした形にも書けます.

 一般の書式は

  have "X = (A::real)" sorry
  also
  have "... = B" sorry
  also
  have "... < C" sorry
  also
  have "... = Y" sorry
  finally
  have "X < Y" by this

であり,勿論haveの前にfromを入れることも出来,最後が結論ならshowとなります(利用できる推移律には等号のほか,print_trans_rules で表示されるものあります).なお,sorryはproveモードのコマンドで「証明出来たことにします」というやや危険な代物です.

 また,証明の最後をby thisとしているのは,finally(fromと同じくstateの前にchainモードに入るコマンド)により,thisが1 - 1 = 2 ^ 0 - 1から最初と最後とを結んだcalculationのa 0 = 2 ^ 0 - 1になった為で,by thisは . と略すことも出来ます.