thedeemon: (Default)
[personal profile] thedeemon
Agda (from version 2.2.6) has a command, ‘Auto’, which searches for type inhabitants. It can be used as an aid when interactively constructing terms in Agda. In a system with dependent types it can be meaningful to use such a tool for finding fragments of, not only proofs, but also programs. For instance, giving the type signature of the map function over vectors, you will get the desired function as the first solution.
The tool is based on a term search implementation independent of Agda called ‘Agsy’. Agsy is a general purpose search algorithm for a dependently typed language similar to Agda. One shouldn’t expect it to handle large problems of any particular kind, but small enough problems of almost any kind.
Any solution coming from Auto is checked by Agda.

оттудова

В глаза еще не видел, но по описанию очень похоже на то, о чем я недавно говорил в посте про будущее программирования.

Date: 2011-05-01 11:25 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Там, похоже, со скоростью проблемы и с осмысленностью сколь-нибудь нетривиальных функций. Т.е. чем сложнее тип, тем больше вероятность, что синтезированная функция будет не тем, что хотелось бы. Ибо в типах информации все еще недостаточно.

Date: 2011-05-01 01:09 pm (UTC)
From: [identity profile] gds.livejournal.com
ага, согласен. Но даже тупой пример придумывается сходу: ∀α . list α → option α -- тут очень много функций может быть найдено.
Фактически, нам предлагают часть алгоритма выписывать в виде типов, которые соединяются друг с другом каким-либо очевидным образом.

Date: 2011-05-01 03:57 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Помнится, когда Мейер рассказывал про статью Вадлера "Theorems for free", он практически этот пример приводил как демонстрацию обратного. Если мы не имеем другой информации о функции, синтезируем чистые функции (в том числе не замыкания со ссылками на значения из окружения), и стараемся брать самую простую из подходящих, то для ∀α . list α → α кроме как hd и предложить особо нечего.

Date: 2011-05-01 04:36 pm (UTC)
From: [identity profile] gds.livejournal.com
но почему hd, а не какой-нибудь "последний элемент"?
В случае option α -- так вообще можно легко предложить счётное множество функций, для каждого натурального числа n возвращающее n'ый элемент списка либо None в случае его отсутствия.

Date: 2011-05-02 03:01 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Потому что "стараемся брать самую простую из подходящих".

Date: 2011-05-02 03:04 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Точнее, самую простую из использующих максимум информации о типах, иначе можно было бы просто возвращать None.

Date: 2011-05-02 09:18 am (UTC)
From: [identity profile] nivanych.livejournal.com
Самое простое (например, самое короткое) выражение этого типа.
Всё. Для зависимых типов этого достаточно.
Пример с [a]→a хорошо показывает, что тип может определять много выражений и его надо уточнять.
Можно ещё выдавать несколько выражений с возрастающими сложностями.
Где-то это может и пригодиться...
Но на мой взгляд, уж лучше, задавать тип точнее.

Date: 2011-05-02 12:13 pm (UTC)
From: [identity profile] gds.livejournal.com
да ну, унылое говно ведь это. Я за неявные фишки (правда, касаемо планировщика) уже говорил, про это тем более скажу.
Понятно, что зависимые типы делают так, что в некоторых случаях оно катит, но всё же.

Date: 2011-05-02 12:25 pm (UTC)
From: [identity profile] nivanych.livejournal.com
Почему это унылое? Весёлое, бодрое!
Код по спецификации так генерить, это не ерунда, всё-таки.
Те же RFC довольно чотко описывают.
Ну и есть одно применение, когда качество сгенерированного почти похер — это доказательства.

Date: 2011-05-02 09:32 am (UTC)
From: [identity profile] dimitrykakadu.livejournal.com
А можно какой-нибудь хороший набор ссылок про agda2 для новичка, знакомого с ocaml?

Date: 2011-05-02 10:00 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Это к [livejournal.com profile] nivanych, наверное. Сам-то я не настоящий сварщик пока.

Date: 2011-05-02 10:37 am (UTC)
From: [identity profile] dimitrykakadu.livejournal.com
Забавно) Хаскеллист-штангист, агдаист-сварщик. А камлист кто?

Date: 2011-05-02 10:51 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Это не обязательно про агдаистов.
http://www.anekdot.ru/scripts/anekdotid.php?ids=-2030519007

Date: 2011-05-02 03:56 pm (UTC)
From: [identity profile] nivanych.livejournal.com
"Сварщик", как показано выше, это из анекдота.
"Штангист" родилось из общения с Сергеем Зефировым и сильно укрепилось после его высказываний про то, что при занятиях спортом голова думает лучше. После это обобщили до всех "небыдло"-знаний типа теории категорий, которой кое-то таки в том же Haskell'е объясняется.

Date: 2011-05-02 03:51 pm (UTC)
From: [identity profile] nivanych.livejournal.com
На их сайте есть много хороших ссылок —
http://wiki.portal.chalmers.se/agda/pmwiki.php
Я не думаю, что кто-то делал бы туториал специально для знающих OCaml или Haskell.

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 31st, 2026 09:10 am
Powered by Dreamwidth Studios