1. Логическая программа квалификации представляет собой наиболее целесообразную последовательность действий юриста, производящего выбор уголовно-правовой нормы из числа смежных норм, предусматривающих некоторые признаки данного преступления.
С логической точки зрения такая программа есть алгоритм, подобный тому алгоритму, который был рассмотрен в предыдущей главе применительно к разграничению преступлений. Собственно говоря, программа квалификации есть та же программа разграничения смежных преступлений, только дополненная несколькими признаками составов, которые не имеют значения для разграничения, но необходимы для наступления ответственности (например, вменяемость). В программе квалификации акцент делается на позитивном установлении всех признаков, в то время как разграничение в основном предполагает «негативную работу»: отбрасывание признаков, не свойственных данному виду преступлений.
В качестве простейшей программы квалификации может быть использована любая схема разграничения преступлений из числа приводившихся выше. Вернемся в этой связи, например, к программе разграничения составов преступлений против социалистической собственности (рис. 7 на стр. 167).
Пролог — попытка объяснить без программирования
Если использовать эту программу для анализа не признаков составов, а фактических обстоятельств конкретного дела, то она автоматически превращается в программу квалификации. Так, установив по материалам дела, что виновным причинен материальный ущерб государству или общественной организации, мы, двигаясь вниз по схеме, последовательно выясняем все сфор-
мулированныё в ней вопросы и переходим к точному выводу о том, какому же составу преступления соответствует содеянное.
Логическая программа квалификации может быть применена на том этапе поиска нормы, когда нам известна группа предполагаемых смежных составов преступлений, или, что то же самое, известен общий для всех них признак, с которого начинается программа (исходная точка «дерева»).
Поэтому чтобы выяснить, какая из многочисленных групп составов должна быть проверена и, следовательно, какая логическая схема должна быть применена, неизбежно должны быть пройдены предварительные этапы поиска нормы, описанные в предыдущем параграфе.
Естественно, что использование логической программы квалификации предполагает, что уже заранее имеются такие разработанные программы применительно ко всем основным группам смежных преступлений. Из них и может сделать выбор юрист.
В настоящее время, как известно, это условие еще не обеспечено. В литературе делаются только первые попытки создания программ разграничения и квалификации преступлений. Разработка научно обоснованных алгоритмов (программ) квалификации, которые могли бы широко использоваться как в учебной, так и в практической работе, — одна из задач науки уголовного права.
2. Полезность логических программ квалификации преступлений вытекает из того, что они указывают наиболее эффективную последовательность действий следователя, прокурора или судьи при квалификации преступлений, обеспечивая проверку всех признаков смежных составов.
Введение в программирование на языке Prolog. Решение варианта задачи.
Как справедливо отмечал П. Е. Недбайло, квалификация—«это вовсе не простая деятельность, требующая лишь хорошей способности наблюдения. Нет, это сложная юридическая операция. требующая надлежащей подготовки и соблюдения правил ее проведения»1. Использование программы квалификации и означает
1 П. Е. Недбайло, Применение советских правовых норм, стр. 252.
выполнение таких четких правил. Ясно осмыслив наиболее оптимальный логический ход рассуждений, юрист выполняет процесс квалификации сознательно, с глубоким пониманием дела, так же как мы сознательно решаем арифметическую задачу, применяя правила арифметики.
Большая Энциклопедия Нефти и Газа
Логическая программа состоит из предложений, выражающих знания о той задаче, для решения которой программа предназначается. Для формулировки этих знаний используются два основных понятия: наличие дискретных объектов, которые здесь называются индивидуумами, и наличие отношений между ними. Индивидуумы, рассматриваемые в контексте каждой конкретной задачи, образуют все вместе проблемную область этой задачи. [2]
Логическая программа начинает исполняться после того, как она подается на вход логическому интерпретатору. Интерпретатор представляет собой программу, способную строить резолютивные выводы, как правило, методом сверху вниз. Получив входную логическую программу, он предпринимает обычные шаги, необходимые для исполнения программы в режиме интерпретации: так, он осуществляет синтаксический контроль входных утверждений; хранит их в центральной памяти в соответствующей упрощенной, компактной и доступной форме; переводит входное целевое утверждение во внутреннее представление и затем начинает процесс построения вывода путем последовательного применения правила резолюции к текущему целевому утверждению и некоторой родительской процедуре, выбираемой из хранящейся в памяти версии входной программы. Если интерпретатору удается вывести пустое отрицание П, означающее, что решение получено, то он выдает какое-либо сообщение об этом вместе с найденными значениями целевых переменных. [3]
Логические программы были впервые исполнены на компьютере в 1972 г. С тех пор было затрачено много усилий на разработку реализаций логики как языка программирования в поисках все большей их эффективности и практичности. В самом деле, темпы, с которыми развиваются сейчас новые системы с тем, чтобы сразу же обслужить возникающие потребности постоянно растущего сообщества логических программистов, а также противостоять еще не ясным, но принимающим угрожающие размеры требованиям следующего поколения архитектур ЭВМ, сводят на нет всякую попытку предложить какие-либо устойчивые принципы методологии реализации. [4]
Неформально логическая программа описывает множество объектов, множество функций и отношений на этих объектах. Строится логическая программа как набор утверждений об объектах, функциях и отношениях. [5]
Логическая программа SYSGEN является одной программой, а физически состоит из шести модулей: SG1ND, SG1OD, SG2, SG3, SG4 и MSP. Это деление сделано для того, чтобы позволить программе работать в разделе объемом 3 Кслова. [6]
Слияние логических программ и баз данных происходит в соответствии с общей тенденцией в информатике — совместное исследование различных областей с целью генерации новых идей и получения материального выигрыша за счет использования общих концепций. [7]
Исполнение логической программы удобно описывать на основе введенных во второй главе механизмов входа в процедуру и выхода из процедуры. [8]
В логических программах последовательность выполнения заданий устанавливается просто с помощью записи вызовов в определенном текстуальном порядке. [9]
Абстрактная спецификация логических программ имеет ясную семантику, заключающуюся в резолюционной системе опровержения. Ван Эмден и Ковальский показали, что наименьшей интерпретацией, на которой логическая программа истинна, является интерпретация самой программы. Цена, заплаченная практическими языками логического программирования ( такими, как язык Пролог) за управление в поисковом пространстве, заключается в том, что программы могут вычислять только подмножество своих ассоциированных интерпретаций. [10]
Обычно интерпретатор логических программ начинает свою работу с целевого утверждения, например, такого, как — Р ( х ] R ( y), состоящего из трех подцелей Р ( х), Q ( x) и R ( y и пытается с помощью принципа резолюции вывести пустой дизъюнкт. Для этого он ищет подходящий дизъюнкт, который разрешает подцель, скажем, Р ( х) и формирует новое целевое утверждение. В образующемся дереве вывода возникают следующие виды параллелизма. [11]
Конкретному применению логической программы соответствует понятие запроса ( цели) — например, каково значение функции, заданной логической программой, приданном значении аргумента. Вычисление ответа на запрос соответствует доказательству су-шествования такого объекта. Правила, по которым проводятся вычисления, образуют процедурную — операционную — семантику логической программы. [12]
Декларативный смысл логической программы определяет истинность Р вне зависимости от порядка обработки условий Q и R, так как все условия соединены логической операцией это свойство называется частичной правильностью программы. Во-вторых, каждое решение, приписываемое спецификацией целевому утверждению, должно быть вычисляемым с помощью программы; это свойство называется полнотой программы. [15]
Источник: www.ngpedia.ru
Логическое программирование (стр. 1 из 5)
Почти все современные компьютеры основаны на ранних, разработанных в 40-х годах идеях фон Неймана и его коллег. Машина фон Неймана содержит большую память и процессор, снабженный локальной памятью, ячейки которой называются регистрами. Процессор может загружать данные из памяти в регистры, выполнять арифметические и логические операции над содержимым регистров и отсылать значения регистров в память. Программа машины фон Неймана представляет собой последовательность команд выполнения перечисленных операций вместе с дополнительным множеством команд управления, влияющих на выбор очередной команды. Хотя компьютеры предназначены для использования людьми, возникающие при их создании трудности были столь значительны, что язык описания проблемы и инструкций для их решения на компьютере разрабатывался применительно к инженерным решениям, заложенным в конструкцию компьютера.
По мере преодоления технических проблем построения компьютеров накапливались проблемы, связанные с их использованием. Трудности сместились из области выполнения программ компьютера в область создания программ для компьютера. Начались поиски языков программирования, пригодных для человека.
Начиная с языка, воспринимаемого компьютером (машинного языка), стали появляться более удобные формализмы и системы обозначений. И хотя степень абстракции языков возрастала, начиная с языка ассемблера и далее к Фортрану, Алголу, Паскалю и Аде, все они несут печать машины с архитектурой фон Неймана. Характерные особенности программирования на компьютерах фон Неймана приводят к разделению труда: есть люди, которые думают, как решить задачу, и разрабатывают соответствующие методы, а есть люди-кодировщики, которые пишут тексты программ, т.е. выполняют прозаическую и утомительную работу по переводу инструкций разработчиков в команды, воспринимаемые компьютером.
И в логике, и в программировании требуется явное выражение знаний и методов в некотором подходящем формализме. Явная формулировка каких-либо сведений является утомительной работой. Однако формализация в логике часто является интеллектуально благодарной работой, поскольку при этом приходит большее понимание задачи. В отличие от этого формализация задачи и метода решения в виде набора инструкций машины фон Неймана редко приводит к подобному полезному эффекту.
Истоки логики связаны с исследованием научного мышления. Логика представляет точный язык для явного выражения целей, знаний и предположений. Логика даёт основание, позволяющее выводить следствия из исходных положений. Логика позволяет, исходя из знания об истинности или ложности некоторых утверждений, сделать заключение об истинности или ложности других утверждений. Логика позволяет обосновывать непротиворечивость утверждений и проверять истинность приведенных доводов.
Компьютерам ещё далеко до достижения цели – стать равным партнёром человека в его интеллектуальной деятельности. Однако, с исторической точки зрения использование логики в качестве подходящей ступени на этом длинном пути является естественным и плодотворным, поскольку именно логика сопровождает процесс мышления человека с момента зарождения интеллекта.
Конечно, логика давно используется и при проектировании компьютеров, и при анализе компьютерных программ. Однако непосредственное использование логики в качестве языка программирования, называемого логическим программированием, возникло сравнительно недавно.
Логическое программирование, так же как и родственное ему направление – функциональное программирование, радикально отклоняется от основного пути развития языков программирования. Логическое программирование строится не с помощью некоторой последовательности абстракций и преобразований, отталкивающейся от машинной архитектуры фон Неймана и присущего ей набора операций, а на основе абстрактной модели, которая никак не связана с каким-то типом машинной модели.
Логическое программирование базируется на убеждении, что не человека следует обучать мышлению в терминах операций компьютера (на некотором историческом этапе определённые учёные и инженеры считали подобный путь простым и эффективным), а компьютер должен выполнять инструкции, свойственные человеку. В своём предельном и чистом виде логическое программирование предполагает, что сами инструкции даже не задаются, а вместо этого явно, в виде логических аксиом, формулируются сведения о задаче и предположения, достаточные для её решения.
Такое множество аксиом является альтернативой обычной программе. Подобная программа может выполняться при постановке задачи, формализованной в виде логического утверждения, подлежащего доказательству. Такое утверждение называется целевым утверждением. Выполнение программы состоит в попытке решить задачу, т.е. доказать целевое утверждение, используя предположения, заданные в логической программе.
Успехи в технологии реализации также в значительной мере способствовали представлению логики как практической формальной системы программирования. Первый экспериментальный интерпретатор был реализован Русселом и Колмероэ и другими в университете Экс – Марсель в 1972 году. Ему было дано имя Пролог (“программирование на языке логики” – PROgramming in LOGic), и он оказал сильное влияние на разработку последующих систем.
Термины “логическое программирование” и “программирование на языке Пролог” часто употребляются как равнозначные, однако подразумеваемая стратегия управления в Прологе отнюдь не является единственной стратегией, имеющейся для исполнения логических программ.
Несмотря на обилие теоретических работ, и волнующих идей, концепция логического программирования казалась нереалистичной. В этот период в результате исследования, проведённого в США, были обнаружены серьёзные недостатки “языков искусственного интеллекта следующего поколения”. Основные претензии к таким языкам программирования заключались в следующем: они были неэффективны и очень трудны в реализации.
В такой атмосфере появление компилятора с Пролога-10 стало почти фантастическим явлением. Компилятор был почти полностью написан на Прологе, что наводило на мысль о том, что сила логического программирования может принести выигрыш и в классических программистских задачах, а не только в изощрённых проблемах искусственного интеллекта.
Может быть, позже логическое программирование и покинуло бы задворки программистских исследований, если бы не японский проект пятого поколения. Именно с этого момента произошел переход Пролога от юности к зрелости.
Зрелость языка означает то, что он больше не является доопределяемой и уточняемой научной концепцией, а становится реальным объектом.
Взаимосвязь логического программирования и языка Пролог напоминает взаимосвязь лямбда-исчисления и языка Лисп. Оба этих языка являются конкретной реализацией абстрактных вычислительных моделей. Логические программы, исполняемые с помощью вычислительной модели Пролога, называются программами на чистом Прологе.
Чистый Пролог представляет собой приближённую реализацию вычислительной модели логического программирования на последовательной машине. Конечно, данная реализация не является единственно возможной. Она является, однако, одной из наилучших с практической точки зрения – совмещения свойств абстрактного интерпретатора с возможностью эффективного выполнения.
При построении на основе абстрактного интерпретатора некоторого интерпретатора для конкретного языка программирования необходимо принять два решения. Во-первых, следует ограничить произвол в выборе редуцируемой цели в резольвенте, т.е. уточнить метод расписания. Во-вторых, нужно реализовать недетерминированный выбор предложения программы, используемого в редукции.
Источник: smekni.com