Re: unarnoe vychitanie


Subject: Re: unarnoe vychitanie
From: Sergei M. Abramov (at home) (abram@botik.ru)
Date: Sun Oct 15 2000 - 19:53:29 MSD


День добрый, Валентин Федорович!

Я позволил себе копию для общественности...

>Ja vernulsja iz otpuska i pogruzilsja v e-mail.

Рад Вас слышать!

>Pravil'no li ja ponjal chto u tebja s Antonom
>proshlo URA-obrashchenije unarnogo
>slozhenija v vychitanije?

Да, похоше на то--прошло.
Автор Антон, и я не сильно понимаю детали (реализации).

Н примерно так.

(1) Ура для язычка TSG бы переписан с Хаскеля на Рефал-5;

(2) Потом была двухмесячная война, чтобы Scp4 "прожевал" эту суперкомпиляцию.

Здесь очень помогла поддержка АНдрея!

Думаю, Антону, и АНдрею, и Scp4 -- всем было полезно: как я понял на этой задаче
вылезли явные новый ошибки в Scp4 и АНдрей их исправил.

Короче говоря: с любой стороны -- серьезный и полезный тест на суперкомпиляцию.

Ну и Ура "подкручивался" -- сначала из него выкинули все, что не используется в
задаче унарбного сложения... Потом, вроде бы, возвращали все это обратно (но не
уверен, что все вернули ;-).

Вот эту деталь я и не ведаю:

    1?. насколько сегодня Ура TSG/Рефал-5 далек от исходного (Ура TSG/Хаскелл)?

    2?. Не выкинуто ли теперь из Ура чего-то важного, так, что теперь Ура не
универсальный (способен работать только для бинарного сложения, например? ;-)

    3?. Вообще говоря, на данной задаче исконный (Хаскелный) Ура ведет себя так:
выдает (единственный) ответ, а затем ищет (бесконечно) другие ответы (которых
нету). Меня удивило, что Scp-4 преобразовало "это самое" в Рефал-программу,
которая всегда терминируется.

(3) Но это детали (разберемся). А факт, что после суперкомпиляции Ура (внутри
которого стояло TSG-программа унарного сложения) автоматически получена
Рефал-программа, которая действительно делает унарное вычитание...

Прилагаю таблицу вычитания [0..3]x[0..3] и текст программы (все что ниже
"=========" -- построил Scp-4, выше--я написал "пускач").

У программки забавная структура: два невложенных цикла с аккамулятором.
"Чистое" вычитание построить способен только ScpWalk (слияние двых невложенных
циклов). По этому поводу я в конце цитирую себя (из переписки с Робертом: прдон
за варварский английский, Роберт терпит...)

>Eto gde-nibud' izlozheno? Mozhno posmotret'?

Пока это нигде не изложено, кроме как в письмах (которые Вы видели).

Я очень хочу, чтобы Антон добил это до публикуемого вида.

А для застолбления приоритета я готов в одну из двух (до конца года) пишущихся
мною с Робертом статей вставить (попробовать вставить) секцию (два-три-четыре
абзаца)---сухой отчет о том, что:

    "Тогда-то и тогда-то... на Scp-4 ...те-то и те-то... сделали ...то-то и
то-то... Результат--см. на картинке."

Но это требует небольшого "до"-вылизывания результата.

Удачи, низкий поклон Вам и Татьяне Ивановне!

Сергей
=================== 1 ====================
(1) A student ---a yang refalists from Moscow State
University,--was fighting during last two months (after the Summer school)
with:

        Scp4 <Ura AddUn [ e.1, Xe_1 ]::Class e.2>

where

   Scp4 -- current version of (Refal5->Refal5/Refal5)-supercompiler;

(*** In fact, there are two backends, so it's possible output Refal5 or Refal+
code from Scp4. I prefer Refal+ dialect ***)

   Ura -- (TSG/Refal5)-ura: manually rewritten ura from Haskell to Refal5;

   AddUn-- unary addition.

Today the result is:

    Scp4 returns small enough Refal+ program, that is unary-subtraction.

The structure of the program is:

INV-REF tX tY -- main function;

F1 ...Z... ...X... ...Y... -- first loop

    F1 is decreasing Y, increasing Z (initialized as ("XE" 1) ;-)
       when Y==0, the F2 is started

    Thus F1 is just "reverse" of Y, and Z == Y in F2 (in some sense).

F2 ...Z... ...X... -- second loop

    F1 is decreasing X and Z by one
       when Z is ("XE" 1) the rest of X is the result.

Please note:
    F1-loop is residual for ppt development recursion;
    F2-loop is residual for Clash (unification) recursion.

A one-loop subtraction program cannot be achieved by Scp4 -- for this goal we
need... Yes, ScpWalk-technology!

I am not sure in the details, and I need a discussion with the student:

    -- is Ura the perfectly rewritten from Haskell (may be some
``simplification'' was made);

    -- is it possible improve the result to support automatic TSG-backend for
Scp4 (to output Refal-graph as TSG-program)

    -- etc.

After then, maybe in some paper we can just add a few words about ``the first
inverse compilation was .... by ....''.

=================== 2 ====================
>> Scp4 <Ura AddUn [ e.1, Xe_1 ]::Class e.2>
[...]

>>Please note:
>> F1-loop is residual for ppt development recursion;
>> F2-loop is residual for Clash (unification) recursion.
>>
>>A one-loop subtraction program cannot be achieved by Scp4 -- for this goal we
>>need... Yes, ScpWalk-technology!
>
>Very interesting structure. There may be several sources for this effect...

The ura structure is following:

    -- regursion(s) from root to the leaves with >>accamulating<< all splits;
    -- then clash -- also recursion, if $d_out$ is not atom
       (is a list [_, _, ....]).

Thus we have classic ``two unnested iteration with accamulator'' -- this is
subject for ScpWalk.

>... for example, is URA flat itself a flat/recursive program, is it
>organized breadth/depth-first, how is unary addition written
>(flat/recursive) ...

Yes! I know that the student has a lot of experiments of this kinds and try all
permutations over Scp4 options (lazy/strict, etc...) In most cases he has huge
residual program...

This is the best what he reached now.





This archive was generated by hypermail 2b25 : Mon Oct 25 2004 - 21:24:58 MSD