Малюнок 2.7. Програма як діалектичне заперечення проблеми 1 страница



 

Яка ж саме властивість проблем знаходить своє відображення у програмах? Щоб сформулювати ту властивість проблем, яка робить можливим використання програм для їх розв’язання, подивимось на визначення проблеми. Філософські словники дають дуже гарне і просте визначення проблеми як єдності відомого та невідомого. З гносеологічної точки зору тут мова йде про відому та невідому інформацію (знання).

Розглянемо питання про інформаційну властивість проблем більш детально. Сучасні комп'ютерні словники[4] визначають інформацію як дані, інтерпретовані в предметній області. Вони також дають наступну низку термінів, пов’язану з інформацією:

дані – інформація – знання – мудрість.

Тут дані тлумачаться як форма подання інформації, інформація – це дані, інтерпретовані у нашому світі, знання – істинна інформація, мудрість – вміння використовувати знання для досягнення вибраної мети.

Ця низка термінів видається дуже важливою для інформатики та суспільства в цілому. Вона фактично вказує на етапи розвитку інформатики та суспільства: спочатку досліджується зовнішня сторона інформації – тобто дані (пригадайте структури даних мов програмування, бази даних та таке інше), далі акцент переноситься на інформацію (інформаційні технології, інформаційне суспільство), після чого мають прийти технології обробки знань та бази знань (суспільство, засноване на знаннях). І хоча зараз на етапі лише частково розвиненого суспільства важко про це говорити, колись має з’явитись «розумне (мудре) суспільство».  

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

В математиці об’єкти, що обчислюють нові дані на підставі вхідних даних називають функціями, а сам процес застосування функцій до даних – аплікативністю.

Отже, основною (істотною) властивістю програм є властивість аплікативності (функціональності): програми застосовують до вхідних даних для одержання результатів. Внутрішня властивість аплікативності знаходить своє зовнішнє відображення у відношенні прагматичності програм, оскільки вона задає спосіб використання програм користувачем. Ця властивість дозволяє на гранично високому рівні абстракції трактувати програми як функції, які переводять вхідні дані у вихідні. Сформулюємо таке розуміння програм у вигляді наступного принципу.

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

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

Згідно тріади розвитку тепер потрібно побудувати поняття, що є синтезом понять даного (теза) та функції (антитеза). Позначимо це нове поняття через X. Тоді можна записати наступне понятійне рівняння:

X=синтез (теза: дане, антитеза: функція)

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

Щоб зрозуміти, що є X, пригадаймо, що зараз розвиваються перші, найабстрактніші аспекти поняття програми. Тому слід очікувати, що ці аспекти, зокрема і X, мають з’являтися на перших кроках роботи з програмами, зокрема і на екрані комп’ютера. Дійсно, якщо ми включимо комп’ютер, то зразу ж на робочому столі побачимо певний набір іконок, ярликів. Але ж це і представники поняття X. Дійсно, кожна іконка є певним знаком, іменем програми, яку можна при потребі виконати. Таким чином, розв’язком наведеного понятійного рівняння є поняття імені функції. Відзначимо, що можна було б це поняття назвати знаком, символом, позначенням функції, але термін ім’я видається найбільш вдалим, тому що активно використовується в програмування та має давню традицію використання в філософії. Зокрема, перше речення (!) праці Аристотеля «Категорії» присвячене розгляду властивостей імен.   

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

З іменами ми поводимось як з даними. Імена складаються з певних символів, вони щось репрезентують (іменують, позначають).

На отриманому рівні абстракції можна сформулювати новий принцип.

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

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

До цього моменту розвитку був встановлений зв'язок між даними і функціями за допомогою аплікації і між функціями та іменами функцій за допомогою відношення денотації. А як же пов'язані дані та імена функцій? Їх зв'язок задається похідним відношенням інтерпретації, що по імені функції та даному визначають результат застосування функції, що позначається цим іменем, до обраного даного. Відзначимо, що якщо зазначену впорядковану пару (ім'я, дане) розглядати як структуроване дане, то операція (відношення) інтерпретації підпадає під поняття функції, що дозволяє будувати "універсальні" операції інтерпретації як "звичайні" функції. Додатковий аспект операції інтерпретації стосується її обчислюваності. Подальший розвиток цих аспектів приводить до побудови інтерпретаторів мов програмування, і зокрема, комп'ютерів. 

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

 

Малюнок 2.8. Тріада основних програмних понять

 

У цій тріаді всі поняття пов'язані одне з одним вказаними відношеннями, але і самі відношення пов’язані одне з одним. Наприклад, якщо нам задані відношення інтерпретації та аплікації, то можна визначити відношення денотації. Сформулюємо це більш точно. Нехай відношення інтерпретації int(name, d, d ¢ ) означає, що для імені функції name та вхідного даного d вихідним даним буде d ¢ , а відношення appl(func, d, d ¢ ) означає, що аплікація функції func до вхідного даного d дає вихідне дане d ¢ .  Тоді імені функції n буде відповідати така функція f, що має місце рівність int(n, d, d ¢ )= appl(f, d, d ¢ ) для всіх даних. Власне кажучи, такий спосіб визначення денотації і використовується при операціональному підході до семантики програм. 

Надалі при розвитку програмних понять будемо "повторювати" програмну тріаду, але на більш багатих рівнях. 

 

2.4.2 Пентада основних програмних понять

Останнім моментом розвитку понять в тріаді основних програмних понять було заперечення функції та перехід до імені функції, що зберігає функції за допомогою операції денотації. Для подальшого розвитку програмних понять необхідно зробити наступне заперечення, що повертає нас до поняття функції, але вже на новому рівні. 

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

 Y=синтез (теза: функція, антитеза: ім’я функції)

З тріади розвитку випливає, що ім’я функції є діалектичним запереченням функції, а Y – діалектичним запереченням імені функції, тобто Y є заперечення заперечення функції. Говорячи більш просто, маємо, що Y поводиться як функція (з цим поняттям працюють як з функціями), але також Y має певний зв’язок з іменами функцій та пов’язаним із ними функціями.

Аналогічно тому, як функції в програмній тріаді є функціями над даними, цей новий об'єкт буде функцією над функціями, що мають імена (іменованими функціями). Такі об'єкти називаються композиціями функцій. Отже, з математичної точки зору композиції – це оператори (операції над функціями). Композиції і є новим поняттям Y. У композиціях операція іменування (денотації) повторює себе багато разів, тому що кожний новий аргумент композиції є новим набором іменованих функцій. Також і аплікація повторюється на новому рівні як застосування композицій до іменованих функцій. Отже, композиції розкривають структури функцій та з змістовної точки зору є засобами побудови функцій (програм). На новому рівні абстракції можна сформулювати наступний принцип [Редько].

Принцип композиційності.  Програми (функції) будуються з більш простих програм за допомогою композицій.

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

Для того, щоб просуватися вперед необхідно зробити нове заперечення і відповідно до закону заперечення заперечення буде здійснене повернення до поняття імені функції, але вже на новому рівні, який враховує наявність композицій. Нове поняття Z задається понятійним рівнянням

Z =синтез (теза: ім’я функції, антитеза: композиція)

Нові об'єкти з Z, які виникають, за своєю суттю є складними іменами, що описують функції. Такі об'єкти назвемо дескрипціями. Дескрипції фактично є текстами програм. Це дозволяє сформулювати наступний принцип.

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

Відзначимо етимологічну близькість терміна дескрипції терміну програма. Обидва слова походять від дієслова «писати, малювати», тільки слово програма походить від грецького, а дескрипція – від латинського слова.

Дескрипції можуть розглядатися як імена, побудовані за допомогою більш простих імен. Правила побудови таких імен (дескрипцій) звичайно називаються граматикою. Граматика задає закони побудови правильних синтаксичних конструкцій. Стосовно предмету нашого дослідження граматика індуктивно задає правильні дескрипції (записи, зображення)  на основі попередньо заданих імен базових функцій і імен (записів, зображень) композицій. Поняття дескрипції вже є досить багатим поняттям, оскільки допускається можливість виділення складових частин дескрипції та з'єднання таких частин у нову дескрипцію. Це фактично означає, що на класі дескрипцій повинні бути задані спеціальні операції, які дозволяють здійснювати таку роботу з дескрипціями. Відображення денотації для дескрипцій звичайно будуються індуктивно у відповідності зі структурою дескрипції. Індуктивні визначення дескрипцій індукують індуктивні доведення різних властивостей програм.

У процесі розвитку поняття програми були введені п'ять програмних понять: дане – функція – ім'я функції – композиція – дескрипція. Ці п'ять програмних понять описують на абстрактному рівні основні властивості програм. Будемо називати ці поняття з їх відношеннями пентадою основних програмних понять (малюнок 2.9). 

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

В пентаді чітко просліджуються три напрямки (три програмні аспекти):

· програмний аспект, що пов’язує дані, функції та композиції, який називають семантичним аспектом,

· програмний аспект, що пов’язує дані, імена та дескрипції, який називають синтаксичним аспектом,

· програмний аспект, що пов’язує імена  та дескрипції з функціями та композиціями, який називають денотаційним аспектом.

Зауважимо, що для семантичного аспекту існують різні тлумачення: вузьке тлумачення розглядає семантичний аспект як область значень (смислів) програм, а широке тлумачення додатково включає в семантику зв’язок синтаксичного аспекту із смислами програм.

 

 

Малюнок 2.9. Пентада основних програмних понять

 

 

Введених понять достатньо для побудови багатьох моделей програм. Однак попередньо обговоримо питання про зв'язок цих понять з поняттям мови.

2.5 Сутнісні та семіотичні аспекти програм

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

Основні семіотичні аспекти (прагматика, семантика і синтаксис) були визначені та досліджені в роботах Ч.Пірса, Ч. Морріса, Р. Карнапа та інших вчених:

· прагматика – це відношення між мовою і користувачем мови,

· семантика – це відношення між виразами мови та їх значеннями (денотатами), абстраговане від користувача,

· синтаксис – це відношення між мовними виразами, абстраговане від їх денотатів. 

Ці три аспекти також застосовують до програм, визначаючи таким чином прагматичний, семантичний і синтаксичний аспекти програм. Будемо називати ці аспекти семіотичними аспектами програм.

Разом з тим, побудовані пентади основних понять програмування та основних програмних понять дають дещо іншу класифікацію аспектів поняття програми.

А саме, перша пентада задає чотири основних зовнішніх аспекта:

· адекватнісний,

· прагматичний,

· обчислювальний,

· генетичний.

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

Друга пентада дає три основних внутрішніх аспекта програм:

· семантичний,

· синтаксичний,

· денотаційний.

Вказані аспекти розкривають як зовнішні, так і внутрішні властивості програм, що відповідає категорії сутності, тому будемо називати наведені сім аспектів сутнісними аспектами програм.

Таким чином, тут введено два підходи до розкриття основних програмних аспектів: семіотичний та сутнісний. Доцільно зробити порівняльний аналіз запропонованих підходів.

 

Таблиця 2.1

Характе-ристика підходу Семіотичній підхід Сутнісний підхід
1 Рівень загаль-ності Орієнтація на довільні системи, що використовують знаки. Більш спеціальна орієнтація на програми, які розглядаються на високому рівні абстракції.
2 Основні поняття підходу   Основним поняттям є знак, додатковими – користувач та значення. Тому головний акцент – на знаках, невелика кількість понять не дає можливості визначати достатньо кількість аспектів.  Основних понять десять, що дає змогу більш точно виразити різні аспекти, не віддаючи перевагу лише одному з них.
3 Класифі-кація аспектів Класифікація аспектів відсутня. Тому чіткого розподілу на зовнішні та внутрішні аспекти немає. До зовнішніх можна віднести лише прагматичний аспект, частково – семантичний аспект, до внутрішніх – синтаксичний та семантичний (частково). Аспекти класифікуються на чотири зовнішніх та три внутрішніх.
4 Зовнішні аспекти До зовнішніх можна віднести лише прагматичний аспект. Як наслідок, це веде до перенавантаження прагматичного аспекту, який стає занадто розпливчастим та нечітким. Виокремлено чотири зовнішніх аспекта з достатньо чіткими визначеннями. Це дозволяє розгорнути детальне вивчення цих аспектів.
5 Внутріш-ні аспекти До внутрішніх можна віднести семантичний (частково) та синтаксичний аспекти. Але семантичний аспект визначає відношення знака до його значення, тобто має синтактико-семантичний напрямок, що ставить синтаксис у привілейоване становище. До внутрішніх віднесено семантичний, синтаксичний та денотаційний аспекти. Семантичному аспекту в семіотиці відповідають такі аспекти в сутнісному підході: семантичний, як теорія значень, та денотаційний, який пов’язує значення (тобто семантику) та синтаксис. Це дає можливість розглядати семантико-синтаксичні підходи до розгортання визначень програм, в яких саме семантика знаходиться у привілейованому стані.

 

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

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

Принцип підпорядкованості.  Семантика є провідним внутрішнім аспектом програм, а синтаксичний та денотаційний аспекти підпорядковані семантиці [Редько]. Всі аспекти варто спочатку вивчати незалежно один від одного, а потім – у їх єдності.


Дата добавления: 2019-02-13; просмотров: 277; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!