如何很好地制作Agda漂亮的印刷产品

时间:2015-05-26 19:43:22

标签: agda

考虑以下自包含程序:

 module Test where

  record Σ {A : Set} (B : A -> Set) : Set where
    constructor _,_
    field
      fst : A
      snd : B fst
  open Σ public

  infixr 0 _,_

  _×_ : Set -> Set -> Set
  A × B = Σ (\ (_ : A) -> B)

  infixr 10 _×_

  f : {A B : Set} → A × B → A
  f x = {!!}

如果目标中有C-c C-1,你会得到:

Goal: .A
————————————————————————————————————————————————————————————
x  : Σ (λ _ → .B)
.B : Set
.A : Set

即。你会看到底层的sigma,并且隐藏了lambda的binder的类型。这很烦人。有没有办法让Agda显示默认情况下不会绑定名称的绑定器类型?

这是Agda 2.3.2.2。

2 个答案:

答案 0 :(得分:2)

Agda 2.4.3显示x : .A × .B

您可以使用abstract关键字:

abstract
  _×_ : Set -> Set -> Set
  A × B = Σ (\ (_ : A) -> B)

  fst' : ∀ {A B} -> A × B -> A
  fst' (x , y) = x

  snd' : ∀ {A B} -> A × B -> B
  snd' (x , y) = y

但这绝对有点过分(看起来模式同义词在抽象块中不起作用)。

对我来说更烦人的是,Agda不想减少像flip这样的功能,特别是_∘_,而是用一些很长的定义展开一些函数。 Agda需要一种机制来解决这些问题。

答案 1 :(得分:1)

似乎此问题已在最新版本的Agda中修复,因此您应该升级。