Я получил следующий код со страницы Википедии Изабель:
theorem sqrt2_not_rational:
"sqrt (real 2) ∉ ℚ"
proof
assume "sqrt (real 2) ∈ ℚ"
then obtain m n :: nat where
n_nonzero: "n ≠ 0" and sqrt_rat: "¦sqrt (real 2)¦ = real m / real n"
and lowest_terms: "gcd m n = 1" ..
from n_nonzero and sqrt_rat have "real m = ¦sqrt (real 2)¦ * real n" by simp
then have "real (m²) = (sqrt (real 2))² * real (n²)" by (auto simp add: power2_eq_square)
also have "(sqrt (real 2))² = real 2" by simp
also have "... * real (m²) = real (2 * n²)" by simp
finally have eq: "m² = 2 * n²" ..
hence "2 dvd m²" ..
with two_is_prime have dvd_m: "2 dvd m" by (rule prime_dvd_power_two)
then obtain k where "m = 2 * k" ..
with eq have "2 * n² = 2² * k²" by (auto simp add: power2_eq_square mult_ac)
hence "n² = 2 * k²" by simp
hence "2 dvd n²" ..
with two_is_prime have "2 dvd n" by (rule prime_dvd_power_two)
with dvd_m have "2 dvd gcd m n" by (rule gcd_greatest)
with lowest_terms have "2 dvd 1" by simp
thus False by arith
qed
Однако, когда я копирую этот текст в экземпляр Isabelle, слева от каждой строки появляется несколько символов «не вводить». Один говорит: «Незаконное применение команды« теорема »на верхнем уровне», поэтому я предположил, что вы не можете просто определить теорему на верхнем уровне, а страница википедии не предоставляла полный исходный пример. Я превратил теорему в теорию следующим образом:
theory Scratch
imports Main
begin
(* Theorem *)
end
Изабель перестала жаловаться на теорему, но теперь во второй строке теоремы говорится:
Inner lexical error at: ℚ
Failed to parse proposition
Он также жалуется на строку доказательства:
Illegal application of command "proof" in theory mode
Также есть ошибка для остальных строк теоремы. Как правильно обернуть эту теорему из Википедии, чтобы ее можно было проверить в Изабель?