在Isabelle中修复一个特征与2不同的字段

在Isabelle中修复一个特征与2不同的字段,isabelle,Isabelle,我对椭圆曲线做了一个计算,把实数作为基场 现在我想用一个特性不同于2的任意场来改变实数,这样就可以从方程2x=0推导出x=0 像伊莎贝尔这样的证据助理怎么会有这样一个短语呢?本质上,你可以使用 class ell_field = field + assumes zero_ne_two: "2 ≠ 0" 例如,请参见 我假设您希望使用对象逻辑的主库中的类字段。不幸的是,我不知道上述库中对环特征的一般处理(希望,如果它确实存在,有人会为我们指出)。因此,我设计了自己的定义框架来给出这个答案:

我对椭圆曲线做了一个计算,把实数作为基场

现在我想用一个特性不同于2的任意场来改变实数,这样就可以从方程2x=0推导出x=0


像伊莎贝尔这样的证据助理怎么会有这样一个短语呢?

本质上,你可以使用

class ell_field = field +
  assumes zero_ne_two: "2 ≠ 0"
例如,请参见


我假设您希望使用对象逻辑的主库中的类
字段
。不幸的是,我不知道上述库中对环特征的一般处理(希望,如果它确实存在,有人会为我们指出)。因此,我设计了自己的定义框架来给出这个答案:

context semiring_1
begin

definition characteristic :: "'a itself ⇒ nat" where
  "characteristic a = 
    (if (∃n. n ≥ 1 ∧ of_nat n = 0) 
    then (LEAST n. n ≥ 1 ∧ of_nat n = 0) 
    else 0)"

end

class ell_field = field +
  assumes zero_ne_two: "2 ≠ 0"
begin

lemma x2: "2 * x = 0 ⟹ x = 0"
  by (simp add: zero_ne_two)

lemma "characteristic TYPE('a) ≠ 2"
proof(rule ccontr, simp)
  assume c2: "characteristic TYPE('a) = 2"
  define P where "P = (λn. (n ≥ 1 ∧ of_nat n = 0))" 
  from c2 have ex: "∃n. P n" 
    unfolding P_def characteristic_def by presburger
  with c2 have least_2: "(LEAST n. P n) = 2"
    unfolding characteristic_def P_def by auto
  from LeastI2_ex[OF ex, of P] have "P (LEAST n. P n)" by simp
  then have "2 = 0" unfolding least_2 unfolding P_def by simp
  with zero_ne_two show False by simp
qed

end

确实没有理由定义这个
multiple
常量。您只需使用\u nat的
。该定义还推广到
半环1
。除此之外,您还可以使用
Gcd
这样更简洁地表达特征:
定义特征::“'a本身⇒ nat“where”特征u=Gcd{n.n>0∧ 如果我没有漏掉任何东西,那么这应该是等价的,而且你可以免费得到边案例0,因为
Gcd{}=0
。然而,如果您只需要讨论非特征-2字段,那么只使用
2当然更容易≠ 正如Stefan Berghofer所做的那样。@ManuelEberl感谢您的评论。我更新了答案的第二部分。我正在为
类.monoid\u add
寻找与
等价的(在
类.monoid\u mult
中解释),但我找不到它。我没有想到,直到半环的引入,它才被定义。在我看来,从软件工程的角度来看,这是一个奇怪的不对称库设计决策。不知何故,能够为
monoid
定义一次幂,然后将其解释为
monoid\u add
的多个幂,以及
monoid\u mult
@ManuelEberl的幂,当然,最好使用
Gcd
而不是
if/LEAST
,但是答案第二部分中的Isabelle码被认为是非正式推理的替代品(它并不意味着要添加到任何给定的Isabelle理论中),我不希望改变证明。
HOL代数中的幺半群上有幂运算,更倾向于抽象代数。
monoid\u add
/
monoid\u mult
类更加实用,并且面向您最终想要得到的具体实例(nat、int、rat、real、complex等)。我不确定在类型类中引入更通用的power操作会有多少具体的好处。