deniok: (typed lambda)
deniok ([personal profile] deniok) wrote2010-09-21 10:45 pm
Entry tags:

Задачка

Хорошая задачка из Herman Geuvers, Introduction to Type Theory (упражнение 3.17):

Построить лямбда-терм с типом ((α → β) → α) → (α → α → β) → β.

Ответы скринить не буду.

UPD: Имеется в виду просто типизированная лямбда. То есть fix и прочие Y-комбинаторы нам недоступны.

UPD2: Рекурсия ни в каком виде недоступна!

[identity profile] cadadr.livejournal.com 2010-09-21 06:52 pm (UTC)(link)
Coq < Theorem cheat : forall A B : Prop, ((A -> B) -> A) -> (A -> A -> B) -> B.
1 subgoal
  
  ============================
   forall A B : Prop, ((A -> B) -> A) -> (A -> A -> B) -> B

cheat < auto.
Proof completed.
...

[identity profile] cadadr.livejournal.com 2010-09-21 08:49 pm (UTC)(link)
Ну, конкретно это можно и ручками выписать.

[identity profile] deni-ok.livejournal.com 2010-09-21 09:04 pm (UTC)(link)
я как раз и запостил её с этой целью

и ждал читеров с джином, а не с COQ :)

[identity profile] zelych.livejournal.com 2010-09-22 07:16 am (UTC)(link)
а зачем ручками-то?
Если поменять Prop на Set, можно extract сделать:
Coq> Extraction cheat.

let cheat h h0 =
  h0 (h (fun h1 -> h0 h1 h1)) (h (fun h1 -> h0 h1 h1))

Знаю, да

[identity profile] cadadr.livejournal.com 2010-09-22 11:18 am (UTC)(link)
Ручками --- в смысле, для тренировки ума.