在Agda 2.6.0.1中,我想在记录中使用不相关的证明词,然后证明其中两个记录仅基于其数据项是相等的。
data Bools : Set where
T : Bools
F : Bools
record Thing : Set where
field
val : Bools
.pr : val == T
.eq : (a b : Thing) -> a == b
eq record { val = a ; pr = pr1 } record { val = b ; pr = pr2 } = ?
我觉得我应该能够通过呼吁每个Thing
知道其val
等于T
的事实来证明这一点。 (如果pr1
和pr2
都相关,我可以对它们进行匹配以显示a = T = b
;但是然后我需要Streicher的K来给我{{1}的相等性}字词。)
由于Thing.pr
是无关紧要的,因此,在我希望使用它之前,我当然需要处于不相关的上下文中。我以为可以通过在声明中将Thing.pr
放在.
的前面来实现这一点。但是当我尝试在孔中使用eq
时,仍然收到通常的“变量pr1
被声明为不相关,因此无法在此处使用”消息。
我可以在这里做什么吗?是否可以使pr1
完全无关紧要,以至于可以在其定义中使用eq
和pr1
? Using irrelevant fields的答案表明我可以,但是对于我一生来说,我不明白为什么阿格达不接受我所拥有的。
答案 0 :(得分:0)
您可以简单地在b
和a = T
上进行模式匹配。阿格达将意识到,唯一
可能的情况是b = T
和refl
,然后您就可以解雇
目标eq
。
顺便说一句, if (SummaryTable.Rows[index].Field<float>("CashFlow") != SummaryRows[index].CashFlow){SummaryTable.Rows[index].SetField("CashFlow", SummaryRows[index].CashFlow);}
不需要声明为不相关。