Interestingly, I think many of your points would seem obvious if couched in computer programming terms. For instance, how do you write a program that's correct, but that another human can understand and adapt? What happens when a program gets too big to understand all at once in your head? How do you know that you've found all of the possible outputs?