Я начал тут определять эквивалентные программы по входу-выходу, но вопрос требует более серьезного подхода.
А вообще-то эквивалентность программ давно пытаются сделать - со схем Ляпунова...
Но пока - не очень получается...

Для учебных целей важно два вида эквивалентности:
1. По входу-выходу. Это проверяется легко на одном и том же наборе тестов.
2. По структуре. Это в общем виде сводится к задаче гомоморфизма графов.
Эта эквивалентность очень важна, так как первая не дает гарантии, что студент правильно выполнил задачу.
Например, задача написать сортировку. Студень вместо реализации алгоритма пишет вызов стандартной.
Его программа по первому пункту удовлетворяет. а по второму - нет.
Вот и приходится преподу лазить во все тексты и смотреть, что и как.
А это - куча времени (у каждого посмотреть все его программы во всех лабах - и сделать замечания по реализации).
Хочется повесить эту рутинную работу на среду.