伊莎贝尔:多项式的次数乘以常数

时间:2013-11-21 18:25:57

标签: polynomial-math isabelle

我正在使用图书馆HOL/Library/Polynomial.thy

一个简单的财产不起作用。例如,2x *2的程度等于2x -

的程度

如何证明引理(即删除“抱歉”):

lemma mylemma:
    fixes y ::  "('a::comm_ring_1 poly)" and x ::  "('a::comm_ring_1)"
    shows "1 = 1" (* dummy *)
 proof- 
 have "⋀ x. degree [: x :] = 0" by simp

 from this have "⋀ x y. degree (y * [: x :] ) = degree y" sorry

 (* different notation: *)
 from this have "⋀ x y. degree (y * (CONST pCons x 0)) = degree y" sorry

根据Manuel的回答,我一直在寻找解决方案:

 have 1: "⋀ x. degree [: x :] = 0" by simp
 {
   fix y :: "('a::comm_ring_1 poly)" and x :: "('a::comm_ring_1)"
   from 1 have "degree (y * [: x :]) ≤ degree y"
   by (metis Nat.add_0_right degree_mult_le)
 } 

1 个答案:

答案 0 :(得分:2)

这里有很多问题。

首先,您尝试展示的声明并不适用于所有x。如果x = 0y是非常数,例如y = [:0,1:],你有

degree (y * [: x :]) = degree 0 = 0 ≠ 1 = degree y

解决这个问题的明显方法是假设x ≠ 0

然而,这也不够,因为你只假设'a是一个可交换的环。但是,在一个可交换的环中,一般来说,你可以有零除数。考虑交换环ℤ/4ℤ。设x = 2y = [:0,2:]。 然后是y * [:x:] = [:0,4:]4 = 0 ℤ/4ℤ。因此y * [:x:] = 0,因此,再次

degree (y * [: x :]) = degree 0 = 0 ≠ 1 = degree y

所以,你真正需要的是以下两种之一:

  1. 假设x ≠ 0和'a :: idom而不是'a :: comm_ring。 idom代表“积分域”,它只是一个带有1且没有零除数的可交换环
  2. 更一般地说,假设x不是零除数
  3. 更一般地说,假设x * y ≠ 0或等同于x乘以y的领先系数不是0
  4. 另外,在Isar样张中使用is有时会有些问题。 Isar的“正确”方式是:

    fix x :: "'a::idom" and y :: "'a poly"
    assume "x ≠ 0"
    hence "degree (y * [:x:]) = degree y" by simp
    

    相关的引理是degree_mult_eqdegree_smult_eq,您会看到它们需要系数类型为idom。这适用于我上面描述的第一种情况,另外两种情况需要更多的手动推理,我认为。

    编辑:只是一个小提示:你可以通过输入

    找到这样的定理
    find_theorems "degree (_ * _)"
    

    如果您尝试将其显示的degree_mult_eq应用于您的情况(使用comm_ring),您会发现它失败了,即使条款似乎匹配。如果是这种情况,通常是类型问题,因此您可以编写类似

    的内容
    from [[show_sorts]] degree_mult_eq
    

    查看引理所需的类型和排序,并说idom