当我编写大量的agda代码时,我总是在代码中使用这种繁琐的模式。假设我有record
类型定义数学结构:
record A (T : Set) : Set where
m1 = -- ...
m2 = -- ...
m3 = -- ...
field
f1 : -- ...
f2 : -- ...
f3 : -- ...
然后我证明了这个结构的属性A
:
theorem : ∀ {S} -> A S -> -- ...
theorem a = -- ...
where
m1 = A.m1 a
m2 = A.m2 a
f1 = A.f1 a
f2 = A.f2 a
-- ...
这很烦人。我可以open A
然后我只有m1
,m2
将a
映射到我想要的对象。我想要open a
之类的内容,以便m1
直接引用(A.m1 a)
。我在Agda文档中找不到任何关于此事的内容。有没有这样的语法糖?这个问题是绝大多数(可能是我的代码的60%)的原因。在每一个定理中,我都打开了整个结构......我做错了什么?我该如何解决这个问题?