更新Coq中的单个记录字段

时间:2019-06-09 12:58:58

标签: record coq

我的记录类型包含很多字段:

Record r : Set :=
  R {
    field1 : nat;
    field2 : nat;
    field3 : nat;
...
    field2137 : nat;
  }

我想拥有一个只更新该记录中一个字段的函数。在Haskell中,我会这样做

update2019 record x = record {field2019 = x}

如何在Coq中执行此类操作?

1 个答案:

答案 0 :(得分:4)

不幸的是,Coq缺少对记录更新的支持。幸运的是,@ tchajed提供了coq-record-update库,大大简化了此过程。这是一个示例:

From RecordUpdate Require Import RecordSet.
Import RecordSetNotations.

Record r : Set :=
  R {
    f1 : nat;
    f2 : nat;
    f3 : nat;
  }.
Instance eta_r : Settable _ := settable! R <f1; f2; f3>.

Definition update3 record x : r := record <| f3 := x |>.

有关更多详细信息,请参见库的README.md文件。