我的记录类型包含很多字段:
Record r : Set :=
R {
field1 : nat;
field2 : nat;
field3 : nat;
...
field2137 : nat;
}
我想拥有一个只更新该记录中一个字段的函数。在Haskell中,我会这样做
update2019 record x = record {field2019 = x}
如何在Coq中执行此类操作?
答案 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文件。