Каким требованиям должна соответствовать компьютерная функция, чтобы считаться "монотонной"?
Каким требованиям должна соответствовать компьютерная функция / процедура / предикат, чтобы считаться "монотонной"?
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
пример предиката, который нарушает монотонность!