是否可以声明记录中的字段不相关但仍然在某处使用它们?
假设我有
postulate f : ℕ → ℕ
record Silly x : Set where
field
n : ℕ
s : f n ≡ x
open Silly
然后,我可以
same-silly : ∀{x} {p q : Silly x} → f (n p) ≡ f(n q)
same-silly {x} {p} {q} = ≡-trans (s p) (≡-sym (s q))
但如果我使用虚线字段,
record Silly x : Set where
field
n : ℕ
.s : f n ≡ x -- note the dot
然后same-silly
再也无法证明了 - 至少不是我。
当我尝试使用s
时,如上面的定义,Agda通知我Identifier s is declared irrelevant, so it cannot be used here
。
据我所知,我通过点击它来声明s
无关紧要,但我仍然希望能够对它进行一些访问:足以定义same-silly
。有没有办法让这一点但不完全访问?我的意思是我在考虑s
作为一种相干条件,我想在蓝月亮中使用一次,但不是很重要,所以点。也许忽略这一段。
是否可以形成same-silly
并点缀s
?
(
除此之外:虚线图案意味着命题平等与关系
一致_~_ : ∀{x} (p q : Silly x) → Set
p ~ q = n p ≡ n q
?特别是,通过添加到记录constructor _#_
,我可以显示
eq : ∀{m x}{p q : f m ≡ x} → (m # p) ≡ (m # q)
eq = ≡-refl
但我还不确定点域是否意味着定义相等会忽略虚线字段。
我正在浏览http://wiki.portal.chalmers.se/agda/agda.php?n=ForkedReferenceManual.Records#Irrelevantfields;这表示有虚线字段的投影,但似乎我不能在任何地方使用它们。
)
感谢任何帮助!
答案 0 :(得分:1)
您可以使用不相关的投影,但仅限于您在不相关的上下文中工作时。进入不相关背景的一种方法是使证明本身无关紧要:
.same-silly : ∀{x} {p q : Silly x} → f (n p) ≡ f(n q)
same-silly {x} {p} {q} = ≡-trans (s p) (≡-sym (s q))
这意味着您只能在不相关的环境中使用相同的愚蠢证据。
关于你的第二个问题,答案是肯定的:你可以证明以下内容:
silly-equality : ∀ {n} {x y : Silly n} → x ~ y → x ≡ y
silly-equality refl = refl
因此,第一个投影的平等(你的〜关系)确实对应于命题平等。