Термы с заданными типами
Jun. 28th, 2012 05:04 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Три задачки с экзамена, в порядке усложнения условия.
Написать замкнутый терм типа (a -> b) -> ((a -> b) -> b) -> b.
Написать замкнутый терм типа (a -> b) -> ((a -> b) -> b) -> b, которому нельзя приписать тип c -> (c -> b) -> b.
Написать замкнутый терм с наиболее общим типом (a -> b) -> ((a -> b) -> b) -> b.
Написать замкнутый терм типа (a -> b) -> ((a -> b) -> b) -> b.
Написать замкнутый терм типа (a -> b) -> ((a -> b) -> b) -> b, которому нельзя приписать тип c -> (c -> b) -> b.
Написать замкнутый терм с наиболее общим типом (a -> b) -> ((a -> b) -> b) -> b.
no subject
Date: 2012-06-28 03:00 pm (UTC)no subject
Date: 2012-06-28 03:07 pm (UTC)no subject
Date: 2012-06-28 03:01 pm (UTC)(я не настоящий хаскелист, я каску на стройке нашёл, если что)
... Управление текстовым редактором в нетрезвом состоянии ...
no subject
Date: 2012-06-28 03:05 pm (UTC)no subject
Date: 2012-06-28 03:09 pm (UTC)... Какой я математик? Я флюктуация. ...
no subject
Date: 2012-06-28 03:32 pm (UTC)Наверное, это можно как-то покороче записать, но в таком виде оно мне в голову пришло.
... Старый, нищий, уродливый и бездарный оптимист ...
no subject
Date: 2012-06-28 04:28 pm (UTC)no subject
Date: 2012-06-28 03:16 pm (UTC)no subject
Date: 2012-06-28 03:26 pm (UTC)В системах в стиле Карри терму можно приписать бесконечное множество типов.
no subject
Date: 2012-06-28 03:49 pm (UTC)... Три категории предвкушения чего-то приятного ...
no subject
Date: 2012-06-28 04:13 pm (UTC)no subject
Date: 2012-06-28 03:53 pm (UTC)no subject
Date: 2012-06-28 04:20 pm (UTC)no subject
Date: 2012-06-28 04:25 pm (UTC)no subject
Date: 2012-06-28 11:02 pm (UTC)Первая попытка решить вторую задачу.
no subject
Date: 2012-06-29 12:25 am (UTC)... Мимореальный музей ...
no subject
Date: 2012-06-29 03:58 am (UTC)Наиболее общий тип
Date: 2012-06-28 05:46 pm (UTC)Re: Наиболее общий тип
Date: 2012-06-28 05:55 pm (UTC)Последний является наиболее общим (главным, principle, most general), потому что все остальные могут быть получены из него подстановкой выражения типа вместо переменной типа. Вот эти подстановки:
Re: Наиболее общий тип
Date: 2012-06-28 07:06 pm (UTC)То есть третье задание - написать терм с конкретным типом, наиболее общим для которого будет заданный?
*(я не мог понять, есть ли и какая разница между вторым и третьим заданием)
Re: Наиболее общий тип
Date: 2012-06-28 07:38 pm (UTC)Re: Наиболее общий тип
Date: 2012-06-29 09:41 pm (UTC)Re: Наиболее общий тип
Date: 2012-06-29 07:41 am (UTC)Re: Наиболее общий тип
Date: 2012-06-29 09:43 pm (UTC)*(у меня плохой функциональный бекграунд, поэтому отошлите куда-то, если так будет лучше - литература имеется ввиду)
Re: Наиболее общий тип
Date: 2012-06-30 05:54 am (UTC)Re: Наиболее общий тип
Date: 2012-06-30 09:31 am (UTC)\f g -> g (\x -> g f)
\f g -> g (\y -> g ((\x -> f) y))
Re: Наиболее общий тип
Date: 2012-07-01 12:40 pm (UTC)Re: Наиболее общий тип
Date: 2012-07-01 09:08 pm (UTC)Простите, я уже наверное достал.
Скажите, пожалуйста, есть ли терм, который будет решением второго задания но не третьего? И какой?
Re: Наиболее общий тип
Date: 2012-07-01 09:11 pm (UTC)Re: Наиболее общий тип
Date: 2012-07-01 09:18 pm (UTC)no subject
Date: 2012-06-29 04:30 am (UTC)no subject
Date: 2012-06-29 07:50 am (UTC)Так, в Haskell98 одним из решений первой задачи является undefined, а в System F с самыми общими типами плохо.
Вот ещё задачка: есть ли в System F у "\f g -> g (\a -> g f)" тип, более общий, чем "милнеровский" или не сравнимый с ним.
no subject
Date: 2012-07-01 09:32 pm (UTC)Ну да, согласен. Проще всего сказать, что термы - чистое лямбда-исчисление (переменные+аппликация+абстракция), а типы - Haskell98. Термин Simply typed lambda calculus не очень однозначен: некоторые под ним понимают систему, более простую чем нужно, в которой типы конструируют из стрелочек и констант (а не переменных с возможностью подстановки).
no subject
Date: 2012-07-02 06:31 am (UTC)Просто сказать "Haskell98" не годится, т.к. есть классы типов, рекурсия, алгебраики, let и undefined.
В системе Хиндли-Милнера есть let, и многие поймут её как систему Майкрофта, в которой есть также и рекурсия, или даже как весь ML.
Можно было бы сказать "prenex-фрагмент System F" (где нет let, рекурсии и undefined!) но это исчисление a la Church.
Вдобавок, есть великое множество похожих, но неэквивалентных исчислений с одинаковым названием (например, бета-ЛИ vs бетаэта-ЛИ, или ЛИ с НФ vs ЛИ с СЗНФ) и из-за того что спрашивающий и отвечающий по разному трактуют похожесть, могут возникнуть проблемы, точно указать, какие именно отличия важны, а какие - нет, практически невозможно, есть шанс что найдётся какое-то экзотическое исчисление, которое подходит под условие задачи, но точно не имеется ввиду.
Так что проще всего сказать "В Haskell 98, используя только переменные, аппликацию и лямбда-абстракцию, найти выражения ..."
no subject
Date: 2012-06-29 08:39 am (UTC);-)