Coq и Agda оба основаны на очень грубо одной и той же теории зависимых типов, поэтому в теории можно было бы взять проверочный термин, сгенерированный сценарием Coq, и преобразовать его в программу Agda. Тем не менее, есть много небольших (и не очень маленьких) различий, например, непредсказуемый Пропорция Кока, совокупность, различия в проверках завершения и т. Д., Которые сделают такой перевод трудным или невозможным.
Однако, что вы ' Запрашиваемый здесь не действительно автоматический переводчик c, а скорее набор правил для перевода Coq в Agda вручную. Поскольку многие базовые функции c могут быть сопоставлены один к одному, этот процесс намного проще. Однако любое использование тактики в коде Coq вам придется либо преобразовать в явный проверочный термин в Agda, либо написать свои собственные макросы отражения Agda (поскольку для Agda еще нет полной библиотеки tacti c).
Чтобы ответить на конкретную проблему c, с которой вы здесь столкнулись: Agda не пыталась определить тип возвращаемого значения функции tUpdate
, потому что вы уже указали, что она Set
самостоятельно. Если вы хотите, чтобы Agda сделала для вас вывод, вы можете просто заменить тип возвращаемого значения подчеркиванием _
(что в данном случае работает нормально):
tUpdate : {A : Set} (m : totalMap A) (x : String) (v : A) → _
tUpdate m x v = λ x' → (if (x == x') then v else m x')