Web上の例題
既出の本家筋以外は中々見当たらないのですが,次の論文の補足Bに入門的な解説があります.
http://rudar.ruc.dk/bitstream/1800/6890/1/8%20-%20Automatization%20of%20the%20semantic%20tableau%20method.pdf
なお,取り上げられている例をただ証明するだけなら
# let t = `!n. ODD (3 * n + 2) ==> ODD n` ;; val t : term = `!n. ODD (3 * n + 2) ==> ODD n` # MESON[ODD_ADD; ODD_MULT; ARITH_RULE `~ODD 2`] t;; 0..0..2..8..33..solved at 47 val it : thm = |- !n. ODD (3 * n + 2) ==> ODD n # MESON[NOT_ODD; EVEN_ADD; EVEN_MULT; ARITH_RULE `EVEN 2`] t;; 0..0..1..5..14..43..146..solved at 189 val it : thm = |- !n. ODD (3 * n + 2) ==> ODD n
あるいは,MESONの検索が長くなりますが,ARITH_RULE を用いずに
# MESON[NOT_ODD; EVEN_ADD; EVEN_MULT; EVEN_DOUBLE; MULT_CLAUSES] t;; 0..0..1..5..18..65..239..803..3025..solved at 3624 val it : thm = |- !n. ODD (3 * n + 2) ==> ODD n # MESON [ODD_ADD; ODD_MULT; ONE; TWO; ODD] t;; 0..0..2..11..53..234..1104..5615..28515..155554..898058..5273951..solved at 11076498 val it : thm = |- !n. ODD (3 * n + 2) ==> ODD n
または,手続きを追って
prove (`!n. ODD (3 * n + 2) ==> ODD n`, GEN_TAC THEN CONV_TAC CONTRAPOS_CONV THEN SIMP_TAC[NOT_ODD; EVEN_EXISTS] THEN STRIP_TAC THEN ASM_SIMP_TAC[] THEN EXISTS_TAC `3 * m + 1` THEN ARITH_TAC);;
等とするのが簡明です.