Так эквивалентность можно по-разному определять... Например:

1. По маршрутам (только "абстракция операций" Кауфмана) - на одинаковых исходных данных (материалах) сравниваемые программы (техпроцессы) проходят одни "развёртки" ("варианты использования"). При этом сравнивающему по барабану, какие результатные данные (продукты) в результате получаются. Видимо, надо фиксировать смысл действий и оговаривать, что "репертуар" сравниваемых в этом смысле одинаков (как бы они не формулировались).

2. По результатам (только данные) - на одинаковых данных сравниваемые программы выдают одинаковые результаты. При этом несущественно уже, какие в них получаются "развёртки". Видимо, надо фиксировать уже смысл типов источников/результатов.

3. По связыванию - на одинаковых данных исполнитель по сравниваемым программам должен приходить в одинаковые состояния (для "трансформационных" задач). Или приводить предметную область задачи в состояния из некоего "класса эквивалентности" (например, с учётом также времени приведения, как для "реагирующих" задач). Ну, тут множество состояний фиксируется...

Как-то так с "предметных", качественных позиций. Или как?..