【问题标题】:Proving a type classed theorem in Isabelle在 Isabelle 中证明类型分类定理
【发布时间】:2020-07-14 08:48:00
【问题描述】:

我要使用类型类来证明微不足道:

class order =
  fixes lesseq :: " 'a ⇒ 'a ⇒ bool" (infix "≼" 50)
  assumes refl:    "x ≼ x"
      and trans:   "x ≼ y ⟹ y ≼ z ⟹ x ≼ z"
      and antisym: "x ≼ y ⟹ y ≼ x ⟹ x = y"
begin

  theorem "(myle:: ('b::order) ⇒ 'b ⇒ bool) x x"
  proof -
    show ?thesis by (rule refl)
  qed

end

在这里,Isabelle/jEdit 用粉红色突出显示 by (rule refl) 并说

Failed to apply initial proof method⌂:
goal (1 subgoal):
 1. myle x x

这里有什么问题?否则证明似乎通过了。

【问题讨论】:

    标签: isabelle proof jedit


    【解决方案1】:

    myle 不是同一个函数。

    类型注释(myle:: ('b::order) ⇒ 'b ⇒ bool) 只是声明myle 是一个函数,它接受两个'b 类型的元素并返回一个布尔值,而'b 是属于order 类型类的类型。

    如果您想证明有关 的某些信息,只需使用相同的符号或名称 lesseq

    【讨论】:

    • 但是为什么类型类不强制执行 refl、trans 和 antisym 规则呢?
    • typeclass 确实强制执行该假设,但仅适用于 函数,不适用于具有相同类型的其他一些函数。
    • 如果您考虑一个函数sort :: ('b::order) list ⇒ 'b list 可能会有所帮助。它说排序函数适用于可比较的元素,而不是 sort 本身就是比较运算符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    相关资源
    最近更新 更多