2015-09-27 33 views
7

Właśnie zaczynam grać z idrisem i dowodzeniem twierdzeń w ogóle. Mogę śledzić większość przykładów dowodów podstawowych faktów w Internecie, więc chciałem spróbować czegoś samowolnego. Tak, chcę napisać próbny termin na następny podstawowych właściwości mapy:Wykazać id mapy = id w idris?

map : (a -> b) -> List a -> List b 
prf : map id = id 

Intuicyjnie, mogę sobie wyobrazić, jak dowód powinno działać: Weźmy dowolny lista L i analizować możliwości Map ID l. Kiedy l jest puste, to oczywiste; kiedy l nie jest pusta, opiera się na koncepcji, że aplikacja funkcjonalna zachowuje równość. Tak, mogę zrobić coś takiego:

prf' : (l : List a) -> map id l = id l 

To jak dla całego rachunku. Jak mogę go przekształcić w dowód równości zaangażowanych funkcji?

+0

@BrianMcKenna: opisujesz, w jaki sposób udowodnić "prf", o którym PO już napisał, że potrafi pisać. Jego pytanie dotyczy możliwości podniesienia "prf" do równości ekstensjonalnej. – Cactus

Odpowiedz

9

Nie możesz. Teoria typu Idrisa (taka jak Coq's i Agda) nie wspiera ogólnej ekstensjonalności. Biorąc pod uwagę dwie funkcje, które "działają tak samo", nigdy nie będziesz w stanie udowodnić, że Not (f = g), będziesz w stanie udowodnić, że f = g są zdefiniowane tak samo, aż do równoważności alfa i eta. Niestety, rzeczy się tylko pogarszają, gdy weźmiesz pod uwagę funkcje wyższego rzędu; istnieje twierdzenie o tym w standardowej bibliotece Coq, ale nie mogę tego teraz znaleźć ani zapamiętać.