Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_рекоменд-ТП-4.doc
Скачиваний:
2
Добавлен:
12.11.2019
Размер:
2.49 Mб
Скачать

1.2.4. Програмні алгебри

Побудовані композиції дозволяють стверджувати, що отримано алгебру функцій (програмну алгебру)

A_Prog =<FNA, FNB, FNAB, FA, FB, FS; Sn, ASx, , IF, WH, x, id >.

Наведена алгебра містить багато «зайвих» функцій, які не можуть бути породжені в мові SIPL. Аналіз мови дозволяє стверджувати (цей факт буде доведено пізніше в теоремі 1.1), що функції, які задаються мовою SIPL, породжуються в алгебрі A_Prog з наступних базових функцій:

  • add, sub, mult, divFNA,

  • or, and, negFNB,

  • less, leq, eq, neq, geq, grFNAB,

  • FA (nInt),

  • , FB,

Підалгебру алгебри A_Prog, породжену наведеними базовими функціями, назвемо функціональною алгеброю мови SIPL і позначимо A_SIPL.

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

Формули для обчислення композицій та функцій алгебри A_Prog подамо у наступній таблиці (тут fn-арна функція, fa, g1,…, gn – номінативні арифметичні функції, fb – номінативний предикат, fs, fs1, fs2 – біномінативні функції, st – стан, n – число).

Таблиця 1.2

Композиція (функція)

Формула обчислення

Ім’я формули

Суперпозиція

(Sn(f, g1,…, gn))( st)=f(g1(st),…, gn(st))

AF_S

Присвоєння

ASx (fa)(st)=st [xfa(st)]

AF_AS

Послідовне виконання

fs1fs2(st)=fs2(fs1(st))

AF_SEQ

Умовний оператор

AF_IF

Цикл

WH(fb,fs)(st)=stn, де

st0=st, st1=fs(st0), st2=fs(st1), …, stn=fs(stn-1), причому fb(st0)=true, fb(st1)=true,…,

fb(stn-1)=true, fb(stn)=false.

AF_WH

Функція розіменування

x(st)=st(x)

AF_DNM

Тотожна функція

id(st)=st

AF_ID

Побудована алгебра A_SIPL дозволяє тепер формалізувати семантику програм мови SIPL, задаючи їх функціональними виразами (семантичними термами) алгебри A_SIPL.

1.3. Побудова семантичного терму програми

Програма мови SIPL може бути перетворена в семантичний терм (терм програмної алгебри), який задає семантику цієї програми (семантичну функцію програми), перетвореннями такого типу:

  • sem_P: ProgFS

  • sem_S: StmFS

  • sem_A: AexpFA

  • sem_B: BexpFB

Ці перетворення задаються рекурсивно (за структурою програми). Тому побудова семантичного терму залежить від вибору структури синтаксичного запису програми. Тут треба зважати на неоднозначність обраної нами граматики, що може призвести до різної семантики програм. Для досягненя однозначності треба користуватись пріоритетами операцій та типом їх асоціативності.

Таблиця 1.3

Правило заміни

Назва правила

sem_P: ProgFS задається правилами:

sem_P(begin S end)= sem_S(S)

NS_Prog

sem_S: StmFS задається правилами:

sem_S(x:=a)=ASx(sem_A(a))

sem_S(S1;S2)= sem_S(S1) sem_S(S2)

sem_S(if b then S1 else S2)= IF(sem_B(b), sem_S(S1), sem_S(S2))

sem_S(while b do S)= WH(sem_B(b), sem_S(S))

sem_S(begin S end)=(sem_S(S))

sem_S(skip)=id

NS_Stm_As

NS_Stm_Seq

NS_Stm_If

NS_Stm_Wh

NS_Stm_Op

NS_Stm_skip

sem_A: AexpFA задається правилами:

sem_A(n)=

sem_A(a)=a

sem_A(a1+a2)=S2(add, sem_A(a1), sem_A(a2))

sem_A(a1a2)=S2(sub, sem_A(a1), sem_A(a2))

sem_A(a1a2)=S2(mult, sem_A(a1), sem_A(a2))

sem_A(a1a2)=S2(div, sem_A(a1), sem_A(a2))

sem_A((a))=sem_A(a)

NS_A_Num

NS_A_Var

NS_A_Add

NS_A_Sub

NS_A_Mult

NS_A_Div

NS_A_Par

sem_B: BexpFB задається правилами:

sem_B(true)=

sem_B(false)=

sem_B(a1<a2)=S2(less, sem_A(a1), sem_A(a2))

sem_B(a1a2)=S2(leq, sem_A(a1), sem_A(a2))

sem_B(a1=a2)=S2(eq, sem_A(a1), sem_A(a2))

sem_B(a1a2)=S2(neq, sem_A(a1), sem_A(a2))

sem_B(a1a2)=S2(geq, sem_A(a1), sem_A(a2))

sem_B(a1>a2)=S2(gr, sem_A(a1), sem_A(a2))

sem_B(b1b2)=S2(or, sem_B(b1), sem_B(b2))

sem_B(b1b2)=S2(and, sem_B(b1), sem_B(b2))

sem_B(b)=S1(neg, sem_B(b))

sem_B((b))= sem_B(b)

NS_B_true

NS_B_false

NS_B_less

NS_B_leq

NS_B_eq

NS_B_neq

NS_B_geq

NS_B_gr

NS_B_or

NS_B_and

NS_B_neg

NS_B_Par

Наведені правила слід розглядати як загальні правила, які в логіці називають схемами правил. Щоб із загального правила (метаправила) отримати конкретне правило (об’єктне правило), слід замість синтаксичних метасимволів, таких як a, b, S, P, n, x, підставити конкретні синтаксичні елементи (записи), наприклад замість a підставити N–M, замість bM>N і т.п. Далі ліва частина конкретного правила заміняються на його праву частину і т.д.