Проблема в том, что структура вашей леммы tancl_less_t_code
действительно не подходит в качестве кодовых уравнений.Обратите внимание, что самой внешней константой в левой части уравнений является предикат транзитивного замыкания tranclp
.Таким образом, это говорит генератору кода использовать лемму для реализации tranclp
.Однако, используя вашу лемму, известно только, как реализовать tranclp
для одного конкретного предиката, а именно less_t
.Поэтому вы получаете жалобу от Изабель, что ваша реализация слишком конкретна.
Есть как минимум два обходных пути.
Во-первых, вместо объявления [code]
вы можете использовать [code unfold]
.Тогда каждое вхождение tranclp less_t x y
будет заменено на less_t_fun
во время генерации кода.Чтобы сделать это правило еще более применимым, я бы затем переформулировал лемму на tranclp less = less_t_fun
, так что даже если tranclp less_t
не применен полностью, разворачивание может произойти.
Во-вторых, вы можете взять симметричную версиювашей леммы и объявить ее как [simp]
.Тогда в вашей реализации вы просто вызываете less_t_fun
вместо tranclp less_t
, и в доказательствах упрощатель переключится на последний.
Для получения дополнительной информации о [code]
и [code_unfold]
смотритедокументация генератора кода.