Каким требованиям должна соответствовать компьютерная функция, чтобы считаться "монотонной"?

Каким требованиям должна соответствовать компьютерная функция / процедура / предикат, чтобы считаться "монотонной"?

Let A be some thing ,
Let B be some thing ,
Let R be a monotonic relationship between A and B ,
Let R_ be a non-monotonic relationship between A and B ,
Let R become false if R_ is true ,
Let R_ become true if R is false ,
Let C be a constraint in consideration of R ,
Let C become false if R_ is true ,
Let D be the collection of constraints C (upon relationship R) .

**What is D ?**

Я просмотрел некоторую литературу, например, статью в Википедии " Монотонная функция". Меня больше всего интересует практический набор критериев, которые я могу применять, когда прагматично связан с компьютерным программированием. Какими советами и рекомендациями я должен следовать при создании и проектировании своих функций, чтобы они были более "монотонными"?

1 ответ

Решение

В логическом программировании, а также в логике классификация "монотонный" почти всегда относится к монотонности реализации.

Это фундаментальное свойство встречается, например, в классической логике первого порядка: когда вы можете вывести следствие из набора предложений, вы также можете вывести следствие, расширив набор предложений. И наоборот, удаление пункта не влечет за собой последствий, которые ранее не имели места.

В чистом подмножестве Пролога это свойство также имеет место с декларативной точки зрения. Поэтому мы иногда называем это чисто монотонным подмножеством Пролога, поскольку примеси не полностью совпадают с конструкциями, которые разрушают монотонность.

Монотонность реализации - это основа, а иногда и необходимое условие для нескольких подходов, основанных на логических программах, особенно декларативная отладка.

Обратите внимание, что у Пролога есть несколько языковых конструкций, которые могут вообще препятствовать таким рассуждениям. Рассмотрим, например, следующую программу Prolog:

е (а).
е (б).
F (C).

И следующий запрос:

? - setof (., f (X), [_, _]).
ложный.

Теперь я удаляю один из фактов из программы, который обозначен зачеркнутым текстом:

f (a): - неверно.
е (б).
F (C).

Если бы программы Prolog были монотонными, то каждый запрос, который ранее был неудачным, теперь определенно потерпел бы неудачу, поскольку я удалил что-то, что было раньше.

Однако теперь у нас есть:

? - setof (X, f (X), [_, _]).
правда.

Так, setof/3 пример предиката, который нарушает монотонность!

Другие вопросы по тегам