Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Процедуры как преобразователи предикатов

Процедуры как функции на множестве состояний.

Мир задачи как автомат.

О формальной спецификации.

Вернёмся к фундаментальному понятию типа данных в качестве модели описания статики и динамики произвольных объектов. Статика описывается множеством состояний, а динамика – множеством операторов.

Мир=<состояния, переменные >

Можно воспринимать такую модель как автомат.

Аппликация: состояние ´ переменные → состояние

Теперь можно специфицировать любую задачу как алгоритм нахождения пути в автомате из некоторого множества начальных состояний в некоторое множества желаемых состояний.

 

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

Найти процедуру P такую, что:

{а – произвольный массив}={a=A0 & A0[1..10]®real}

¯ P

{a – упорядоченный массив}={a=A1 & "iÎ1..9 a[i]¹a[i+1]}& перестановка (A0,A1)

"iÎ1..10 (A1[i]ÎA0) & "jÎ1..10 (A0[j]ÎA1)

Постановка спецификации есть функция на множествах состояний. Решение есть процедура, то есть функция на состояние.

Задача поиска. Задан массив…

{a=AÎN®real} & xÎReal;

P-?

{xÎÛ$i: x=A[i]}

Любая P, удовлетворяющая этому свойству (находящая значение i с заданным свойством), будет решением.

 

Вернёмся к нашим обезьянам…

Мир задачи в этом случае описывается в терминах состояния каждого объекта относительно других:

1) Состояние обезьяны относительно комнаты.

Содержательное описание:

- имя переменной: обезьяна ХУ;

- множество значений: {у двери, у окна, в середине}

2) Обезьяна относительно ящика:

- имя переменной: обезьяна Z;

- множество состояний: {на ящике, на полу}

3) Ящик относительно комнаты:

- имя переменной: ящик ХУ;

- множество состояний: {совпадает с множеством значений обезьяна ХУ}

4) Банан относительно обезьяны:

- имя переменной: банан;

- множество значений: {висит, у обезьяны}

Состояние мира задачи определяется совокупностью состояний отдельных объектов, значениями переменных, соответствующих объектам.

Мир в этом случае – 4 переменные:

1) Обезьяна ХУ ® {у двери, у окна, в середине};

2) Обезьяна Z ® {на ящике, на полу};

3) Ящик ХУ ® {у двери, у окна, в середине};

4) Банан ® {висит, у обезьяны}.

Множество состояний – именованное декартово произведение.

Множество исходных состояний: любое состояние мира, в кот. мир(банан)=висит.

Множество конечных состояний: любое состояние, в кот. мир(банан)=у обезьяны.

Определение задачи заканчивается определением допустимых действий, процедур преобразования состояний.

type wState=record

ОбезьянаХY: tОбезьянаХY;

ОбезьянаZ: tОбезьянаZ;

ЯщикXY: tЯщикХY;

Банан: tБанан;

end;

procedure Схватить(var s:wState);

begin

with s do

if (банан=висит) and (обезьянаXY=середина) and (обезьянаZ=на ящике)

then банан:=у обезьяны;

end;

 

 

procedure Залезть(var s:wState);

begin

with s do

if ящикXY=обезьянаXY…

 

procedure Подвинуть(var s:wState; p1,p2:tОбезьяна);

{Подвинуть ящик из точки p1 в точку p2}

{Очевидно, соответствует более компактному описанию семейства функций}

begin

with s do

begin

if (ящикXY=обезьянаXY) and (обезьянаXY=p1) then

begin

обезьянаXY:=p2;

ящикXY:=p2;

end;

end;

 

procedure Перейти(var s:wState; p1,p2:обезьянаXY);

{Обезьяна переходить из точки p1 в точку p2}

begin

with s do

if обезьянаXY=p1 then обезьянаXY:=p2;

end;

 

1) Строго говоря, мы хотим, чтобы спецификация состояний и процедур была не частью программы, но входными данными.

2) Как решать задачу?

Входом должна быть последовательность обращения к процедурам.

<== предыдущая лекция | следующая лекция ==>
Границы программирования. Принципиальная и практическая неразрешимость | Универсальные методы решения задач
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 274; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.016 сек.