"Свободные теоремы" в смысле бумаги Вадлера "Теоремы бесплатно!" являются уравнениями о некоторых значениях, основанных только на их типе. Так, например,
f : {A : Set} → List A → List A
автоматически удовлетворяет
f . map g = map g . f
Могу ли я взять на себя термин Agda, следующий тип:
(f : {A : Set} → List A → List A) {B C : Set} (g : B → C) (xs : List B)
→ f (map g xs) ≡ map g (f xs)
или если так/если нет, могу ли я сделать что-то более/менее общее?
Я знаю о существовании Lightweight Free Theorems library, но я не думаю, что он делает то, что я хочу (или если он делает, я не понимаю его достаточно хорошо, чтобы это сделать).
(Пример использования - тот, что у меня есть функтор F : Set → Set
, и хотел бы доказать, что полиморфная функция F A × F B → F (A × B)
автоматически является естественным преобразованием.)