Я играл с основными примерами доказательств в Изабель.
Рассмотрим следующее простое доказательство:
lemma
fixes n::nat
shows "n*(n+1) = n^2 + n"
by simp
Мне кажется, что такой мощный помощник по доказательствам, как Изабель, должен бытьв состоянии доказать эту лемму без особых указаний.Тем не менее, я был удивлен, обнаружив, что Изабель на самом деле не может применить правило simp здесь (я также пробовал другие "общие" правила, такие как simp_all , auto , force , blast но результат тот же).
Если я заменю последнюю строку на следующую, то получится:
by (simp add: power2_eq_square)
Меня беспокоит то, что мне не нужно было рассказывать системе о конкретном правиле power2_eq_square , чтобы завершить это доказательство.
Играя с похожими тривиальными примерами, яобнаружил, что simp может доказать
n*(n+2)=n*n+n*2
, но не с
n*(n+3)=n*n+n*3
Последний пример доказан
by (simp add: distrib_left)
Этодля меня полная загадка, почему мне нужно указать distrib_left во втором примере, а не в первом (почему?).
Я привел эти примеры не ради себя, но в основном, чтобы проиллюстрировать мой главный вопрос:
Есть ли способ автоматизации Vочищение рутинных алгебраических тождеств, таких как приведенные выше в Изабель?Если нет, то почему бы и нет?Какие технические препятствия?