Теорія множин є необхідним математичним підґрунтям у підготовці фахівців в галузі інформаційних технологій. Зазвичай даний розділ викладається в межах дисципліни «Дискретна математика» і передбачає, серед іншого, знайомство з основами алгебри множин.
В аксіоматичній теорії множин прийнято розглядати п’ять операцій над множинами: доповнення, перетин, об’єднання, різницю та симетричну різницю [1, 2]. Разом із множинами дані операції можуть утворювати алгебраїчні вирази, результат обчислення яких залежить від послідовності виконання операцій, яка в свою чергу, визначається пріоритетом операцій. Розглянемо докладно питання пріоритету операцій в алгебрі множин.
Серед перелічених операцій найвищий пріоритет має операція доповнення, яка є одномісною операцією і аналогічна операції «унарний мінус» в елементарній алгебрі. Нижчий пріоритет має операція перетину, ще нижчий – операція об’єднання. Ці пріоритети покладені в основу ряду законів (тотожностей), таких як асоціативність, комутативність, дистрибутивність та інші [3, 4].
Слід відзначити, що в сучасній теорій множин пріоритет операцій різниці та симетричної різниці не є однозначно визначеним. Аналіз літературних дозволяє виявити наступні чотири нотації щодо визначення їх пріоритету [1-5]:
1. Операції різниці і симетричної різниці мають однаковий пріоритет з операцією об’єднання множин, і при обчисленні алгебраїчного виразу виконуються (за відсутності дужок) в порядку зліва направо (тобто є ліво-асоціативними):
2. Операції різниці і симетричної різниці мають однаковий пріоритет, нижчий за операцію об’єднання множин, і при обчисленні алгебраїчного виразу виконуються (за відсутності дужок) в порядку зліва направо (є ліво-асоціативними):
3. Пріоритетів операцій над множинами не існує взагалі. У будь-яких алгебраїчних виразах обов’язково треба ставити дужки, які визначатимуть пріоритет операцій:
4. Кожен математик вільний самостійно визначати пріоритети даних операцій в своїх наукових працях, при цьому зобов’язаний повідомляти читача про обрані пріоритети на початку своїх праць, а в самих працях строго дотримуватись обраних пріоритетів.
Питання пріоритетів операцій різниці і симетричної різниці стає принциповим при використанні мов програмування, що підтримують операції над множинами. Однією з таких мов є мова Python [6, 7]. Завдяки відносно низькому порогу входження, Python часто викладається у вишах приблизно в той час, що й курс дискретної математики, і може використовуватись в якості інструменту при вивченні та практичному застосуванні теорії множин.
З документації до мови Python випливає наступне. При виконанні операцій над множинами (над змінними типу set) використовуються перевантажені оператори «&», «|», «–» та «^», які відповідають операціям перетину, об’єднання, різниці та симетричної різниці відповідно. Однак незалежно від того, що ці оператори застосовуються до змінних-множин, їх пріоритет зберігається таким, як при використанні з іншими типами даних. В мові Python існує загальна таблиця пріоритетів, відповідно до якої пріоритети наведених вище операторів розташовуються наступним чином (в порядку зменшення):
Як можна бачити, в мові Python найвищий пріоритет має операція різниці множин, найнижчий – об’єднання множин. Операція доповнення в даному випадку не розглядається оскільки реалізується за допомогою операції різниці між універсальною множиною (універсумом) і заданою множиною.
Для перевірки використаємо наступний фрагмент Python-коду:
Тут змінна D1 отримує значення алгебраїчного виразу, що містить розглянуті оператори без застосування дужок. Змінна D2 отримує значення того самого виразу, однак першими виконуються усі операції «–», що мають у мові Python найвищий пріоритет. Змінна D3 отримує значення виразу, однак першими виконуються усі операції «–», другими – усі операції «&». Змінна D4 отримує значення виразу, однак першими виконуються усі операції «–», другими – усі операції «&», третіми – усі операції «^». Нарешті, змінна D5 отримує значення виразу, в якому останніми виконуються усі операції «|» в порядку зліва направо. Результат виконання програми показує, що кожна з функцій print виводить однаковий результат {0, 1, 4, 6, 7}. Це свідчить про тотожність виразів, за якими обчислюються змінні D1 – D5, та про правильне розуміння пріоритетів операцій над множинами в Python.
Таким чином, в мові програмування Python пріоритети операцій над множинами не відповідають жодній з нотацій, розглянутих вище. З технічної точки зору інтерпретатор Python не дозволяє змінювати пріоритети операторів, тому при виконанні операцій над множинами можна рекомендувати дотримуватись третьої нотації, яка передбачає обов’язкове використання дужок для визначення порядку виконання кожної окремої операції.
Список використаних джерел:
1. Куратовкий М., Мостовский А. Теория множеств. – М.: Мир, 1970. – 416 с.
2. Таран Т.А. Основы дискретной математики. – К.: «Просвіта», 2003. – 288 с.
3. Бондаренко М.Ф., Білоус Н.В., Руткас А.Г. Комп’ютерна дискретна математика: Підручник. – Харків: «Компанія СМІТ», 2004. – 480 с.
4. Соболева Т.С., Чечкин А.В. Дискретная математика: учебник для студ. втузов. – М.: Издательский центр «Академия», 2006. – 256 с.
5. Белоусов А.И., Ткачев С.Б. Дискретная математика: Учеб. для вузов / Под ред. В.С. Зарубина, А.П. Крищенко. – 3-е изд., стереотип. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2004. – 744 с.
6. Васильєв О. Програмування мовою Python. – Тернопіль: «Навчальна книга – Богдан», 2019. – 504 с.
7. Руденко В.Д., Жугастров О.О. Основи алгоритмізації і програмування мовою Python. – Харків: Ранок, 2019. – 192 с.
|