素数全体の集合が上に有界でないこと(その2)

前回程度なら参照する定理を与えるだけで...

# MESON [FACT_LE; ARITH_RULE `1 <= f ==> ~(f + 1 = 1)`; PRIME_FACTOR; DIVIDES_FA
CT_PRIME; COPRIME_PLUS1; coprime; prime; NOT_LE] `!n. ?p. prime p /\ n < p` ;;
0..0..0..6..16..39..92..171..316..618..1073..1919..3361..5464..9446..solved at 1
4672
val it : thm = |- !n. ?p. prime p /\ n < p

# MESON [FACT_LE; ARITH_RULE `1 <= f ==> ~(f + 1 = 1)`; PRIME_FACTOR; DIVIDES_FA
CT_PRIME; COPRIME_PLUS1; coprime; prime] `~(?n. !p. prime p ==> p <= n)` ;;
0..0..0..3..9..27..64..117..221..428..742..1402..2437..4001..solved at 5874
val it : thm = |- ~(?n. !p. prime p ==> p <= n)

と証明してくれます.ただし,ARITH_RULE で明示した部分を既存の定理で構成すると

# MESON [FACT_LE; LE_1; ONE; ADD1; SUC_INJ; PRIME_FACTOR; DIVIDES_FACT_PRIME; COPRIME_PLUS1; coprime; prime] `~(?n. !p. prime p ==> p <= n)` ;;
0..0..0..3..9..24..60..112..240..503..944..2307..5015..10282..32668..80687..186333..745893..2020724..4951370..

と MESON には荷が勝ち過ぎようですから,PV9 を用いれば当然

# PV9 [FACT_LE; LE_1; ONE; ADD1; SUC_INJ; PRIME_FACTOR; DIVIDES_FACT_PRI
ME; COPRIME_PLUS1; coprime; prime] `~(?n. !p. prime p ==> p <= n)` ;;
-------- Proof 1 --------

THEOREM PROVED

------ process 10100 exit (max_proofs) ------
val it : thm = |- ~(?n. !p. prime p ==> p <= n)

のように即答です.

なお,参照定理を列挙すると

# [FACT_LE; LE_1; ONE; ADD1; SUC_INJ; PRIME_FACTOR; DIVIDES_FACT_PRIME; COPRIME_PLUS1; coprime; prime];;
val it : thm list =
  [|- !n. 1 <= FACT n;
   |- (!n. ~(n = 0) ==> 0 < n) /\
      (!n. ~(n = 0) ==> 1 <= n) /\
      (!n. 0 < n ==> ~(n = 0)) /\
      (!n. 0 < n ==> 1 <= n) /\
      (!n. 1 <= n ==> 0 < n) /\
      (!n. 1 <= n ==> ~(n = 0));
   |- 1 = SUC 0; |- !m. SUC m = m + 1; |- !m n. SUC m = SUC n <=> m = n;
   |- !n. ~(n = 1) ==> (?p. prime p /\ p divides n);
   |- !p. prime p ==> (!n. p divides FACT n <=> p <= n);
   |- !n. coprime (n + 1,n);
   |- coprime (a,b) <=> (!d. d divides a /\ d divides b ==> d = 1);
   |- !p. prime p <=> ~(p = 1) /\ (!x. x divides p ==> x = 1 \/ x = p)]

なので,これらに prover 自身が FACT n + 1 を適用しているわけで...