miz3

miz3
http://arxiv.org/abs/1201.3601
はメモリーUnixのみ)に常駐して mizar のような natural language declarative style の証明を書く為の自動入力ツールで,インストールは

cp miz3/exrc ~/.exrc
export PATH = $PATH:~/CAS/hol_light/miz3/bin

として,HOL Light から

#use "miz3/make.ml";;

とすれば,vi 上で Ctrl+c Return により,次のアクションをプロンプトしてくれます(便利かも知れませんが,私には...).

また,既存の HOL Light の証明からのコンバート機能も備えいます(こちらはそれなりに楽しめそうです).使い方は簡単で,上に続けて

#use "miz3/miz3_of_hol.ml";;

とし,例えば,test.ml というファイルに

let thm20130322 = prove
 (`!m. ODD (3 EXP m)`,
  INDUCT_TAC THENL
  [ARITH_TAC;
   ASM_MESON_TAC [ARITH_RULE `ODD 3`; EXP; ODD_MULT]]);;

と書かれていれば

# miz3_of_hol "test.ml" "thm20130322";;
0..0..1..4..13..38..103..256..617..1449..solved at 3337
val it : step =
  !m. ODD (3 EXP m) [1]
  proof
    ODD (3 EXP 0) [2] by ARITH_TAC;
    !m. ODD (3 EXP m) ==> ODD (3 EXP SUC m) [3]
    proof
      let m be num;
      assume ODD (3 EXP m) [4];
    qed
      by ASM_MESON_TAC [ARITH_RULE (parse_term "ODD 3"); EXP; ODD_MULT],4;
  qed by INDUCT_TAC from 1,2;

のようになります.

おまけ

# let tm = `!m. ODD (3 EXP m)` ;;
val tm : term = `!m. ODD (3 EXP m)`
# PV9 [MK_num_INDUCTION tm; ARITH_RULE `ODD 1 /\ ODD 3`; EXP; ODD_MULT] tm;;
-------- Proof 1 --------

THEOREM PROVED

------ process 3952 exit (max_proofs) ------
val it : thm = |- !m. ODD (3 EXP m)