Я уже читал примеры формул в CTL, но не в LTL и наоборот, но у меня возникают проблемы с умственным пониманием формул LTL, и на самом деле в чем разница.
Я уже читал примеры формул в CTL, но не в LTL и наоборот, но у меня возникают проблемы с умственным пониманием формул LTL, и на самом деле в чем разница.
Ответы:
Чтобы по-настоящему понять разницу между LTL и CTL, вам нужно изучить семантику обоих языков. Формулы LTL обозначают свойства, которые будут интерпретироваться при каждом выполнении программы. Для каждого возможного выполнения (прогона), который можно рассматривать как последовательность событий или состояний на линии - и именно поэтому он называется «линейным временем» - выполнимость проверяется на прогоне без возможности переключения на другой прогон во время проверки. С другой стороны, CTL семантики проверяет формулу на все возможные трассы и будут пытаться либо все возможные пробеги ( оператор) или только один прогон ( E оператор) , когда перед лицом филиала.
На практике это означает, что некоторые формулы каждого языка не могут быть изложены на другом языке. Например, свойство сброса (важное свойство достижимости для проектирования схемы) утверждает, что всегда существует вероятность того, что состояние может быть достигнуто во время прогона, даже если оно никогда не достигнуто ( сброс AG EF ). LTL может только утверждать, что состояние сброса фактически достигнуто, но не может быть достигнуто.
С другой стороны, формула LTL не могут быть переведены в CTL. Эта формула обозначает свойство стабильности: при каждом выполнении программы s в конечном итоге будет иметь значение true до конца программы (или навсегда, если программа никогда не останавливается). CTL может предоставить только формулу, которая является слишком строгой ( AF AG s ) или слишком разрешительной ( AF EG s ). Второй явно не прав. Это не так просто для первого. Но AF AG s ошибочен. Рассмотрим систему, которая зацикливается на A1 , может перейти от A1 к B, а затем перейдет к A2на следующем ходу. Тогда система останется в состоянии А2 навсегда. Затем «система будет , наконец , остаться в А состояние» является свойством типа . Очевидно, что это свойство верно для системы. Тем не менее, А. Ф. AG сек не может захватить этот объект , так верно и обратное: есть пробег , в котором система будет всегда находиться в состоянии , из которого бежать , наконец , идет в не A состоянии.
Я не знаю, отвечает ли это на ваш вопрос, но я хотел бы добавить некоторые комментарии.
Существует много дискуссий о наилучшей логике для выражения свойств для верификации программного обеспечения ... но настоящая дискуссия - где-то еще. LTL может выражать важные свойства для моделирования систем программного обеспечения (справедливости), когда CTL должен иметь новую семантику (новое отношение удовлетворяемости), чтобы выразить их. Но алгоритмы CTL обычно более эффективны и могут использовать алгоритмы на основе BDD. Так что ... лучшего решения нет. Пока только два разных подхода.
Один из комментаторов предлагает статью Варди «Ветвление против линейного времени: финальное вскрытие» .
Если дан один объект (например, трассировка в случае LTL), вы рассматриваете только одно будущее на каждый момент времени, в CTL у вас их множество.
В частности, next
дает уникальное действие в LTL, но (потенциально) целый набор в CTL.