Работая в Agda в течение последних нескольких месяцев, я просто столкнулся с блоком abstract
в Агда, который предотвращает дальнейшую нормализацию термина за пределами области действия блока.Стандартная библиотека Agda - почему больше свойств не отмечено абстрактными?
Использование его для скрытия выработок моих лемм имеет значительно сократило время, необходимое для проверки типов моих программ. Просматривая стандартную библиотеку Agda, однако, abstract
едва используется. Мне кажется, что почти все в любом файле Properties
(например, Data.Nat.Properties
) может находиться в блоке abstract
, так как я не могу думать об использовании для рассуждений, например о том, как добавление оказывается коммутативным.
Является ли это абстрактным элементом новой функции, которая не попала в стандартную библиотеку? Или есть какая-то тонкость или недостаток маркировки доказательств abstract
, что мне не хватает?
Спасибо, это имеет смысл! Но если есть (возможно) план отказаться от «абстрактного», есть ли альтернативная функция, предлагаемая для повышения производительности? Я понимаю, что абстракция через записи - это всегда хорошая идея, но в моем случае записи должны были бы быть огромными и могли бы отлично справиться с моим кодом, поскольку логически они будут вводиться только по соображениям производительности. – user2667523
@ user2667523, я не знаю. В настоящее время вы можете использовать ['erase'] (https://github.com/agda/agda-stdlib/blob/f6212e49760a9fc2392b3d0889c8c7fc5e77634b/src/Relation/Binary/PropositionalEquality/TrustMe.agda#L25), если вы не хотите для вычисления дорогостоящих доказательств (и это не противоречит каноничности). – user3237465
Может ли ['proof-reflevance'] (https://agda.github.io/agda-stdlib/Relation.Binary.PropositionalEquality.html#1420) использоваться в' zero'', чтобы обойти проблему с '+0 n' является абстрактным? – Cactus