У меня есть тип записи с большим количеством полей:
Record r : Set :=
R {
field1 : nat;
field2 : nat;
field3 : nat;
...
field2137 : nat;
}
Я хотел бы иметь функцию, которая будет обновлять только одно поле в этой записи. В Haskell я бы сделал так
update2019 record x = record {field2019 = x}
Как я могу выполнить такое действие в Coq?





К сожалению, в Coq отсутствует поддержка обновления записи. К счастью для нас, есть библиотека coq-запись-обновление от @tchajed, которая значительно упрощает эту задачу. Вот пример:
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 библиотеки.