Техническая поддержка. Какая информация необходима для проведения диагностики уутэ


ПРОЛОГ – программа для хранения данных, полученных непосредственно от приборов учета или перенесенных посредством накопителей АДС90, АДС91 и их вывода в виде таблиц необходимого формата.

Программа ПРОЛОГ обеспечивает:

  • поддержку всех моделей приборов СПТ941, СПТ942, СПТ943, СПТ944, СПТ961, СПТ962, СПТ961М, СПГ741, СПГ742, СПГ761, СПГ761, СПГ762, СПГ763;
  • загрузку данных из накопителя АДС90;
  • загрузку данных из накопителя АДС91;
  • загрузку данных, полученных посредством программы НАКОПИТЕЛЬ;
  • загрузку данных из приборов учета при непосредственном подключении;
  • загрузку данных из приборов учета при соединении по телефонной линии посредством модема в ручном режиме или по расписанию;
  • загрузку данных из приборов учета при соединении через локальную/глобальную вычислительную сеть;
  • загрузку данных из приборов, находящихся в сети приборов;
  • ведение архива абонентов, узлов и данных учета;
  • получение текущих данных с приборов и вывод их на экран компьютера в режиме реального времени
  • вывод отчетов о потреблении энергоносителей на печать по шаблонам;
  • экспорт данных учета в таблицы EXCEL, текстовые документы (в форматах rtf и txt) и на веб-страницы.

Минимальные требования

Минимальные требования программы пролог логика к компьютеру:

  • Операционная система MS Windows Vista и выше.
  • При непосредственном опросе приборов требуется хотя бы один свободный COM-порт.
  • При опросе приборов по телефонной линии требуется модем.
  • При опросе приборов через Интернет требуется подключение к сети Интернет.

Требования программы пролог логика к приборам учета тепла, воды, газа и эл.энергии:

  • При работе с несколькими приборами в настроечных параметрах каждого из них необходимо установить уникальный идентификатор (номер). В противном случае при последующем копировании в компьютер данные разных приборов, имеющих одинаковые идентификаторы, будут утеряны.
  • Приборы СПТ961, СПГ761, СПГ762, СПГ763 должны быть «системными».
  • Версии приборов должны быть: для СПТ961 не ниже 27; для СПТ961М не ниже 5; для СПТ761 не ниже 11; для СПТ762 не ниже 11; для СПТ763 не ниже 12;
  • При работе с приборами СПТ961, СПТ961М, СПГ761, СПГ762, СПГ763 через порт RS232 в их настроечных параметрах следует установить скорость обмена 4800 бит/с.
  • При работе с приборами СПТ961 (мод. 961.1, 961.2) СПГ761 (мод 761.1 и 761.2), СПГ762, СПГ762 (мод 762.1 и 762.2), СПГ763, СПГ763 (мод 763.1 и 763.2) в их настроечных параметрах рекомендуется установить скорость обмена 19200 бит/с если считывание данных происходит с помощью накопителя АДС90 и 57600 бит/с если считывание происходит непосредственно с прибора или посредством модема через телефонную линию
  • Непосредственно перед считыванием данных через оптопорт необходимо выполнить его активизацию, как это описано в руководстве по эксплуатации прибора. Это требование не относится к тепловычислителям VI-го поколения СПТ941.20, СПТ944, СПТ962, у которых оптопорт всегда включен.
Программа ПРОЛОГ ЛОГИКА не имеет ограничений и распространяется БЕСПЛАТНО.

Пролог – программа чтения и хранения данных, полученных от тепловычислителей СПТ (Логика) или перенесенных посредством накопителей АДС90, АДС91 и их вывода в виде таблиц необходимого формата.

Программа Пролог Логика обеспечивает:

  • поддержку всех моделей приборов , СПТ942, СПТ961М, СПГ741, ;
  • загрузку данных из накопителя АДС90;
  • загрузку данных из накопителя ;
  • загрузку данных, полученных посредством программы ;
  • загрузку данных из приборов учета при непосредственном подключении;
  • загрузку данных из приборов учета при соединении по телефонной линии посредством модема в ручном режиме или по расписанию;
  • загрузку данных из приборов учета при соединении через локальную/глобальную вычислительную сеть;
  • загрузку данных из приборов, находящихся в сети приборов;
  • ведение архива абонентов, узлов и данных учета;
  • получение текущих данных с приборов и вывод их на экран компьютера в режиме реального времени
  • вывод отчетов о потреблении энергоносителей на печать по шаблонам;
  • экспорт данных учета в таблицы EXCEL, CSV, SQL, текстовые документы (в форматах rtf, txt, dbf) и на веб-страницы.

Минимальные требования для установки

Минимальные требования к компьютеру программы пролог:

  • Операционная система MS Windows Vista и выше.
  • При непосредственном опросе приборов требуется хотя бы один свободный COM-порт.
  • При опросе приборов по телефонной линии требуется модем.
  • При опросе приборов через Интернет требуется подключение к сети Интернет.

Требования программы пролог к приборам учета тепла, воды, газа и эл.энергии:

  • При работе с несколькими приборами в настроечных параметрах каждого из них необходимо установить уникальный идентификатор (номер). В противном случае при последующем копировании в компьютер данные разных приборов, имеющих одинаковые идентификаторы, будут утеряны.
  • Приборы СПТ961, СПГ761, СПГ762, СПГ763 должны быть «системными».
  • Версии приборов должны быть: для СПТ961 не ниже 27; для СПТ961М не ниже 5; для СПТ761 не ниже 11; для СПТ762 не ниже 11; для СПТ763 не ниже 12;
  • При работе с приборами СПТ961, СПТ961М, СПГ761, СПГ762, СПГ763 через порт RS232 в их настроечных параметрах следует установить скорость обмена 4800 бит/с.
  • При работе с приборами СПТ961 (мод. 961.1, 961.2) СПГ761 (мод 761.1 и 761.2), СПГ762, СПГ762 (мод 762.1 и 762.2), СПГ763, СПГ763 (мод 763.1 и 763.2) в их настроечных параметрах рекомендуется установить скорость обмена 19200 бит/с если считывание данных происходит с помощью накопителя АДС90 и 57600 бит/с если считывание происходит непосредственно с прибора или посредством модема через телефонную линию
  • Непосредственно перед считыванием данных через оптопорт необходимо выполнить его активизацию, как это описано в руководстве по эксплуатации прибора. Это требование не относится к тепловычислителям VI-го поколения СПТ941.20, СПТ944, СПТ962, у которых оптопорт всегда включен.
    Программа ПРОЛОГ ЛОГИКА не имеет ограничений и распространяется БЕСПЛАТНО.

Программа Пролог для чтения данных тепловычислителей не имеет ограничений и распространяется бесплатно.

1. Коммерческий или технологический учет.

2. ТУ на проектирование УУТЭ (если имеется).

3. Тип системы теплоснабжения.

4. Параметры системы теплоснабжения (Gmax; Gmin; Pmax; Pmin; Tmax; Tmin по каждому трубопроводу; диаметры трубопроводов; теплоноситель).

5. Допускаемые потери давления при установке расходомеров.

6. Место установки, условия окружающей среды.

7. Объем диспетчеризации.

закрыть

Какая информация необходима для проведения диагностики УУТЭ?

1. База настроечных параметров, полученная непосредственно из тепловычислителя посредством программ Конфигуратор или Database.

2. Архивы тепловычислителя.

3. Схема автоматизации УУТЭ.

4. Схема внешних соединений УУТЭ.

5. Копии паспортов датчиков расхода, температуры, давления.

6. ТУ на проектирование УУТЭ.

закрыть

При использовании накопителя АДС91 и адаптера АПС78 приобретенного с АДС90 не удается считать данные с СПТ943.1

Адаптер АПС78, приобретенный совместно с АДС90 не может использоваться с накопителем АДС91. На корпусе АПС78 совместимого с АДС91 имеется надпись: «для работы с АДС91»

закрыть

Не удается получить архивные данные с СПТ941.20 при помощи накопителя АДС90 и адаптера АПС78.

В связи со снятием накопителей АДС90 с производства, поддержка накопителями новых приборов НПФ ЛОГИКА, в частности, СПТ941.20 и СПТ943.1 с версиями ПО 2.0.0.3.00 и выше, не предусмотрена. Функции считывания данных с вышеперечисленных приборов полностью реализованы в новом изделии НПФ ЛОГИКА - накопителе АДС91.

закрыть

Каким образом можно организовать передачу данных в сети Интернет от тепловычислителей СПТ 943.2; СПТ 961 и корректора СПГ 763 с выходом на интерфейс Ethernet по протоколу ARP-TCP/IP?

Для организации передачи в сети Интернет данных, получаемых от приборов энергоучета в системах сбора данных, диспетчеризации и мониторинга объектов потребления и производства энергоресурсов предназначены адаптеры АДС 99, которые обеспечивают объединение всех модификаций тепловычислителей СПТ941, СПТ943, СПТ961, корректоров СПГ741, СПГ742, СПГ761, СПГ762, СПГ763 и сумматоров СПЕ542 с выходом на интерфейс Ethernet по протоколу ARP-TCP/IP.

закрыть

Каким образом можно организовать передачу данных в сети Интернет от тепловычислителей СПТ 941.10; СПТ 961.2 и корректора СПГ 742 находящихся на расстоянии 160/120 м. друг от друга по протоколу PPP-TCP/IР?

Для организации передачи в сети Интернет данных, получаемых от приборов энергоучета в системах сбора данных, диспетчеризации и мониторинга объектов потребления и производства энергоресурсов предназначен адаптер АДС 98, который обеспечивает объединение всех модификаций тепловычислителей СПТ941, СПТ943, СПТ944, СПТ961, СПТ962, корректоров СПГ741, СПГ742, СПГ761, СПГ762, СПГ763 и сумматоров СПЕ542 с выходом на интерфейс RS232 по протоколу PPP-TCP/IР.

закрыть

Возможно ли подключение тепловычислителя СПТ944 непосредственно к ПК по интерфейсу RS-232, или необходимо использовать адаптер?

Для непосредственного подключения к COM-порту компьютера одиночных приборов, например СПТ944, по интерфейсу RS-232 используется адаптер АПС77, обеспечивающий гальваническое разделение прибора и компьютера. Адаптер устанавливается в непосредственной близости от прибора. Безадаптерное подключение к COM-порту компьютера по интерфейсу RS-232 допускается только в лабораторных условиях.

Необходимость в этом может возникнуть при выполнении процедуры обновления резидентного программного обеспечения прибора, или при выполнении предварительной загрузки базы данных прибора перед установкой его на место постоянной эксплуатации. При значительном удалении компьютера от прибора (сотни метров) целесообразно устанавливать второй адаптер АПС77 в непосредственной близости от компьютера, обеспечивая его защиту от производственных помех.

закрыть

Как настроить корректор СПГ761 для возможности получения параметров теплоснабжения и архивных данных на ПК через адаптер АПС79?

Адаптер АПС79 предназначен для работы с сетью приборов и позволяет подключить компьютер по интерфейсу RS485 к сети, состоящей из приборов СПТ961, СПТ961М, СПТ962, СПГ761, СПГ762, СПГ763. Приборы в сети объединяются двухпроводной линией связи, которая на аппаратном уровне соответствует стандарту RS485, а по логической организации представляет собой шину с маркерным доступом. Конфигурация сети может быть шинной, звездообразной, древовидной.

Скорость обмена в сети - от 300 до 4800 бит в секунду. Суммарная длина всех сегментов может достигать 10 км. В сети обеспечивается информационный обмен между 30 абонентами. Адаптер является программируемым и позволяет в пределах сети по заданному списку передавать измеренные значения отдельных параметров, например, значения температуры и давления холодной воды, от одних приборов к другим. Обмен с приборами через адаптер АПС79 поддерживается программами СПСеть®, ПРОЛОГ и ОРС-сервер "ЛОГИКА".

Для подключения одиночного прибора достаточно ввести следующие настройки: Спецификация внешнего оборудования СПГ 761.2 параметр 003=1050000025. Спецификация внешнего оборудования АПС 79 параметр 003=1050001025.

закрыть

Как перенести архивные данные, считанные накопителем АДС 90 в ПК не имеющий СОМ-порта?

1. Приобрести преобразователь интерфейсов USB-RS232.

2. Подключить преобразователь интерфейсов USB-RS232 к ПК.

3. Установить драйвера для преобразователя интерфейсов USB-RS232.

4. Убедиться что преобразователь интерфейсов USB-RS232 опознан компьютером как СОМ-порт. Запомнить номер СОМ-порта.

5. Открыть программу Пролог (если программа не установлена, то установить, воспользовавшись компакт-диском или сайтом сайт). В настройках программы «Сервис-Настройки-Связь» установить номер СОМ-порта.

6. Для загрузки данных из накопителя АДС90 необходимо подключить его посредством коннектора К228 к преобразователю интерфейсов USB-RS232. По команде «Связь-Опросить АДС90» новые данные будут загружены в архив программы.

закрыть

На каком максимальном расстоянии от корректора СПГ 761.2 и тепловычислителя СПТ 941.20 устанавливаются адаптеры АДС 98 и АДС 99?

Протяженность магистрали Ethernet не должна превышать 200 м. Протяженности магистралей RS485 и М4 определяются количеством подключенных к ней абонентов, параметрами кабеля, скоростью передачи данных и составляют от 0,8 до 12 км. При локальном обмене данными в качестве ведущего абонента может выступать устройство, оснащенное портом RS232C, в этом случае, протяженность линии связи не должна превышать 100 м.

Подробные данные о протяженности магистралей приведены в документах "Магистральный протокол СПСеть. Руководство программиста" и "Магистральный протокол M4. Руководство программиста", размещенных на www.logika.spb.ru.

закрыть

Каким образом автоматизировать учет потребления электроэнергии с разбивкой по цехам и сменам?

Для автоматизированного учета (коммерческого и технического) электрической энергии и мощности на промышленных предприятиях и предприятиях энергетики предназначен Сумматоp СПЕ542. Сумматор ориентирован на работу со счетчиками электрической энергии, снабженными устройствами преобразования измеренного значения энергии в числоимпульсный сигнал (датчиками импульсов). Сумматор позволяет организовать учет потребления энергии в условиях действия двухставочных тарифов, когда измеряется не только электроэнергия, но и мощность в часы пиковых нагрузок, а также учет потребления энергии в условиях действия тарифов, дифференцированных по зонам суток (например так, как это принято на Федеральном оптовом рынке электрической энергии и мощности).

Прибор обеспечивает возможность подключения датчиков импульсов АДС68, Е440, Е440.01, Е870, МХ-1, Ж7АП1 и других. Сумматор позволяет обслуживать до 128 каналов опорных счетчиков, которые могут быть объединены в группы общим числом до 32. Шестнадцать импульсных каналов могут быть подключены непосредственно к СПЕ542, остальные – через пространственно разнесенные и соединенные с СПЕ542 по интерфейсу RS-485 адаптеры АДС84. К каждому адаптеру АДС84 может быть подключено до 16 импульсных каналов. Вместо датчиков импульсов к соответствующим входам сумматора и адаптеров АДС84 могут быть подключены датчики телесигнализации. Сумматор и каждый адаптер АДС84 могут формировать до 4 выходных двухпозиционных сигналов, предназначенных для сигнализации и управления нагрузками.

закрыть

Параметры и количество каких газожидкостных нестабильных углеводородных смесей можно контролировать и учитывать при помощи СПГ 763.2?

Корректоры СПГ 763.2 применяются в составе измерительных систем (комплексов) для учета:

  • жидкостных стабильных углеводородных газовых конденсатов, включающих пентан и более тяжелые углеводороды (С5Н12+); жидкостных однородных углеводородных смесей (продукты переработки газовых конденсатов и широких фракций легких углеводородов);
  • газожидкостных нестабильных газовых конденсатов, в том числе деэтанизированных (без СН4 и С2Н6 или при их суммарном содержании не более 1 % массы) и дебутанизированных (без СН4, С2Н6, С3Н8, С4Н10), включающих, помимо С5Н12+, легкие углеводороды до бутана включительно;
  • неуглеводородные компоненты N2, CO2, H2S, RSH, CH3OH, механические примеси и H2O, газожидкостных нестабильных (сырых) углеводородных смесей с суммарным содержанием СН4 и С2Н6 не более 3 % массы;
  • неуглеводородных компонентов N2, CO2, H2S, RSH, CH3OH, механических примесей и H2O (широкие фракции легких углеводородов);
  • газовых смесей, содержащих углеводородные компоненты до гептана включительно и неуглеводородные компоненты N2, CO2, H2S, Н2О, О2 (влажный нефтяной газ).
закрыть

Чем же он удивительный? Я знаю пару десятков языков и для меня не проблема изучить еще один новый, я просто уже не вижу необходимости.

Пролог - уникален. Это единственный язык представляющий парадигму декларативного программирования; это язык, который имеет сотни различных имплементаций, но они все равно называются Prolog, добавляя лишь префиксы и суффиксы к названию; это живой язык в котором не происходит никаких существенных изменений более 20 лет; это, наверное, единственный настолько популярный язык программирования, который не имеет применения в реальном программировании. Почему же Prolog?

Пролог - уникален по своей природе, он появился благодаря счастливому совпадению (таинственному устройству мира). Когда-то в 60-х годах очень бурно развивалась теория автоматического доказательства теорем и Робинсоном был предложен алгоритм резолюций, который позволял доказать любую верную теорему (вывести из аксиом) за конечное время (за какое не известно). Как оказалось позже, это наилучшее решение общей задачи, невозможно доказать теорему за ограниченное число операций. Простыми словами, алгоритм представляет собой обход (в общем случае бесконечного) графа в ширину, естественно, что предсказуемость работы алгоритма практически равно 0, соответственно для Языка Программирования - это абсолютно не подходит. И в этот момент Кальмэроу нашел блестящее сужение задачи, благодаря которому доказательство некоторых теорем выглядело как процедурное исполнение программы. Стоит отметить, что класс доказуемых теорем достаточно широк и очень хорошо применим для класса программируемых задач. Вот так в 1972 появился Prolog.

В этой статье я попытаюсь рассказать о Prolog как инструменте решения общих логических задач. Этот топик будет интересен тем, кто уже владеет синтаксисом Prolog и хочет понять его изнутри, а также тем, кто абсолютно не владеет синтаксисом языка, но хочет понять его «изюминку» не тратя лишнее время на изучение синтаксических конструкций.


Главной чертой Prolog является то, что его можно легко читать, но очень тяжело писать, что принципиально отличается от всех mainstream языков, которые так и говорят писать стало еще легче еще один шаг и можно будет писать на планшете, перетягивая рабочие модули как друзей в Google+ , от этого все мы знаем очень сильно страдает само качество кода. Вроде бы каждая строчка понятна, но как система работает за гранью понимания даже для разработчиков, как говорится наиндусили. Мне кажется во всех книгах по обучению Prolog, делают одну и ту же ошибку, начиная рассказ о фактах, отношениях, запросах и у человека складывается отношение к языку как к Экспертной Системе или Базе Данных. Гораздо важнее научится правильно читать программы и почитать так с десяток:)

Как правильно читать программы на прологе

Читать программы очень просто, так как в языке очень мало специальных символов и ключевых слов и они легко переводятся на естественный язык. Главная ошибка программиста, что он хочет сразу представить как программа работает, а не прочитать, что программа описывает, поэтому мне кажется обучить незатуманенный мозг обычного человека, гораздо проще чем програмиста.
Понятия
В языке существует 2 понятия предикаты (условия) и объекты (они же переменные и термы). Предикаты выражают некоторое условие, например объект зеленый или число простое, естественно что условия имеют входные параметры. Например green_object(Object) , prime_number(Number) . Сколько в предикате параметров, такова и арность предиката. Объектами - являются термы, константы и переменные. Константы - это числа и строки, переменные - выражают неизвестный объект, возможно искомый, и обозначаются как строчки с большой буквы. Оставим пока термы и рассмотрим простейшую программу.
Программа
Программа - это набор правил, вида Если условие1 и условие2 и… то верно условие. Формально эти правила объединяются через И, но противоречие получить невозможно, так как в Прологе отсутствует логическое отрицание, а в связке То может присутствовать только один предикат (условие).

A:- B_1, B_2. % правило читается как: Если B_1 и B_2, то A
нечетное_простое(Число) :- простое(Число), нечетное(Число).
% Если "Число" - простое и нечетное, то "Число" - нечетное_простое

Как видно имя переменной имеет область видимости - это правило. Математически верно, правило звучит: для любой переменной - «Число», если оно простое и нечетное, то оно простое_нечетное. Аналогично, можно перефразировать так: Если существует «Число», что оно нечетное и простое, то оно нечетно_простое. Поэтому имя переменной очень важно! Если в левой части (до:-) заменить Число на Число2, то правило поменяет смысл: Для любого Число2 и Число, если Число - простое и нечетное, то Число2 - простое нечетное. Получается все числа простые_нечетные! Это самая распространенная ошибка в Прологе.

A:- B_1, B_2. % правило читается как: Если B_1 и B_2, то A нечетное_простое(Число) :- простое(Число), нечетное(Число). % Если "Число" - простое и нечетное, то "Число" - нечетное_простое

Пример - совершенные числа
совершенное_число(Ч) :- число(Ч), сумма_делителей_без_числа(Ч, СуммаДелителей), равно(СуммаДелителей, Ч). совершенное_число(1). равно(Объект, Объект). сумма_делителей_без_числа(1, 1). сумма_делителей_без_числа(Число, Сумма) :- число_предыдущее(Число, Предыдущее), сумма_делителей_числа_до_числа(Число, Сумма, Предыдущее). сумма_делителей_числа_до_числа(Число, 1, 1). сумма_делителей_числа_до_числа(Число, Сумма, Делитель) :- делится_на(Число, Делитель), число_предыдущее(Делитель, Предыдущее), сумма_делителей_числа_до_числа(Число, СуммаПред, Предыдущее), сложить(СуммаПред, Делитель, Сумма). сумма_делителей_числа_до_числа(Число, Сумма, Делитель) :- не_делится_на(Число, Делитель), число_предыдущее(Делитель, Предыдущее), сумма_делителей_числа_до_числа(Число, Сумма, Предыдущее).

Для начала формально прочитаем, что означают правила:

  1. Если «Ч» - число и для «Ч» и «СуммаДелителей» выполняется условие сумма_делителей_без_числа, проще говоря СуммаДелителей есть сумма делителей числа «Ч», и «Ч» равно «СуммаДелителей», то «Ч» совершенное число.
  2. 1 - совершенное число. Правила могут не иметь условий, в этом случае они называются фактами.
  3. Всякий объект «О» равен «О». В принципе существует, стандартный предикат "=", но можно вполне заменить на свой.
  4. Факт сумма_делителей_без_числа 1 равна 1.
  5. Если сумма делителей «Число» до предыдущего числа «Число» равна «Сумма», то это и есть сумма_делителей_без_числа. Таким образом выражается, сумма делителей X меньше либо равных Y, так как X делится на X, поэтому берем Y = X - 1.
  6. Далее 3 предиката определяют сумму делителей число меньше либо равных Y (Делитель), 1-й случай Y равное 1, 2-й случай Число делится на Y, тогда сумма_делителей(X, Y) = сумма_делителей(X, Y-1) + Y, и 3-й случай Число не делится на Y, тогда сумма_делителей(X, Y) = сумма_делителей(X, Y-1).
Программа - как набор определений
Существует второй способ прочтения данных правил, менее математический и более естественный, основанный на «определениях». Можно заметить, что в Прологе все правила слева (в части то) содержат только одно условие, что по сути является «определением» это условия.
Например, 1-ое правило определение совершенных чисел. «Ч» совершенное число, когда «Ч» число и сумма делителей «Ч» равна «Ч». Одинаковые предикаты группируются по имени объединяясь условием «или». То есть к определению можно добавить: «Ч» совершенное число, когда.., или когда «Ч» - это 1.

Данный способ чтения широко применяется, так как позволяет объединять предикаты в однородные группы и помогает понять, в каком же порядке интерпретатор раскручивает предикаты, для того, чтобы
проверить истинность некоторого утверждения. Например, очевидно, что если предикат не имеет ни одного определения, то доказать истинность утверждения с ним невозможно. В примере № 1 не имеет определения предикат «делится_на».

Интересный факт, что в Прологе нет ни циклов, ни присвоения переменных, ни объявления типов, а если вспомнить еще про термы и отсечение, то язык становится алгоритмически полным.

Термы
Термы имеют рекурсивное определение, как именованная совокупность объектов. Терм = "имя"(объект, объект, ...), пример person("Name", "Surname"), "+"(1, 2), person(address("Некоторый адрес"), surname("Фамилия"), phone("Телефон")) . Если рассматривать терм, как математическое понятие, то терм является функцией, а точнее функтором, то есть "+"(1, 2) - означает, что существует такой объект, который равен 1+2. Это абсолютно не означает, что 1+2 = 3, в Прологе - это выражение неистинно, точно так же как и в группе остатков по модулю 2, там 3 вообще не существует. Опять же с математической точки зрения Переменные связываются словом Для Всех, а если в утверждении необходимо слово существует то, для этой цели применяется терм (функтор). Для любого числа существует число-факториал:- factorial(X, fact(X)).

С точки зрения программирования терм можно объяснить гораздо проще: терм - это объект с набором атрибутов, атрибуты могут быть другими термами или константами или переменными (то есть не определены). Главное отличие, все объекты в Prolog immutable, то есть менять атрибуты в них нельзя, зато есть специальное состояние - переменная.

Пример - целочисленная арифметика
нат(0). нат(число(Число)) :- нат(Число). плюс(0, Число, Число). плюс(число(Ч1), Ч2, число(Рез)) :- плюс(Ч1, Ч2, Рез). умножить(0, Число, 0). умножить(число(Ч1), Ч2, Рез2) :- умножить(Ч1, Ч2, Рез), плюс(Рез, Ч2, Рез2).
  1. Определение свойства нат (натуральное число). 0 - натуральное число, если Число натуральное, то существует объект число(Число), которое тоже является натуральным. Математически терм «число» выражает функцию +1, с точки зрения программирования «число» рекурсивная структура данных, вот ее элементы: число(0), число(число(0)), число(число(число(0))).
  2. Отношение плюс - 0 + Число = Число. Если Ч1 + Ч2 = Рез, то (Ч1+1) + Ч2 = (Рез+1).
  3. Отношение умножить - 0 * Число = 0. Если Ч1 * Ч2 = Рез и Рез + Ч2 = Рез2, то (Ч1+1) * Ч2 = Рез2.
Очевидно эти утверждения верны для обычной арифметики, но почему тогда мы не включили такие же очевидные как Число + 0 = Число. Ответ простой: избыточность очень плохо для любого определения. Да, это может помогать вычислениям, своеобразная преждевременная оптимизация, но побочными эффектами могут быть противоречия в определениях, неоднозначный вывод утверждения, зацикливание интерпретатора.

Как Prolog понимает предикаты и как доказывает утверждения

Конечно чтение программ, помогает ощутить стиль Пролог, но не делает понятным для чего и как данные определения могут использоваться. Полноценной программой, примеры приведенные выше, назвать нельзя так как не хватает входной точки. Входной точкой в Пролог является запрос, аналог запроса к базе данных SQL или аналог вызова главной функции в функциональном программировании. Примеры запросов: нат(Число) - найти натуральное число, плюс(0, 0, Результат) - найти результат сложения 0 и 0 в переменной Результат, нат(0) - проверить является ли 0 натуральным числом и др.

Конечно, результаты запросов не трудно предсказать из логических соображений, но крайне важно понять, как программа их получила. Все-таки Пролог не черный ящик, а язык программирования, и в отличие от базы данных, где строится SQL-план и запрос может выполняться по-разному на разных Базах данных, Пролог имеет вполне определенный порядок выполнения. Дело в том, что в Базе данных мы вполне знаем какой ответ мы хотим получить исходя из данных в таблице, к сожалению глядя на Пролог программы достаточно сложно сказать, какие утверждения логически выводимы, поэтому понять как работает Пролог интерпретатор гораздо проще.

Рассмотрим на примере запроса плюс(0, 0, Результат) :
1. Находим совпадение (своеобразный pattern-matching, резолюция) данного запроса с левой частью одно из правил. Для данного запроса плюс(0, Число, Число). Соотнесем поочередно все аргументы запроса с правилом и получим: 0 = 0, 0 = Число, Результат = Число. В этих уравнениях участвуют 2 переменные (Число и Результат), решив их мы получаем, что Число = Результат = 0. Так как у данного правила нет условий, мы получили ответ на заданный вопрос. Ответ: да и Результат = 0.

Запрос нат(Число) :
1. Находим 1-е совпадение с правилом, правило нат(0), решая уравнения по соответствию, проще говоря находя резолюцию, мы получаем Число = 0. Ответ: да и Число = 0.

Запрос плюс(Результат, 0, число(0)) :
1. Находим резолюцию с правилом плюс(0, Число, Число): Результат = 0, 0 = Число, число(0) = Число, но (!) Число = 0 = число(0) - не возможно так как 0 совпадает число(0). Следовательно ищем резолюцию со следующим правилом.
2. Находим резолюцию с правилом плюс(число(Ч1), Ч2, число(Рез)), получаем число(Ч1) = Результат, Ч2 = 0, число(Рез) = число(0), отсюда Рез = 0. У этого правила, есть условия которые мы должны проверить, учитывая результаты резолюции (значения переменных), плюс(Ч1, Ч2, Рез) -> плюс(Ч1, 0, 0). Запоминаем значение переменных в стеке и формируем новый запрос плюс(Ч1, 0, 0)
3*. Решая запрос плюс(Ч1, 0, 0) находим резолюцию с плюс(0, Число, Число) и получаем Ч1 = 0 и Число = 0.
4. Возвращаемся по стеку к предыдущим переменным Результат = число(Ч1) = число(0). Ответ найден число(0). Соответственно сейчас пролог машина решила уравнение X + 0 = 1.

Грамотное составление правил на языке Пролог, очень сложная штука, но если их составить компактно, то можно получать не только прямые ответы и решения, но и обратные.

Пример запроса плюс(Число, Число, Число) : ответ да, Число = 0.

Пример запроса плюс(0, 0, 0) : ответ нет, при первой же попытке все резолюции не выполняются.

Пример запроса плюс(Число, Число, число(Число)) : ответ да, Число = 1. Решение уравнения X + X = X + 1.

Попробуйте провести вывод для умножить(Число, число(0), число(0)), для этого потребуется 2 раза заносить в стек переменные и вычислять новый запрос. Суть Пролог машины такова, что вы можете отказаться от 1-го результата, тогда Пролог вернется к предыдущему состоянию и продолжит вычисление. Например запрос нат(Число) , сначала применит 1-е правило и выдаст 0, а затем применит 2-е правило + 1-е правило и выдаст число(0), можно повторить и получить бесконечную последовательность всех натуральных чисел. Другой пример, запрос плюс(Число, число(0), Число2) , будет выдавать последовательность всех пар решения уравнения X + 1 = Y.

Заключение

К сожалению, разумный размер топика, не дал мне подобраться к главной теме, а именно к решению сложных логических задач на языке Пролог, не обладая стратегией их решения. Большие куски кода на Прологе могут отпугнуть не только начинающих, но даже опытных программистов. Цель данной статьи показать, что программы на Прологе могут простым образом читаться на естественном языке , а также исполняться простейшим интерпретатором .
Главная особенность Пролога - это не черный ящик и не библиотека, который решает сложные логические задачи, в Mathematica можно ввести алгебраическое уравнение и она выдаст решение, но последовательность выполняемых шагов - неизвестна. Пролог не может решать общие логические задачи (у него отсутствует логическое «или» и «отрицание»), иначе бы его вывод был недетерминированный как линейной резолюции. Пролог - это золотая середина, между простым интерпретатором и машиной для доказательства теорем, сдвиг в любую сторон приводит к потери одного из свойств.

В следующей статье я бы хотел рассказать, как решаются задачи сортировки, о последовательности переливаний, Miss Manners и другие известные логические задачи. Для тех, кто почувствовал себя неудовлеторенным хочу предложить следующую задачу (решившему первым приз ):
Написать предикат , который бы генерировал, бесконечную последовательность натуральных чисел, начиная с 3. Это должны быть стандартные числа в Прологе, операции над которыми выполняются при помощи предиката is: X is 3 + 1 => X=4.







2024 © gtavrl.ru.