I was asked this question at an interview, and couldn't answer it, and would like to know how it is 'shown' that two Turing machines which accept the same language is undecidable. This is not a homework question!
Let's restrict ourselves to Turing machines that ignore their input. Now suppose you have two Turing machines:
- Some given one
- Another that loops forever.
If you could decide if they accept the same language, you'd be able to decide if
T halts or not. This is impossible - see the halting problem.
This applies to SW/HW as well. It's undecidable if two programs perform the same computation or not.
If there were such an algorithm, then we could write another algorithm $P$ that, given a program $Q$ as input, first uses the supposed algorithm to decide if $Q$ accepts all strings. If Q does accept all, $P$ outputs some (fixed arbitrary) program $P(Q)$ that does not accept all strings. If $Q$ does not accept all, $P$ outputs some (fixed arbitrary) program $P(Q)$ that does accept all strings. So $P$ is a total program such that $P(Q)$ always functions differently than $Q$, contrary to the recursion theorem.