вообще в верификации есть разные направления, есть дедуктивная верификация, (это вот то что выше обсуждали), есть еще model checking. Если вкратце, то проверяется конечно автоматная модель программы на соответствие спецификации. Инструменты позволяют задавать предикаты над состоянием программы во времени (LTL), например какое-то условие выполняется только один раз и потом больше не выполняется. Инструментами можно верифицировать протоколы, проверять что нет дедлоков и тд. При этом, что интересно, инструмент может показать какие шаги привели к тому, что заданное условие перестало выполняться Много интересного есть 🙂