构建者是否在Agda中脱节?(或如何反驳inj 1 x≡inj₂y)

cur*_*leo 4 constructor theorem-proving disjoint-union agda

我需要一个更多的引理来证明这inj? x ? inj? y是荒谬的,作为关于?Agda中不相交联合类型()的更大定理的一部分.

这个结果将直接来自两个构造函数?,即inj?inj?不相交.那是阿格达的情况吗?我该如何证明?

这是完整的引理:

open import Relation.Nullary
open import Relation.Binary.PropositionalEquality
open import Data.Sum


lemma : ? {a b} {A : Set a} {B : Set b} {x : A} {y : B} ? ¬ inj? x ? inj? y
lemma eq = ?
Run Code Online (Sandbox Code Playgroud)

pha*_*dej 6

数据类型构造函数是不相交的.我会说这是阿格达类型系统元理论中的一个定理.

您可以尝试使用eq证明(C-c C-c),并且Agda会发现矛盾:

lemma : ? {a b} {A : Set a} {B : Set b} {x : A} {y : B} ? ¬ inj? x ? inj? y
lemma ()
Run Code Online (Sandbox Code Playgroud)

这种快乐的类型检查.

  • 您也可以使用大型消除来证明错误,没有原始的荒谬模式.基本的是你可以编写一个函数,将你的`inj 1`改为`⊤`和`inj₂`改为`⊥`.然后,您可以使用带有该函数的`subst`将类似`⊤`的普通可获取值"转换"为`⊥`. (3认同)