Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
NikitchenkoNEWNEW.doc
Скачиваний:
26
Добавлен:
08.11.2019
Размер:
2.99 Mб
Скачать

1.3.7. Обчислення значень семантичних термів

Семантичні терми програми є точно (формально) заданими об’єктами, які формалізують семантику програм у термінах відповідних семантичних алгебр. Такі алгебри й терми і є головними об’єктами дослідження в нашому курсі. Ми далі будемо вивчати різні властивості таких алгебр та відповідних термів. Зараз розглянемо найпростішу властивість термів, зважаючи на те, що вони задають деякі функції (тобто повертаємось знову до синкретичного тлумачення терму як функції). Ця властивість називається аплікацією і полягає в застосуванні функції, що задається термом, до певних вхідних даних. Аплікація є аналогом (абстракцією) тестування програм.

Приклад 1.4. Обчислимо значення семантичного терму програми GCD на вхідному даному [M 8, N 16].

Процес обчислення значення задається формулами таблиці 1.5. Ці формули, як і формули таблиці 1.6, є загальними правилами обчислень. Щоб їх застосовувати, треба робити конкретизацію загальних правил подібно до того, як описано в прикладі 1.3. Отже, завдання полягає в отриманні значення наступної аплікації:

WH(S1(neg, S2(eq, M, N)), IF(S2(gr, M, N),

ASM( S2(sub, M, N)), ASN( S2(sub, N, M)))) ([M 8, N 16]).

Правила для обчислення циклу AF_WH говорять про необхідність поступового обчислення станів st0, st1, … та перевірки відповідних умов. Отримуємо уніфікатор

[fb/S1(neg, S2(eq, M, N)),

fs/ IF(S2(gr, M, N)), ASM( S2(sub, M, N), ASN( S2(sub, N, M))),

st/[M 8, N 16], st0/[M 8, N 16]].

Переходимо до обчислення fb(st0), яке конкретизується аплікацією

S1(neg, S2(eq, M, N))([M8, N16]).

Ця аплікація обчислюється згідно із загальним правилом AF_S для обчислення суперпозиції. Після відповідної уніфікації та конкретизації спочатку отримуємо, що

S1(neg, S2(eq, M, N))([M8, N16])=

= neg(S2(eq, M, N)([M8, N16])).

Застосовуючи правило обчислення суперпозиції ще раз та правила обчислення функції розіменування, отримуємо, що

S2(eq, M, N)([M8, N16])=

=eq(M([M8, N16]), N([M8, N16]))=eq(8,16)=false.

Остаточно маємо, що

S1(neg, S2(eq, M, N))([M8, N16])=neg(false)=true.

Правила обчислення для циклу говорять про необхідність обчислення за правилом st1=fs(st0), що конкретизується наступним чином:

IF(S2(gr, M, N), ASM( S2(sub, M, N)),

ASN( S2(sub, N, M)))([M8, N16]).

Обчислення цієї аплікації полягає у застосуванні правила AF_IF для обчислення умовного оператора. Спочатку обчислюємо умову

S2(gr, M, N))([M8, N16])= gr(M([M8, N16]), N([M8, N16]))= gr(8, 16)= false.

При хибній умові за правилом AF_IF обчислюється ASN( S2(sub, N, M))([M8, N16]). Отримуємо за правилом AF_AS

ASN( S2(sub, N, M))([M8, N16])= [M8, N16][NS2(sub, N, M)([M8, N16])] =[M8, N16][Nsub(N([M8, N16]), M([M8, N16]))] =[M8, N16][Nsub(16,8)]=[M8, N16][N8] = [M8, N8].

Отже, st1 конкретизується як [M8, N8]. Тепер за правилом AF_WH обчислюємо умову циклу на отриманому стані:

S1(neg, S2(eq, M, N))([M8, N8])=false.

Таким чином, остаточний стан є [M8, N8].

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]