agda - 证明Agda中的爆炸原理

标签 agda theorem-proving type-theory

由于 Agda 是直觉的,因此必须假设排中律。但据我所知,直觉逻辑接受ex falso quodlibet 或爆炸原理(一切都源于荒谬的定理)。如何证明这一假设:

  data ⊥ : Set where

  postulate exp : ∀ {n} {x : Set n} → ⊥ → x

最佳答案

可以证明爆炸的原理如下

  data ⊥ : Set where

  exp : ∀ {n} {x : Set n} → ⊥ → x
  exp ()

如果不知道如何证明这一点,可以从一个洞开始:

  data ⊥ : Set where

  exp : ∀ {n} {x : Set n} → ⊥ → x
  exp absurd = {! !}

然后,在 emacs agda2-mode 中,可以按 C-c C-l 进行类型检查,这样孔就会被替换,emacs 就会显示目标。在这种情况下,目标是 .x 类型。然后可以单击该孔并按 C-c C-c 并键入 absurd 以将此函数拆分为变量 absurd。 Emacs 将产生上面给出的最终结果。

关于agda - 证明Agda中的爆炸原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48030607/

相关文章:

agda - 在 Agda 中将构造函数编写为函数的更好方法

list - 查找串联的参数只是使用提升或注入(inject)的索引查找整个串联

haskell - 支持(多个)子类型化/子类化的定理证明者/证明助手

scala - 类型论中所有 Kind 实例的共同父类(super class)型是什么

haskell - 在存在类型运算符的情况下实现嵌套/递归数据类型

logic - 使用等式关系证明定理 : ∀[ x ] ∀[ y ] (¬ Eq x y → ¬ Eq (f x) (f y))

agda - 有根有据的电感式如何选择设计?

coq - 对函数值进行嵌套归纳的定点证明

type-systems - 如何学习 Agda

swift - "existential type"在 Swift 中是什么意思?