Agda:从定义中单独声明

时间:2018-06-15 21:35:05

标签: agda

我在Agda中证明了一些东西,我的一些文件开始变得有点长而且混乱(甚至在我重构为较小的模块之后)。是否有可能有两个文件,其中一个只包含定理的类型签名,另一个包含那些定理和证明?我查看了abstract关键字,但这似乎并没有做正确的事情。

当然,我可以将所有类型的签名放在文件的顶部,并将所有的证据放在文件的底部;但如果我能把文件中的陈述告诉自己,那似乎更清晰。

1 个答案:

答案 0 :(得分:2)

您可以为您的引理类型指定名称。例如。在档案Statement.agda中:

module Statement where

open import Agda.Builtin.Nat
open import Agda.Builtin.Equality

+-sym : Set
+-sym = ∀ m n → m + n ≡ n + m

在文件Proof.agda中:

module Proof where

open import Agda.Builtin.Nat
open import Agda.Builtin.Equality
import Statement

+-sym : Statement.+-sym
+-sym m n = {!!}

如果您的定义是级别多态的,则遗憾的是,Agda没有∀ {ℓ : Level} → ...形式的类型的(表面)名称。在Statement中使用Proof中的语句时,您必须将这些级别作为Statement.agda中的参数并对其进行全面量化。这会给你这样的东西:

open import Agda.Primitive data ⊥ : Set where ⊥-elim : (ℓ : Level) → Set (lsuc ℓ) ⊥-elim ℓ = ∀ {A : Set ℓ} → ⊥ → A

Proof.agda

⊥-elim : ∀ {ℓ} → Statement.⊥-elim ℓ ⊥-elim = {!!}

FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml"));
loader.setController(new MainController(path));
Pane mainPane = loader.load();