HN user

jhuni

246 karma

I define intelligence as the ability of an agent to optimize its environment to suit its preferences in a variety of contexts. In the context of abstract environments this means dealing with constraint optimization and reinforcement learning. In partially observable environments means using perceptual learning techniques to make sense of the environment.

In order to create an intelligent agent I have constructed a two part system consisting of a system for dealing with optimization under complete information using techniques from order theory, operations research, and optimization theory as well as a system for optimization under incomplete information that uses the perceptual learning capabilities of OpenCV. You can read more about my work on my blog:

http://lisp-ai.blogspot.com/

Posts0
Comments231
View on HN
No posts found.

The first question that comes to mind is, what is wrong with using the JVM or the CLR as a compilation target for such a language. The only thing that I can think of is that they want to exist on the Python platform, which makes some sense. Python is taking over the computing industry and programming education and it does have a lot of libraries. Perhaps Python should have a standard Python virtual machine, but that almost certainly is never going to happen, for multiple reasons. So here you are stuck with a transpiler. A transpiler whose purpose is to make a functional language compile to a language which was explicitly designed not to be functional at all.

The problem is that maintaining a browser engine is enormously expensive. There are so many features you need to maintain, security issues to deal with, etc. In the past Microsoft made money off of their operating system, and they made Internet explorer then Edge off of that, but now they make money off of the cloud and clients expect people to support Chrome. Microsoft was spending too much money they didn't need to for return. I think because of the expensiveness of maintaining a browser engine used by so many people, they were destined to be basically a natural monopoly operated by a few concerned actors. Of course, google as one of the two major internet giants, is the most concerned with supporting the development of a web browser.

It also means exposure to paradigms like functional programming, or logic programming. I recommend Haskell, not because you need to learn yet another language, but because the knowledge ceiling in its ecosystem is really high and it's the current lingua franca for papers on functional programming.

Common Lisp is also ideal, it effectively supports paradigms other then functional, and has been or at least was the lingua franca for artificial intelligence for decades.

Guido Van Rossum and the development team didn't want the language to be functional. There is very little functional support in Python in general, besides not supporting first class functions over multiple lines.

One note about point (2) dealing with the versions and the languages object oriented features. I noticed the object-oriented support has been tacked on, before Python 2.2 the objects had their own type which was accessed by .__class__. The tacked on nature of the OOP support of the language is perhaps why there are these __identifiers__ which are hard to type using consecutive letters, needing shift to be held down, are still used in the language. Although Python fixed the problem partially, it only did so only by adding new style classes along the old style ones in order to avoid breaking compatibility, which only complicated the issue. Unfortunately, Python 2.7 is still around. As this post mentions, Python 2.7 & 3 are both installed on Linux machines and the default is still Python 2.7 when you type python.

Lisp programmers tend to be ignorant of applied mathematics.

As a Lisp programmer and a mathematician myself I must disagree. I spent years working on mathematical applications using Lisp dialects, initially drawing inspiration from computer algebra systems like Axiom, Derive, Maxima, and Reduce and later drawing inspiration from ontologies and knowledge bases like SUMO and Cyc. All of these systems are heavily math based and they are based upon Lisp.

Does this person think that programming will suddenly be a breeze if it is done as a hobby rather then as a job? Even if you are programming in your own free time you will still have to deal with the perversions of internet exploder and other fatally flawed programming platforms. At least if you are doing it as a job you are getting paid for it!

Dialects of Lisp 13 years ago

> You misread me. What I said was that "set theory" is the general mathematical framework exactly equal to what we computer scientists call "type theory".

That makes more sense. I am coming from a mathematical background and not a computer science background myself.

> Mathematicians deal with sets, countable or otherwise, algebraic manipulations of them, bijective mappings, etc.

That is true. As a combinatorist I am one of those people who mainly focuses on countable sets. The isomorphism classes of sets (the counting numbers) are at the foundation of everything I do in combinatorics but other areas of mathematics (e.g topology) have very different approaches.

Dialects of Lisp 13 years ago

> Number theory/abstract algebra, which is the study of natural numbers among other things, is a form of set theory.

Let S be the set {a,b} and let T be the set {c,d}. There are two bijections S -> T between these two sets {(a,c),(b,d)} and {(a,d), (b,c)}. These two sets are isomorphic to one another because they have the same cardinality.

The isomorphism classes of sets are cardinalities which are themselves the natural numbers 0,1,2,3,... and infinity. In combinatorics we can just focus on the study of these isomorphism classes rather then sets themselves.

We can enumerate binary relations: ([],[0],[1],[[0 0],[0 0]],[[0 0],[0 1]],[[0 0],[1 0]],[[0 0],[1 1]],[[0 1],[0 0]],[[0 1],[0 1]],[[0 1],[1 0]],[[0 1],[1 1]]). Logical disjunction [[0,1],[1 1]] is equal to 10 in this enumeration.

Using the enumeration of binary relations the entire field of study of graph theory can be described in terms of natural numbers without any need for sets. As a result, graph theory is considered to be a branch of combinatorics. We only need to have sets mathematically when dealing with cardinalities like aleph one that emerge from uncountable sets.

Since analytic number theory deals with the uncountable set of real numbers and abstract algebra deals with operations on sets including the real numbers, these two fields are indeed founded on set theory. Algebraic combinatorics and combinatorial number theory are the branches of these two fields that focus on countable sets.

> And set theory is what mathematics calls type theory.

No it isn't. Just look up differences of type theory from set theory on wikipedia [1]. You almost never hear the word "type" spoken in math courses. According to John Shutt "I took some tolerably advanced math courses in college and graduate school. One thing I never encountered in any of those courses, nor that-I-recall even in the THUG talks, was a type. Sets aplenty, but not types" [2].

[1] Type theory differences from set theory http://en.wikipedia.org/wiki/Type_theory#Difference_from_set...

[2] Where do types come from http://fexpr.blogspot.com/2011/11/where-do-types-come-from.h...

Dialects of Lisp 13 years ago

> The type system does quite a bit more than just describe cardinality. The single most important feature is typeclasses; you simply can't replicate some of what typeclasses can easily do without a similar type system.

In the C programming language types are mainly used to describe cardinalities. For example, char is the cardinality of the smallest addressable unit of memory of the machine (often 256). We don't need more then machine cardinalities as entire operating systems have been written in assembly and C. What advantages do type classes and GADTS have that make them worth adopting? Is there any evidence that they make programs more safe and reliable?

> My point with math is that Haskell libraries and code use mathematical abstractions (like various sorts of algebraic structures) far more than lisp; I was not taking about what people do with Haskell but rather how they do it.

I am building a computer algebra system with Lisp in my free time. There are many Lisp computer algebra systems that I have learned a lot from like Maxima, Reduce, and Axiom. One of my favorite computer algebra systems is GAP and it is written in C and not Haskell. I am not convinced that Haskell uses more mathematical abstractions and algebraic structures and I am not familiar with any well maintained computer algebra system written in Haskell.

> Having a flexible syntax that can look like math is far more important usually, and Haskell gets most of the way there without being too complicated.

Math doesn't look like anything. Mathematics is about abstract concepts (especially the natural numbers) not representations. You mean that Haskell is meant to look like math does on paper, but whats so important about using a paper syntax when we have keyboards?

Dialects of Lisp 13 years ago

> Type theory and accompanying first-order logic is the foundation upon which mathematics is built.

Since when? Mathematics was originally founded on the study of the natural numbers. The mathematics I find most valuable (eunmerative combinatorics) still uses the natural numbers as its foundation and not type theory.

Dialects of Lisp 13 years ago

I like having access to mathematical semantics, simple algebraic rules, and all the other things you mentioned but combining these features with a non-homoiconic syntax spoils the whole thing for me.

> Not only is the community particularly nice and welcoming, it's also special in not being afraid of a bit of math.

The Lisp community has never been afraid of math. John McCarthy had a PHD in mathematics and the earliest computer algebra systems were developed in Lisp. The Macysma computer algebra system (now developed as Maxima) predates Haskell by decades.

> Haskell has an incredible but also surprisingly simple type system. You can't just ignore that. There is nothing in lisp--not even typed Racket--that even comes close to Haskell's type system.

The most important thing for me is having the ability to describe cardinality (especially in terms of machine bits such as 2^8, 2^16, etc) and enumerations (like the ASCII character encoding). What aspect of Haskells type system is that Lisps need to "come close to"?

> But of course people asking for more state will tell you that North Korea is not a good example of communism and that Argentina is not a good example of socialism.

The Workers' Party of Korea attends the International Meeting of Communist and Workers parties along with the ruling parties of China, Laos, Vietnam, Nepal, Cuba and many other international communist parties. The DPRK definitely is affiliated with communists but its ideology isn't communism it is a combination of Korean nationalism, Juche, and self-reliance.

Since you equate communism with statism you don't know what it really means. Communism is a broad category of societies that do not have classes of social relations to the means of production. Three of the most important types of communism are primitive communisms which existed before the development of means of production, collectivist communism which is based upon common ownership of the means of production, and individualist communism which is based upon personal ownership of the means of production such as 3D printers and distribution on a free market.

> In the spirit of healthy debate, Microsoft's control of the desktop is akin to Kleenex's control of the tissue market. It will always be there because no one really expects it to change.

The thing is that most software development is done on desktops and similar environments that Microsoft controls. Software development isn't usually done on mobile devices because they generally don't have keyboards. This means that developing an operating system that that doesn't alienate its users from production and that ultimately works to eliminate the user/producer distinction is something that remains out of our reach.

> Capitalism is intrinsic to certain innovations, so the need for closed designs is necessary.

When do you think it is okay to alienate consumers from the design process? Capitalism transforms peoples labour power into a commodity to be bought and sold in a competitive market. This alienates workers from their own productive lives and from one another. When is alienation which is intrinsic to capitalism ever essential to innovation?

Unfortunately, I don't share your optimism with regards to our immediate ability to liberate ourselves from computer systems with closed designs. The Microsoft hegemony has been here for decades and I don't see it going away anytime soon, so it looks like closed designs are here to stay for the foreseeable future.

> Most people aren't tinkerers. Lots of people aren't curious, and many people respond to freeform environments with indecision and frustration that's self-defeating.

They weren't born they way, these people lost their curiosity because they were put into a society that alienates them from the design process. Proprietary software alienates its users from the software design process and it thereby destroys the curiosity people have about the inner workings of computers. Nonetheless, proprietary software is heavily present in schools because companies like Microsoft give out free licenses to them.

Your analysis is spot on. Schools are part of a larger economic system that is based upon alienation. How can I be curious about the things around me if they are based upon closed designs? For example, how can I be curious about the operations of my own computer if it is based upon proprietary software? Our entire society alienates people from the production and design processes and it alienates people from themselves and one another.

Public education in modern capitalist society is a step up over what we had before. When capitalism first emerged in England there were no child labor laws so millions of children were denied an education and put into working in slave like conditions in factories with minimal if any safety equipment.

Capitalism is based upon uneven and unequal development so much of the global population is still denied an education and even a basic level of literacy. Those people would love to have any education at all to complain about in the first place.

I feel it is important to put this person's complaints into the context. Nonetheless, I will be the last person in the world to actually defend the education system in first world because it is just based on turning the first world citizens into obedient service sector workers and consumers of products mainly produced in China and extracted from the third world.

> Our system should be producing more adults with this same fearlessness, who go after what they really want from the start in rational, systematic ways. Right now, we tend to produce ‘answer-centred’ people who are terrified of doing things wrong.

Capitalism is not based upon letting people go after what they really want. Capitalism is based upon having a class of people (the proletariat) who are alienated from their own work and for whom doing things wrong means getting fired.

> We need to find a better way to teach children, one that doesn’t kill their innate sense of curiosity and play.

We need a system that teaches children to be alienated from the things around them, their productive activities, their own lives, and their peers. This is demanded by the capitalist mode of production itself and there is no way of getting around this without revolutionizing society.

> I value the freedom of hard-working content creators to make money from their labor over the freedom of teenagers to get free copies of popular movies and video games

I appreciate how you twisted this. This reveals that you take an ageist position against teenagers. When I was fifteen I knew everything I needed to know about the world and I was studying higher mathematics full time in college. Teenagers can be just as intelligent and productive as anyone else. Despite this, you value the right of movie companies like Metro-Goldwyn Mayer, 20th Century Fox, Disney, Paramount, Warner bros, and Universal Studios to make a profit over the freedom of our teenagers to share with one another.

> I don't care of those creators are profit-driven mega-corporations or starving artists.

The existing copyright policies are created by profit-driven mega-corporations rather then individual artists because the big corporations have all the political power, so you are implicitly supporting these corporations over individual artists.

Programmers would greatly benefit from living in a society where all software is free because they would never have to use a program that alienates them from the process of software production. Operating systems could be rebuilt to eliminate the user/produce distinction and to drastically increase programmer productivity. However, profit-driven mega-corporations like Microsoft and Apple cannot allow that because that would destroy their profit model.

Similarly, individual artists would benefit from the freedom to use our accumulated artistic knowledge without being alienated from it by the profit-driven corporations. Mega-corporations don't want that, they want what we have now which is copyright that lasts 120 years after creation.

> Thought experiment: in games like World of Warcraft, weapons, armor, etc, are trivially reproducible.

I don't have much of an issue with participating in a virtual commodity economy for fun and not to make a profit. Blizzard makes its money off of WoW from subscription fees rather then game economy itself. However, some free-to-play games like Maple Story run cash shops for profit and I oppose the existence of such cash shops as much as I do all other markets that sell artificially scarce goods for a profit.

Why do you value the freedom of profit-driven megacorporations to profit off of their exclusive control of intellectual private property over the freedom to share information with one's friends and neighbours?

If you destroy considerable amounts of food to profit off of a reduced food supply that is as reprehensible as using copyright to profit off of an artificially scarce supply of useful information. In general, artificially limiting the supply of any useful good is always unacceptable.

Capitalism is a system of alienation. For us hackers this is clear as day as the many proprietary software programs out there directly alienate people from the process of software production. Perhaps the best thing about being a capitalist is that you are no longer alienated from production like everyone else so you can make things happen.

Proletarians suffer from the four kinds of alienation Marx referred to in the Economic and Philosophic Manuscripts of 1844 (1) alienation from products (2) alienation from the act of production (3) alienation from ones own life (4) alienation from fellow laborers. The forms of alienations the bourgeoisie have to go through are not nearly as acute as the alienation of the proletariat.

Perhaps the most important aspect of being as rich as a bourgeoisie is that you have a secure existence. You don't have to worry about finding a job, paying for health care, paying child support, paying rent on time so that you don't have to join the masses of homeless people living in the cold, or any of the other things ordinary people have to worry about. Having a secure existence is a major stress reliever and it makes your life better no question.