Логическое программирование
Покупка
Новинка
Основная коллекция
Тематика:
Программирование и алгоритмизация
Издательство:
НИЦ ИНФРА-М
Год издания: 2025
Кол-во страниц: 221
Дополнительно
Вид издания:
Учебник
Уровень образования:
Профессиональное образование
ISBN: 978-5-16-018782-2
ISBN-онлайн: 978-5-16-111682-1
Артикул: 798978.01.01
В учебнике рассмотрены вопросы, которые касаются языков логического программирования: особенности применения, синтаксис, функции. Приведено большое количество содержательных примеров решения задач, демонстрирующих возможности языков логического программирования.
Соответствует требованиям федеральных государственных образовательных стандартов высшего образования последнего поколения.
Для студентов высших учебных заведений, обучающихся по направлениям подготовки «Информационные технологии автоматизированных систем», «Программная инженерия», «Прикладная информатика, а также лиц, самостоятельно изучающих логическое программирование.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 02.03.02: Фундаментальная информатика и информационные технологии
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
- 45.03.04: Интеллектуальные системы в гуманитарной сфере
- ВО - Магистратура
- 01.04.02: Прикладная математика и информатика
- 09.04.01: Информатика и вычислительная техника
- 09.04.02: Информационные системы и технологии
- 09.04.03: Прикладная информатика
- 09.04.04: Программная инженерия
- ВО - Специалитет
- 09.05.01: Применение и эксплуатация автоматизированных систем специального назначения
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
А.А. ПЕТРЕНКО А.О. СУВОРОВ ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ УЧЕБНИК Москва ИНФРА-М 2025
УДК 510.755(075.8) ББК 32.973я73 П30 Р е ц е н з е н т ы: Плотникова Е.Г., доктор педагогических наук, профессор, профессор кафедры информационных технологий в бизнесе Пермского филиала Национального исследовательского университета «Высшая школа экономики»; Погудин А.Л., кандидат технических наук, доцент, доцент кафедры информационных технологий и автоматизированных систем Пермского национального исследовательского политехнического университета Петренко А.А. П30 Логическое программирование : учебник / А.А. Петренко, А.О. Суворов. — Москва : ИНФРА-М, 2025. — 221 с. — (Высшее образование). — DOI 10.12737/2056738. ISBN 978-5-16-018782-2 (print) ISBN 978-5-16-111682-1 (online) В учебнике рассмотрены вопросы, которые касаются языков логического программирования: особенности применения, синтаксис, функции. Приведено большое количество содержательных примеров решения задач, демонстрирующих возможности языков логического программирования. Соответствует требованиям федеральных государственных образовательных стандартов высшего образования последнего поколения. Для студентов высших учебных заведений, обучающихся по направлениям подготовки «Информационные технологии автоматизированных систем», «Программная инженерия», «Прикладная информатика, а также лиц, самостоятельно изучающих логическое программирование. УДК 510.755(075.8) ББК 32.973я73 © Петренко А.А., ISBN 978-5-16-018782-2 (print) ISBN 978-5-16-111682-1 (online) Суворов А.О., 2024
Введение Мышление разумного существа всегда основывается на использовании логики. Основой логики является умение выделять цели, подводить под них имеющиеся знания и делать необходимые предположения. Логика позволяет строить выводы из имеющихся предположений, знания позволяют судить об истинности или ложности имеющихся утверждений, а также обосновывать и проверять выводы и доказательства. Несмотря на то обстоятельство, что вычислительные машины еще очень молоды, но уже широко применяют элементы логики для научного исследования и решения задач в различных областях знаний. Компьютерное, программное или машинное решение немыслимо без точной формулировки целей исследования и получения достоверных выводов и предположений. Современные вычислительные машины создаются на идеях и принципах, разработанных еще в 40-х гг. прошлого столетия Джоном фон Нейманом, и представляют собой синтез ячеек памяти, регистров и процессора. Процессор осуществляет загрузку из памяти в регистры, производит арифметические и логические операции с тем, что содержится в регистрах, и выводит значения из регистров в память. Машина фон Неймана руководствуется введенной в ее память программой, представляющей собой некую последовательность действий, понятных машине, которые могут влиять на выбор необходимого действия в зависимости от содержимого памяти устройства. Со временем, вместе с ростом возможностей вычислительных машин, росли и проблемы их использования. Данные проблемы постепенно переходят из сферы выполнения - команд или действий в область корректного написания программ. Вначале программы были пригодны для выполнения 3
Введение вычислительной машиной действий крайне сложных для понимания обычным человеком. Если задать вопрос «Умный ли человек, который может ТОЛЬКО складывать и отправлять результат по адресу в единицу времени?», то ответ будет очевиден. Стоит также задать другой вопрос: «Умный ли человек, который может складывать миллиарды 64-разрядных чисел в единицу времени?» — ответ тоже будет очевиден. Машинный язык с его машинным принципом устройства сильно отличается от естественного стиля мышления человека. Человек не оперирует теми действиями, которые совершает вычислительная машина. По этой причине начали проводиться научные исследования по замене машинного языка языком, пригодным и удобным для восприятия человеком. Результатом этих исследований стало создание языков программирования, которые значительно упростили работу человека по написанию программы для машины, но при этом были понятны для машины. Основной формой реализации языков программирования является уровень абстракции. - Вначале это были языки с низким уровнем абстракции, такие как - Ассемблер. Затем они становились все менее похожими на язык машины, как, например, Паскаль или Си. На современном этапе абстрагирования уже даже не нужно описывать - что-то, достаточно просто указать, от какого объекта вы хотите - что-то унаследовать, и язык программирования это сделает за программиста. Несмотря на все усовершенствования, эти языки несут на себе печать фон-неймановской архитектуры с ее простыми командами и действиями, хотя современные вычислительные машины делают это в миллиарды раз быстрее. В общем смысле программа — это некая последовательность действий, понятных исполнителю. Логическое программирование сильно отличается от шаблона написания императивных программ для ЭВМ. Программа на языке логического программирования не указы4
Введение вает последовательность действий и операций для машинной архитектуры фон Неймана, она никоим образом не связана с каким-либо типом машинной архитектуры. Основная идея логического программирования сводится к тому постулату, что не человека нужно обучить «мышлению» вычислительной машины, а вычислительная машина должна выполнять инструкции в человеческой логике. При этом основная концепция логического программирования предполагает, что не нужно задавать инструкции, а вместо них необходимо описать логические постулаты, условия и некие закономерности, при соблюдении которых возможно получить решения. Данный набор логических постулатов, условий и закономерностей является аналогом императивной программы. Программа выполняется в виде логических утверждений, которые подлежат доказательству. То, что в итоге необходимо доказать, и будет целью работы программы. То есть программа пытается доказать некое утверждение на основе заданных фактов и предположений в терминах логики. Само название языка программирования «Пролог» (Prolog) происходит от сокращения слов «PROgramming in LOGic», т.е. программирование в терминах логики. Первыми эту идею подали Роберт Ковальский, Маартен ван Эмден и Ален Колмероэ в начале 70-х гг. XX в. На сегодняшний день популярностью Пролог пользуется лишь у узкого круга программистов: в отличие от императивных языков программирования, он развивался и применялся в области искусственного интеллекта. Основой Пролога является математическая логика, и его изучение лучше всего начинать именно с изучения самой логики. В основу Пролога входит декларативный подход, т.е. описание проблемы, а не порядок ее решения, как в императивном программировании. Изучая данную парадигму программирования, необходимо изменить и мышление для составления программ. Менталитет практически всех людей 5
Введение устроен так, что проще описывать и исполнять директивы, вместо осмысления и определения общей концепции задачи и ее решения. Поэтому здесь требуется определенная подготовка и необходимые навыки. Развитие вычислительной техники происходит скачкообразно. Скачок, наблюдаемый в период с конца 1980-х по конец 1990-х гг., качественный и более глубокий по своему характеру, чем все предыдущие. Классификация языков программирования представлена на рис. 01: Языки программирования Декларативные (неалгоритмические) языки Алгоритмические (процедурные) языки (Pascal, C) Языки логического программирования (Prolog) Языки функционального программирования (Lisp) Рис. 01. Классификация языков программирования Prolog — PROgramming in LOGic. Существует несколько версий Пролога: • • Turbo-Prolog; • • PDC-Prolog; • • Visual-Prolog; • • SWI-Prolog. Практически все эти языки логического программирования прекрасно подходят под решение задач со сложными структурами данных, таких как графы, деревья, сети и др. 6
Введение При этом тексты программ в разы меньше, чем у процедурноориентированных языков программирования. Примером могут послужить тексты программ нахождения кратчайшего пути во взвешенном неориентированном графе, созданные авторами данной книги. На языке Object Pascal текст программы без описания данных составил 368 строк, а на языке Пролог — всего 32 строки. В текст программ входили и интерфейсы ввода и вывода информации, примерно одинаковые по своей сути. По мнению авторов, данный учебник предназначен для студентов, обучающихся по специальностям: «Программная инженерия», «Прикладная информатика», «Информационные технологии автоматизированных систем» и др., а также для лиц, самостоятельно изучающих логическое программирование. В результате освоения материала обучающийся будет: • • знать возможности современных языков логического программирования по решению задач в различных областях знаний; основные понятия, конструкции, структуры и логические высказывания языка логического программирования; представление объекта и его свойств с помощью констант и переменных логического программирования; предикат, его синтаксис и семантику; описание отношений с помощью предикатов; виды утверждений языка Пролог: факт, правило, запрос — их синтаксис и семантику; математические методы декларативного программирования; алгоритм работы интерпретатора; сложные структуры данных в логическом программировании; программирование задач искусственного интеллекта на языках логического программирования; отличия процедурного и декларативного программирования; • • уметь проводить анализ предметной области и описывать ее на языках логического программирования; организовать данные в соответствующие структуры на языках логического программирования; анализировать программу 7
Введение с целью повышения ее эффективности; выявлять логические ошибки и устранять их; разрабатывать логические программы; реализовывать вычислительный процесс в декларативном стиле; • • владеть методами и приемами анализа и структурирования сложных программ; навыками программирования, - отладки и тестирования прототипов программно-технических комплексов задач средствами языков логического программирования; навыками разработки прикладного программного обеспечения средствами языков логического программирования; навыками обработки списковых структур в логическом программировании. 8
Глава 1 МЕТОДЫ И СИСТЕМЫ ПРОГРАММИРОВАНИЯ Наряду с элементами логического программирования в учебнике будут также приведены основные методы, которые применяются в решении задач искусственного интеллекта. Среди них операторное и процедурное программирование, программирование, управляемое данными, сопоставление с образцом, ситуационное и продукционное программирование, а также объектно-ориентированное и логическое программирование. Что касается языков логического программирования, то однозначных и устоявшихся реализаций Пролога не существует. Наибольшую популярность Пролог приобрел в Европе и Японии. Эти языки должны распознавать и понимать естественный (человеческий) язык, проводить анализ и уметь принимать самостоятельно правильные решения на основе проделанного анализа. Сейчас стало возможным применение на практике результатов лабораторных исследований искусственного интеллекта. Искусственный интеллект и технология знаний начинают играть первостепенную роль в промышленности и экономике. Для изучения интеллектуальных систем, их развития и применения во всем мире были утверждены различные национальные и международные программы исследований. Японцы представили демонстрационные образцы интеллектуальных вычислительных машин, которые пытаются решать задачи на компетентном уровне, «близком к человеческому», распознавать и понимать естественный язык и т.д. Для достижения поставленной цели в Японии был основан исследовательский центр под руководством Министерства внешней торговли и промышленности. 9
Глава 1. Методы и системы программирования В США создали совместный исследовательский центр производителей больших вычислительных машин Консорциум микроэлектроники и компьютеров (МСС) и Агентство перспективных оборонных исследовательских проектов (DARPA) при Министерстве обороны США, отвечающее за разработку новейших технологий для использования военными. 1.1. СОВМЕСТИМОСТЬ ПРОЛОГА И МАТЕМАТИЧЕСКОЙ ЛОГИКИ Человеку, не сведущему в программировании, очень тяжело рассуждать и оперировать терминами команд машины фон Неймана. Нормальному человеку, непрограммисту трудно понять, как можно выразить, например, условие посредством арифметических операций. Это в свою очередь приводит к тому, что появляется разделение на специалистов, которые решают задачу, и на специалистов, программирующих это решение, т.е. переводящих обычный язык в язык программы. В программировании, как и в логике, необходимо представлять знания в некоторой формальной форме. При этом форма представления должна быть понятна не только человеку, но и вычислительной машине. Логические рассуждения должны четко определяться в программировании и быть неотъемлемой частью программы. Логическое программирование направлено на доказательство некоего целевого утверждения, т.е. утверждается, что существуют факты и правила вывода из этих фактов, которые подтверждают наличие неких свойств из фактов. Рассмотрим пример такого утверждения. Существует некий список X, при этом упорядочивание списка, состоящего из элементов 3 — 2 — 1, приведет снова к списку Х. Для доказательства утверждения используется следующий конструктивный метод: доказательство считается успешным, если в процессе доказательства возможно найти 10