用不相关的术语证明不相关的事物

时间:2019-12-29 21:46:25

标签: agda

在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的事实来证明这一点。 (如果pr1pr2都相关,我可以对它们进行匹配以显示a = T = b;但是然后我需要Streicher的K来给我{{1}的相等性}字词。)

由于Thing.pr是无关紧要的,因此,在我希望使用它之前,我当然需要处于不相关的上下文中。我以为可以通过在声明中将Thing.pr放在.的前面来实现这一点。但是当我尝试在孔中使用eq时,仍然收到通常的“变量pr1被声明为不相关,因此无法在此处使用”消息。

我可以在这里做什么吗?是否可以使pr1完全无关紧要,以至于可以在其定义中使用eqpr1Using irrelevant fields的答案表明我可以,但是对于我一生来说,我不明白为什么阿格达不接受我所拥有的。

1 个答案:

答案 0 :(得分:0)

您可以简单地在ba = T上进行模式匹配。阿格达将意识到,唯一 可能的情况是b = Trefl,然后您就可以解雇 目标eq

顺便说一句, if (SummaryTable.Rows[index].Field<float>("CashFlow") != SummaryRows[index].CashFlow){SummaryTable.Rows[index].SetField("CashFlow", SummaryRows[index].CashFlow);} 不需要声明为不相关。

相关问题