我正试图从它的文档中学习Isabelle表示法和语法。特别是,我试图使用等价符号来陈述一个引理(Isabelle 2020的main.pdf中的equiv
(。
equiv :: 'a set ⇒ ('a × 'a) set ⇒ bool
引理不一定有用,但我希望语法正确。我试着用以下内容来填补空白,希望说明平等是一种等价关系:
lemma "equiv nat (=)"
尝试未成功,并生成以下错误:
Type unification failed: Clash of types "_ ⇒ _" and "_ set"
Type error in application: incompatible operand type
Operator: equiv :: ??'a set ⇒ (??'a × ??'a) set ⇒ bool
Operand: nat :: int ⇒ nat
我的问题是:
如何正确地陈述关于等式的等价性
更一般地说,如何找到正确的方法来使用基本的表示法或语法,如Main中的那些
(我只对这里的符号感兴趣,不一定能证明什么(
尝试符号时的第一件关键事情是查看类型或类型错误消息:
Operator: equiv :: ??'a set ⇒ (??'a × ??'a) set ⇒ bool
Operand: nat :: int ⇒ nat
显示nat
的类型为int ⇒ nat
,而equiv
期望第一个参数的类型为?'a set
。所以你需要一组自然数,而不是将整数转换为自然数的函数。
如何解决这个问题?要么你已经知道UNIV
是为了这个目的而存在的,要么你根据名字的直觉在Find facts上搜索。
一旦你改变了这一点,你就会看到一个类似的平等类型问题,你可以很容易地解决。