Wednesday 3 December 2014

Coming To An End

Coming To An End
    As classes have finally come to an end it feels appropriate for me to reflect on my CSC165 experience. Coming into the course I didn't have a clue as to what to expect. The whole course was like no other course I'd ever taken before probably due to the fact that it was very theoretical. It really required a lot of thinking and deep understanding of the concepts to be successful. It wasn't so much memorizing equations and "plugging and chugging" as the phrase goes. It broadened the whole computer science view exposing us to concepts none or at least most of us hadn't ever been exposed to. I've already enrolled in CSC240 for next semester as the whole theoretical computer science field really intrigues me. Although still early on I'm planning on doing a Theory of Computation Computer Science Specialist. Overall the whole course was a pleasure to have been able to take and would definitely recommend to others. 

Mathematical Induction

Mathematical Induction
   With the introduction of simple mathematical induction comes an interesting view as opposed to that which is taught in MAT137. We were presented with the idea of using boolean values to express mathematical inductions such as if P(0) is equal to true, then mathematical induction would dictate that all values of P(x) would also be true. That assuming the function holds for all values of x. Otherwise we would get false values ridden within function results. And not so that we could pick the start point somewhere later. More so how we were taught mathematical induction in MAT137 was demonstrated really well by another student Christian in his slog entry. He took a more mathematical approach testing the base case 1, assuming the case of n and showing that the case of n + 1 holds for various functions. Overall I can see the practicality of mathematical induction for proofs and am interested in the various over mathematical induction methods.

The Halting Function

The Halting Function
    With the introduction of the halting function, it brings up an interesting concept. The way I see it is we create a function which has two outputs and then create the body of the function which emulates these two functions. So in essence the definition of the outputs is what's making such a function be impossible to implement. Furthermore when we use reduction to prove other functions as also being impossible to implement, using the halting functions definition simply allows us to make the second function meet its description as long as we somehow implement a piece of code where the function can either halt or not halt. As another student Ji stated on his blogger, even with Turing complete programming languages some programs are impossible to write. I recall reading about how in practice, some situations may be similar to the halting function in the sense that what they're trying to solve is not computable. And so the program designed would be aimed at optimizing a solution and then finding a better one. This would be run over and over so in essence its finding a better solution compared to the current solution. If a solution to the halting function were created, I'm not so sure as to the practicality of it save for those cases which model the halting problem. 
    I'm interested in further such examples of these theoretical computer science cases and am looking forward to learning more about them. In regards to the halting problem I don't see a solution arising unless the program can determine whether or not it will run infinitely. This would require quite a lot of intuition on the programs part. We've probably not gotten to that point yet in machine learning and artificial intelligence as we still haven't solved this problem yet. On that note though and with figures such as Elon Musk and Stephen Hawking warning us about advances in machine learning and artificial intelligence I'd probably lean towards not getting to that point.