Dla typów wystarczająco polimorficznych parametryczność może jednoznacznie określać samą funkcję (szczegóły: patrz Wadler's Theorems for free!). Na przykład jedyną pełną funkcją z typem forall t. t -> t
jest funkcja identyfikacji id
.W Idris, mogę udowodnić darmowe twierdzenia, np. jedyna (całkowita) funkcja typu `forall t. t -> t` to "id"?
Czy można to stwierdzić i udowodnić w Idris? (A jeśli nie można tego sprawdzić w Idrisie, czy to prawda?)
Oto moja próba (wiem, że funkcja równości nie jest prymitywną koncepcją w Idris, więc twierdzę, że każda funkcja rodzaju ogólnego t -> t
zawsze zwraca ten sam wynik jak funkcja tożsamości wróci):
%default total
GenericEndomorphism: Type
GenericEndomorphism = (t: Type) -> (t -> t)
id_is_an_example : GenericEndomorphism
id_is_an_example t = id
id_is_the_only_example : (f : GenericEndomorphism) -> (t : Type) -> (x : t) -> f t x = x
id_is_the_only_example f t x = ?id_is_the_only_example_rhs
Powstała dziura jest:
- + Main.id_is_the_only_example_rhs [P]
`-- f : GenericEndomorphism
t : Type
x : t
-------------------------------------------------------
Main.id_is_the_only_example_rhs : f t x = x