Я хочу найти аннотацию ACSL, которую можно применить к функции или указателю функции, чтобы указать, что она обладает свойством ссылочной прозрачности. Какой-то способ сказать, что «эта функция всегда будет возвращать одно и то же значение при задании одних и тех же аргументов». Пока я не нашел такого способа. Может ли кто-нибудь указать мне способ выразить это?
Может быть, как-то сослаться на произвольную логическую функцию? Если бы я мог назвать неизвестную logic boolean uknown_function(void* a, void* b) = /* this is unkown */;
, то я мог бы задокументировать функцию как имеющую постусловие, что \result
равно этой произвольной/неизвестной логической функции?
Более широкий контекст пытается выполнять сравнения с стертым типом. Я хочу в целом выразить концепцию «пользователь дал мне void*
для работы и bool (*)(void const*, void const*)
для их сравнения, и пользователь гарантирует мне, что предоставленная функция действительно является строгим частичным порядком того, на что указывают эти указатели. " Если бы у меня это было, то я мог бы начать описывать свойства этих стертых типов объектов, которые сортируются, например.