Эквивалентность анализа потока данных, абстрактной интерпретации и вывода типа?

9

Ответ Бабу на недавний вопрос напоминает мне о том, что когда-то я читал статью об эквивалентности (с точки зрения как фактов, которые можно вывести или доказать, так и сложности времени выполнения алгоритма вывода) анализа потока данных , абстрактная интерпретация , и тип логического вывода .

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

Какие основные ссылки обсуждают эквивалентности (или различия) между анализом потока данных, абстрактной интерпретацией и выводом типа?

Блуждающая логика
источник

Ответы:

4

Анализ потока данных и вывод типа являются конкретными примерами абстрактной интерпретации.

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

Оказывается, что вывод типа также касается вычислений с фиксированной точкой, хотя это далеко не очевидно, imo. Вот статья, которая явно показывает, что типы являются абстрактными интерпретациями: статья . В основном, типы рассматриваются как абстракция семантики конкретной программы. Например, в системе типов Хиндли-Милнера абстрактная область типов имеет бесконечную высоту, и вычисление (наиболее общего) типа с использованием унификации по существу выполняет (очень неточную) операцию расширения.

bellpeace
источник
4

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

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

Мартин Бергер
источник
3

Я считаю их в основном одинаковыми. У них просто были изначально разные цели и были придуманы разные фракции информатики.

Анализ потока данных происходит от инженерной фракции компилятора, пытающейся говорить об их алгоритмах оптимизации и проверке верхних границ их сложности и т. Д.

Абстрактная интерпретация происходит из формальной математической области информатики. Это еще более формальная версия с большим интересом к правильности и меньшим количеством создания реальных компиляторов.

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

lambdapower
источник