В математической логике логики с фиксированной точкой являются расширениями классической предикатной логики, которые были введены для выражения рекурсии. Их развитие было мотивировано теорией описательной сложности и их связью с языками запросов к базам данных , в частности с Datalog .
Логика с наименьшей фиксированной точкой была впервые систематически изучена Яннисом Н. Мошовакисом в 1974 году [1] и была представлена компьютерным специалистам в 1979 году, когда Альфред Ахо и Джеффри Ульман предложили логику с фиксированной точкой в качестве выразительного языка запросов к базам данных. [2]
Для реляционной сигнатуры X FO[PFP]( X ) — это набор формул, образованных из X с использованием связок и предикатов первого порядка , переменных второго порядка , а также частичного оператора фиксированной точки, используемого для образования формул вида , где — переменная второго порядка, кортеж переменных первого порядка, кортеж термов, а длины и совпадают с арностью .
Пусть k — целое число, — векторы из k переменных, P — переменная второго порядка арности k , и пусть φ — функция FO(PFP,X), использующая x и P в качестве переменных. Мы можем итеративно определить так, что и (имея в виду φ с заменой переменной второго порядка P ). Тогда либо существует неподвижная точка, либо список s является циклическим. [3]
определяется как значение неподвижной точки на y , если есть неподвижная точка, в противном случае как false. [4] Поскольку P s являются свойствами арности k , существует не более значений для s, поэтому с помощью счетчика полиномиального пространства мы можем проверить, есть ли цикл или нет. [5]
Было доказано, что на упорядоченных конечных структурах свойство выразимо в FO(PFP, X ) тогда и только тогда, когда оно лежит в PSPACE . [6]
Поскольку итерированные предикаты, участвующие в вычислении частичной фиксированной точки, в общем случае не являются монотонными, фиксированная точка может существовать не всегда. FO(LFP,X), наименьшая логика с фиксированной точкой , представляет собой набор формул в FO(PFP,X), где частичная фиксированная точка берется только по таким формулам φ , которые содержат только положительные вхождения P (то есть вхождения, которым предшествует четное число отрицаний). Это гарантирует монотонность конструкции с фиксированной точкой (то есть, если переменная второго порядка равна P , то всегда подразумевает ).
Из-за монотонности мы добавляем только векторы в таблицу истинности P , и поскольку существуют только возможные векторы, мы всегда найдем неподвижную точку перед итерациями. Теорема Иммермана-Варди, показанная независимо Иммерманом [7] и Варди [8] , показывает, что FO(LFP, X ) характеризует P на всех упорядоченных структурах.
Выразительность логики с наименьшей фиксированной точкой в точности совпадает с выразительностью языка запросов к базе данных Datalog , показывая, что на упорядоченных структурах Datalog может выражать именно те запросы, которые могут быть выполнены за полиномиальное время. [9]
Другой способ обеспечить монотонность конструкции с фиксированной точкой — добавлять новые кортежи только на каждом этапе итерации, не удаляя кортежи, для которых больше не выполняется. Формально мы определяем как , где .
Эта инфляционная фиксированная точка согласуется с наименее фиксированной точкой, где последняя определена. Хотя на первый взгляд кажется, что инфляционная логика фиксированной точки должна быть более выразительной, чем логика наименьшей фиксированной точки, поскольку она поддерживает более широкий диапазон аргументов фиксированной точки, на самом деле, каждая FO[IFP]( X )-формула эквивалентна FO[LFP]( X )-формуле. [10]
В то время как все операторы с фиксированной точкой, введенные до сих пор, итерировали только по определению одного предиката, многие компьютерные программы более естественно рассматривать как итерирующие по нескольким предикатам одновременно. Либо увеличивая арность операторов с фиксированной точкой, либо вкладывая их, каждый одновременный наименьший, инфляционный или частичный оператор с фиксированной точкой может быть фактически выражен с использованием соответствующих конструкций с одной итерацией, обсуждавшихся выше. [11]
Вместо того чтобы допускать индукцию по произвольным предикатам, логика транзитивного замыкания допускает непосредственное выражение только транзитивных замыканий .
FO[TC]( X ) — это множество формул, образованных из X с использованием связок и предикатов первого порядка, переменных второго порядка , а также оператора транзитивного замыкания, используемого для образования формул вида , где и — кортежи попарно различных переменных первого порядка, а кортежи термов и длины , и совпадают.
TC определяется следующим образом: Пусть k — положительное целое число и — векторы из k переменных. Тогда истинно, если существуют n векторов переменных, таких что , и для всех истинно . Здесь φ — формула, записанная в FO(TC), и означает, что переменные u и v заменяются на x и y .
Над упорядоченными структурами FO[TC] характеризует класс сложности NL . [12] Эта характеристика является важнейшей частью доказательства Иммермана того, что NL замкнуто относительно дополнения (NL = co-NL). [13]
FO[DTC]( X ) определяется как FO(TC,X), где транзитивный оператор замыкания является детерминированным. Это означает, что когда мы применяем , мы знаем, что для всех u существует не более одного v такого, что .
Можно предположить, что это синтаксический сахар для where .
Над упорядоченными структурами FO[DTC ] характеризует класс сложности L. [12]
Операции с фиксированной точкой, которые мы определили до сих пор, бесконечно повторяют индуктивные определения предикатов, упомянутых в формуле, пока не будет достигнута фиксированная точка. В реализациях может потребоваться ограничить количество итераций, чтобы ограничить время вычислений. Полученные операторы также представляют интерес с теоретической точки зрения, поскольку их также можно использовать для характеристики классов сложности.
Мы определим первый порядок с итерацией ; здесь есть (класс) функций от целых чисел до целых чисел, и для разных классов функций мы получим разные классы сложности .
В этом разделе мы напишем to mean и to mean . Сначала нам нужно определить блоки квантификаторов (QB), блок квантификаторов — это список , где s — это бескванторные FO-формулы, а s — это либо , либо . Если Q — блок квантификаторов, то мы будем вызывать оператор итерации, который определяется как Q, записанное время. Следует обратить внимание, что здесь в списке есть квантификаторы, но только k переменных, и каждая из этих переменных используется раз. [14]
Теперь мы можем определить FO-формулы с оператором итерации, показатель степени которого находится в классе , и мы получаем следующие равенства: