1. Доказать или опровергнуть сущестование алгоритма решения данной задачи.
2. Если алгоритм существует, то построить или предъявить алгоритм (что не всегда возможно).
Не совсем так. Доказать существование алгоритма можно разными способами. Например:
1) выписать явно его код (что представляет собой этот код, зависит от конкретной версии определения алгоритма);
2) предположить, что алгоритм не существует, и показать, что это приводит к противоречию;
3) сконструировать алгоритм, используя алгоритмы, для которых существование уже доказано.
Я не претендую на полноту списка.
Во втором случае мы получаем "чистую" теорему существования, и неизвестно, удастся ли нам этот алгоритм сконструировать.
Если в третьем пункте используются только алгоритмы, коды которых явно выписаны, то мы потенциально сможем выписать и код сконструированного нами алгоритма.
Существует некоторое количество различных определений алгоритма (
частично рекурсивная функция, машина Тьюринга, машина Поста, нормальный алгорифм Маркова; на полноту списка не претендую). Известно, что все они эквивалентны.
3. Если алгоритм построен, то проверить реализуем ли он практически или нет. То есть по алгоритму составить программный код, который сможет решить задачу за приемлемое время и с приемлемыми ресурсами. Как понимаю, из построения алгоритма не всегда следует его программное решение.
Такого требования вообще нет. В определении алгоритма неявно предполагается, что он располагает неограниченными ресурсами. Его код должен быть конечным, но может быть сколь угодно длинным. В процессе работы он может требовать сколь угодно много ресурсов (пространства и времени). Если он в конце-концов остановится, мы получим какой-то результат. Но он может и не остановиться.
Если же речь идёт о реализации алгоритма в виде компьютерной программы, то ресурсы будут ограничены, и в таком случае не всякий алгоритм можно реализовать на практике.