Я пытаюсь научиться использовать Изабель / Изара с HOL, и я решил, что хороший способ сделать это - разработать некоторую элементарную теорию чисел.Я определил свои собственные операции «плюс» и «время», чтобы методы доказательства не делали всю работу за меня, так как уже много доказано о +, * в Main.Мои версии определены как:
fun p:: "nat ⇒ nat ⇒ nat" (infix "⊕" 80) where
p_0: "0 ⊕ n =n" |
p_rec: " (Suc m) ⊕ n = Suc (m ⊕ n)"
fun t:: "nat ⇒ nat ⇒ nat" (infix "⊗" 90) where
t_0: "0 ⊗ n= 0" |
t_rec: "Suc m ⊗ n = n + m ⊗ n"
, и я уже показал, что умножение и сложение являются коммутативными, что справедливо в законе распределения.Затем я попытался показать следующее:
lemma euclidean_division_existence: "∃q r. n=q⊗m⊕r"
proof (induction n)
case 0
have "0= 0 ⊗ m" by auto
hence "∃q. 0 =q ⊗ m" by auto
, но он говорит мне, что не может закончить доказательство последнего шага.Я пробовал разные вещи, но я не могу понять, как сказать Изабель, что я просто дал ей свидетельство о существовании, которое я пытаюсь доказать.Как я могу заставить Изабель распознать это?
Редактировать:
xanonec помог мне пройти этот шаг, но я сразу же застрял на следующем шаге, казалось бы, похожая проблема.В конечном итоге я хочу показать:
"∃ q r. 0 = q ⊗ m⊕r"
, но не могу понять, как одновременно ввести две экзистенциально количественные переменные из
"0 = 0 ⊗ m ⊕ 0"