The Limits Of Computer Software Algorithms That Are Implementing Strong Artificial Intelligences

There are several practical computer software algorithm implementations of weak artificial intelligence engines. They were created with different theoretical concepts and techniques, like for example with a practical computer software implementation of a evolutionary algorithm (or a genetic algorithm, which is probably the most popular type of a EA algorithm). An evolutionary algorithm is a subset of evolutionary computation, a generic population-based metaheuristic optimization algorithm. The interesting concept techniques of data mining and artificial neural networks are useful, but are they the right way through which we will get to the right answer of strong artificial intelligences?

Based on the fact that a computer software algorithm of a strong artificial intelligence is executed on a computer machine, we know that the algorithm must have a executable form that the machine understands (computer machine software code). Although we are not very skilled for reading source software code of first generation computer programming languages, we have other practical displaying concepts that make the computer software algorithm more readable and practical for human beings. Of course I am talking about the second and third generation category of computer programming languages. Most practical computer software implementations of a weak artificial intelligence were developed in high level computer programming languages (the third generation category). The most powerful practical concept for problem solving on a digital computer machine is surely the low level computer programming language Assembly (the second generation category). It is basically the perfect mix of a little high abstraction representation and the full computer hardware access and control. As an opposite to high level computer programming languages that use a relative high level of abstraction and one or more specific computer programming paradigms (fundamental style of computer programming), the low level computer programming language Assembly uses a low level computer programming paradigm and a relative low level of abstraction. The basic syntactical rules are called “mnemonics” that are a high representation of the operation codes in the central processing unit in a computer machine defined in the ISA (Instruction Set) architecture.

Both, second and third generation computer programming languages, have their good and bad sides. High level computer programming languages have a high level of abstraction, as we said, what practically means that a computer software developer can solve a problem in probably less time, because the computer programming language offers him a high level of syntactical and semantical rules. The bad sides are or could be (I am adding the very high level computer programming languages as well, also known as the fourth generation category), that a computer software compiler or interpreter is not correct or inefficiently written (developed), what practically means that we have inefficient computer software algorithms. And there comes the computer programming language Assembly in the game. A computer software developer can exactly define the flow of instructions for the central processing unit, plus has all access and control to the computer machine (”hierarchical protection domains”, also known as protection rings are meant here). As we said, both have their good and bad sides, so we will now come to the bad side. Because of the low level of abstraction, and the precisely defined instructions for the central processing unit of a computer machine, you can imagine that the process of developing complex computer software algorithms (strong artificial intelligences) can be a very interesting deal that could take a very long trip. That is the main reason why we developed third and fourth generation computer programming languages (some people also say that there was another reason why, like for example because the second generation computer programming language was too complex, et cetera, but I personally disagree with these arguments).

And because there were now third and fourth generation computer programming languages of course, no one saw a reason why he should use concepts from the second generation for problem solving. Most people say that these higher generation categories offer more computer programmer productivity and flexibility, what is of course a fact, but in my opinion they also support the computer programmers laziness. As we said, there is also the negative fact that the computer software developers don’t have full control of the computer hardware and software as well.

Hierarchical protection domain for the 32 bit CPU unit device.
(Image source from the Wikipedia HTTP server.)

Because we developed our own very high and high computer programming languages we had to develop our computer programming paradigms or simply the fundamental styles of computer programming (an practical opposite of the methodology of computer programming, which is the style of solving specific software engineering problems). There are a lot of computer programming paradigms in the wild, including the three most basic categories. The imperative or procedural, object oriented and declarative (which encapsulates also the functional, logic and constraint) computer programming paradigm. There are also some other less popular, but widely spread ones, like for example the aspect oriented, recursive, reflective or meta computer programming paradigm. Most of the critics has gained the object oriented computer programming paradigm. Many articles were written against it, some of the arguments were completely justified in my opinion. The fact the the theoretical concept of the object oriented computer programming paradigm is that all modules (as represented in the procedural computer programming paradigm) and other art concepts of the computer software developer must be an object is simply unrealistic. Furthermore, the concept of bounding the data structures and functions (in this computer programming paradigm also defined as “methods”) is simply funny. Also spreading the data type definitions all over the computer software algorithm is an issue. Some people may argument that this representation is a misunderstanding of the theoretical concept of this computer programming paradigm, but the fact is that a lot of mathematical scientist would agree on the counterargument that a computer programming paradigm must have a syntactical mathematical basis. It is however a double-edged sword.

The new age brought us new concepts for problem solving at the very high level of abstraction. The fourth generation, also called DSL (Domain Specific Language) computer programming languages developed a new kind of computer programming paradigm, like for example the “language oriented” style of computer programming. It is not just a new computer programming paradigm, but it is also a completely new approach and concept in the world of computer software engineering, we could almost say maybe a little revolution in the future.

The language orientation is a computer programming paradigm via the meta computer programming paradigm in which, rather than solving problems in general purpose computer programming languages, the programmer creates one or more domain specific computer programming languages for the problem first, and solves the problem in those languages. This concept seems at the first look a little bit unpractical, but it is not at all. The only issue that could appear in my opinion is that a computer programmer could not process a optimization as needed. That means that developing computer software algorithms with the language oriented computer programming paradigm could produce inefficient computer software.


(Image source from the JetBrains HTTP server.)

This image shows the mainstream computer programming with a general purpose computer programming language.


(Image source from the JetBrains HTTP server.)

And this image shows language oriented computer programming with domain specific computer programming languages.

There is the actual issue. Usually the fact that a computer software controls more parts of the computer software developing process than the computer programmer can cause issues. The field of computer science called algorithmic efficiency is used to describe properties of an algorithm relating to how much of various types of resources it consumes. The process of making computer software as efficient as possible is known in computer science as optimization. Most people using very high level computer programming languages would probably argument that the computer hardware is evolving and getting more complex. They would argument that the computer hardware’s data processing is fast enough to cover this inefficiency. But this is not true. The slow execution time in the central processing unit of the computer software would be visible for a average user. A practical example was the computer software interpreter of the Java computer programming language. The computer software interpreter executed the intermediate software code too slow, plus the computer software compiler translated the source software code to inefficient intermediate software code, what simply caused very bad popularity. This issue was more or less corrected. The last problem in the Java computer programming language would be that it forces the software developers in a specific fundamental style of computer programming (object oriented computer programming paradigm). It is by the way of course generally known that it does not have good computer hardware access and control, so it is basically not very well suited and useful for computer operating systems, software device drivers development, et cetera.

The main question in a practical implementation of a computer software algorithm that represents a strong artificial intelligence is the following. Are the current computer programming languages, or more in general, practical concepts for problem solving enough to solve a problem of this range? Do we need different computer hardware? Where are the limits of computer software algorithms, if there are any at all (if we’re not looking at the computer hardware in this issue). That are the main questions that the mathematical science can foresee and the practical implementations are able to prove.

- The R-G

Copyright © 2008 by Luka Woititz

4 Responses to “The Limits Of Computer Software Algorithms That Are Implementing Strong Artificial Intelligences”

  1. I suggest you look into to computational theory. That discipline is concerned with what problems can and can not be solved and what kinds of (theoretical) computer are necessary to solve them.

    The most capable, reasonable computer is the Turing Machine. All programming languages you just named are practically equivalent to this machine. If you can show a Turing Machine can not solve the problem of strong AI, then it is also impossible with any real programming language.

    Of course the problem of strong AI is currently the problem of defining strong AI.

  2. Exactly. More specific, computational complexity theory and general computational theory in computer science.

    However, as you have written, the first, basic question is what problem we are actually trying to solve (the issue of defining strong artificial intelligence). As you may saw in this or maybe recent articles is, that I’m also pointing out the question if the current hardware concepts for problem solving are enough for this range of complexity. The current aspect (digital computers) is, as you have written, the prove provided by a Turing machine. But the prove concept counts for known analog and digital computers. The question is, are digital computers really enough? We know concepts of molecular (also more specific deoxyribonucleic acid) and quantum computer hardware that could bring us to the solution. The quantum computer programming language limits in this case are defined with a quantum Turing machine, and so on.

    Thank you for your objective comment.

  3. Thanks for the information. Your blog is added to your bookmarks. Develop.
    Your reader.

  4. Thanks for the information. Added you to bookmark))
    Your new reader.

Leave a Reply