Здесь есть ряд вопросов.
Прежде всего, утверждение, которое вы пытаетесь показать, просто не годится для всех x
. Если x = 0
и y
непостоянны, например y = [:0,1:]
, у вас есть
degree (y * [: x :]) = degree 0 = 0 ≠ 1 = degree y
Очевидный способ исправить это - предположить x ≠ 0
.
Однако и этого недостаточно, поскольку вы только предположили, что 'a
является коммутативным кольцом. Однако в коммутативном кольце, как правило, делители нуля могут быть. Рассмотрим коммутативное кольцо ℤ/4ℤ
. Пусть x = 2
и y = [:0,2:]
. Потом y * [:x:] = [:0,4:]
, но 4 = 0
в ℤ/4ℤ
. Следовательно y * [:x:] = 0
, и, следовательно, снова,
degree (y * [: x :]) = degree 0 = 0 ≠ 1 = degree y
Итак, что вам действительно нужно, это одно из следующих двух:
- предположение
x ≠ 0
и 'a :: idom вместо' a :: comm_ring. idom означает «область целостности», и это просто коммутативное кольцо с единицей и без делителей нуля.
- в более общем плане предположение, что
x
не является делителем нуля
- даже в более общем плане, предположение, что
x * y ≠ 0
или, что то же самое, x
умноженное на ведущий коэффициент y не равно 0
Кроме того, использование ⋀ в доказательствах Isar временами проблематично. «Правильный» способ Isar сделать это:
fix x :: "'a::idom" and y :: "'a poly"
assume "x ≠ 0"
hence "degree (y * [:x:]) = degree y" by simp
Соответствующие леммы degree_mult_eq
и degree_smult_eq
, вы увидите, что они требуют, чтобы тип коэффициента был идомом. Это работает для первого случая, который я описал выше, для двух других, я думаю, потребуются дополнительные рассуждения вручную.
РЕДАКТИРОВАТЬ: небольшая подсказка: вы можете найти подобные теоремы, набрав
find_theorems "degree (_ * _)"
Если вы попытаетесь применить degree_mult_eq
, который он показывает к вашей ситуации (с comm_ring), вы обнаружите, что это не удается, даже если условия кажутся совпадающими. Если это так, обычно это проблема типа, поэтому вы можете написать что-нибудь вроде
from [[show_sorts]] degree_mult_eq
чтобы увидеть, какие типы и сортировки требуются леммой, и там написано idom
.
person
Manuel Eberl
schedule
21.11.2013