Archive for December, 2011

The Leap of Faith

There are various skeptical problems which cast into doubt everything we think we know about the world. Maybe there is a bug in the human nervous system which makes all of us completely oblivious to some obvious fact. We have no proof to the effect that the laws of physics will be the same tomorrow as they are today. Maybe the physical world doesn’t really exist.

We prove a fact by pointing out other facts which imply the fact we want to prove. But suppose we think that every fact needs to be proven. It would follow that we need either an infinite series of proofs stretching out behind any belief, or we need a circularity somewhere in our chain of reasoning. Or, we can leave some facts unproven, and prove all of the rest of our beliefs from those unproven facts.

We think that 2+2=4. But how do we know that 2+2=4? There are formal theories of arithmetic which can prove that 2+2=4. But these theories cannot prove their own correctness. To prove their correctness we must use other, stronger formal theories. Those theories in turn cannot prove their own correctness; to prove that we must use other, even stronger theories.

But the stronger a theory is, the less we understand how it works, and so the less we trust it. It seems like the only way that we could prove the correctness of basic arithmetic would be to invent an infinite series of progressively less trustworthy theories, with each proving the correctness of the previous one; and it’s pretty clear that that won’t help.

We can’t supply a perfect proof, a proof which removes even the faintest shadow of a doubt, for anything at all. It follows that everything is in doubt.

What do we do about this? We could refrain from believing anything; but not only is this option unappealing, I am not sure that it is humanly possible. Believing is a function of the mind, like breathing is a function of the body. People sometimes say that they don’t believe anything; but I’m not sure that it’s ever been true. So let us eschew this option.

If everything is in doubt, this means that no additional knowledge, no additional arguments, no additional insights can remove this doubt. In order to have total certainty about anything, we would ultimately have to know everything. Otherwise there would always be the possibility of new information falsifying our beliefs. But we cannot know everything.

This seems to necessitate a “leap of faith” in order to believe anything. We must believe without proof, based on an inner feeling of confidence. We must cut the skeptical Gordian knot by an act of faith.

Not all leaps of faith are created equal. Some are modest, and some are bold.

On the extreme of modesty is the leap of faith needed to believe that, when I look at my hand, there is really a hand there.

On the extreme of boldness is the leap of faith needed to believe that I am an alien from the sixth dimension who incarnated on Earth in order to reduce the stress in the Earth’s energy field and thereby prevent a natural catastrophe from wiping out the human race.

It seems, then, that we are faced with the task of determining where to leap. We must believe something; believing anything requires some degree of faith; and so we must figure out where to place our faith, without sufficient information to be sure that we are choosing the right answer.

Note, however, that to prove that one should have faith would be a contradiction in terms. If one had a proof that one should have faith, then one would not be talking about faith at all; one would be talking about proof. So I don’t argue that we should believe without proof; I just say that we should.

My position on truth is as follows. Perfect proof does not exist. We need to assume some things. So, let us just assume that basically everything we think is right, and only question a belief when we encounter specific evidence that there is something wrong with it.

Leave a comment

Choosing a Goal

People who want to help the world fall into a common trap which I shall call the “Jesus complex.” This is the desire to solve every problem, and be a great savior who ushers in a new paradise. Doing this is obviously an unrealistic goal; we are very unlikely to be able as individuals to solve every problem.

There is obviously some excessive self-importance in the desire to do this. There is not to say that the end is bad. If I could save the world by myself, I would certainly not hesitate to do so out of fear of being megalomaniacal. Thinking that it would be good to save the world is not self-important. But setting this as one’s goal usually is self-important, because it’s unrealistic.

However, we can as individuals solve some problems. A healthy attitude, I think, is to realize that the world needs many, many things, and giving the world just one of the things it needs could be the work of a lifetime. So we should find a subset of the problem space to work on.

At the same time, it is useful to do this against a backdrop of a general picture of what the world needs, and think of oneself as part of a larger effort to save the world currently being carried out by everybody who cares about the world.

So we wish both to have a general picture of the goal space, and pick a subset of the goal space as the one which we will work on. Finding that subset is not something to do one evening over coffee; it is something to find over many years of work, thought, and experimentation.

There are a few considerations to be balanced in finding this subset. One consideration is the value to be had from each subset of the goal space. Ending hunger in Africa would be more useful than writing the world’s most addictive Flash game.

Another consideration is what one can do. Unless I can imagine a plausible chain of causality from where I am now, to achieving my goal, it’s not a good goal. Almost every goal, unfortunately, would seem to involve a bit of luck. We don’t want to find ourselves in a situation where our work was all for naught because of some trivial and stupid accident. So robust goals are preferable.

A third consideration is what one would have fun doing. It’s not healthy to sacrifice one’s happiness for the sake of the world. Furthermore, having fun tends to be correlated with doing a good job, and being able to persist in one’s efforts.

Some parts of the possibility space will interest us more than others. Maybe a given goal isn’t the most valuable goal, but it’s a goal that’s really interesting to us. That could be a good goal. There are a lot of people in the world; we don’t have to worry about the things we leave undone, because other people will do them.

So in choosing a goal, it seems that we should let ourselves be biased. It’s better to have a goal that fits like a glove than to have a theoretically optimal goal that we ourselves can’t comfortably live.

Consider, for example, how these principles apply to me.

I think that radically reducing international wealth stratification would be one of the most worthwhile things that could happen right now.

We have enough technology and resources to provide a comfortable physical existence to every person. But many people do not have this. This is obviously wrong. The reason things are this way is that the money is unfairly distributed. If the money were fairly distributed, then a large portion of the world’s worst problems would disappear.

Alternatively, the problem might be with money and capitalism itself. Capitalism is certainly an improvement over feudalism; but it still creates the problem we just noticed. Another problem that capitalism creates has to do with work.

Right now, the amount of work needed to maintain the human race is far less than the working capacity of the human race. A good fraction of the jobs in America are not necessary for anybody’s existence, and there are still not enough jobs for all of the people.

The problem is that under capitalism, people need to work a full-time job in order to live. We can imagine a system in which this wasn’t the case, in which everybody did a little bit of work and had much more free time than we have now. There would be less work being done than is being done now, and no problem of unemployment.

So there are a lot of serious problems that could be solved by changing our social structure — radically reducing wealth stratification, and/or moving to a system which has a different relationship between work and money, or which does away with money.

Though these are things which would be good, it’s hard to see how I could make them happen. I could go into politics; but I’m not attractive enough, I’m not rich enough, my social skills aren’t good enough, I’m too averse to lying, etc. I could do activism; but it’s not clear to me that these people make a big impact, so unless I’m convinced that it’s worth the opportunity costs (i.e. I have nothing better to do), I won’t be an activist.

One area which might be good for me is political theory. I am good at thinking about complex and abstract issues. I’m also under the impression that we don’t currently have an adequate political theory. If a really good political theory came into existence, it could happen that it gained a following and people chose to implement it. So this is one possibility.

I am such a creature of theory, that I know that whatever goals I pursue will involve theorizing. I enjoy it and I am good at it, so my goals should involve it. Consider, for instance, what I am doing right now. I am trying to get clear on the meaning of life, so that I can live according to it and help other people to live according to it. This is a useful thing to do; if I can jump-start other people’s thinking on the meaning of life, then they won’t have to spend as much time thinking about it, and they’ll have more time to do all sorts of good that I didn’t get around to doing. So this is a useful goal which fits my biases and gives the world one of the many things it needs.

Leave a comment

Positive and Negative Values

We want to answer the ethical question: “how should we live our lives?” This question is equivalent to many other differently formulated questions: “what is goodness?”, “what is the meaning of life?”, “what does it mean for something to be valuable?”, etc. The question presupposes that ethics is objective: i.e., that there is a single answer to this question.

It is obvious from the beginning that many different things are valuable: survival; social progress; art; science; love; the ability of every human to freely determine their lives; etc. So to solve the ethical question, we need to find a theory of value which synthesizes all of these things.

We should be suspicious of theories which leave anything out. For instance, a simple theory of value (widely held in Eastern mysticism) would say that becoming enlightened is the only valuable thing. But this theory results in us thinking that art, science, love, etc., are not valuable. This counts against the theory, because these are things that clearly seem valuable.

We are looking for an ethical theory which is parsimonious, but which when we unroll its implications, ends up ascribing value to almost everything that we already think is valuable. It is plausible to think that there are many valuable things whose value we don’t currently recognize; so if the values of an ethical theory are a superset of widely held values, that does not necessarily count against it. But the theory is less likely to be right if it fails to give value to a lot of things that we consider valuable.

To draw an analogy, if a scientific theory postulates many new facts beyond currently accepted ones, that is more likely to be acceptable than if it denies many currently accepted facts. There is not an absolute rule against denying accepted facts, and theories do not have free license to postulate new facts. So we are discussing a general heuristic rather than a hard rule.

So this is our first challenge for an ethical theory: to place value on almost all of the things we currently consider valuable.

Now let us analyze the space of values a bit. Some values have to do with solving problems: ending hunger, disease, and poverty; resolving inconsistencies in our knowledge; ending unhappiness and suffering; etc. Let us call these “negative” values. Other values have to do with creating things that are good: having fun; making beautiful art; discovering new knowledge; etc. Let us call these “positive” values.

In the space of negative values, we already have a pretty good idea of what the values are; the question is mainly one of how to achieve them. We can see the problems; the main challenge is seeing the solutions.

There is also, to an extent, a problem of seeing the problems. Consider, for instance, a rich person who does not realize on a gut level that the world is full of poor people who are suffering and do not deserve to be poor. Consider a person who is caught in a false belief system and does not realize that they are wrong. Consider a person who is so sexually repressed that they do not realize that they are sexually repressed.

A similar case is the one where we perceive a problem only dimly. We have some kind of hardship, but we do not see the full magnitude of the problem. For instance, consider a person who sometimes feels a slight chest pain, and does not realize that they have lung cancer. Consider also a scientist who occasionally gets unexpected results in their experiments, but does not yet realize that the unexpected results mean that their theories are fundamentally mistaken and they require a paradigm shift.

So sometimes we have problems and fail to see them. But this is not the main-line case. Mainly we see problems and fail to solve them. We know what our negative values are, and the challenge is achieving them.

In the space of positive values, we have the same problem of figuring out how to achieve them. But we have a more serious problem of figuring out what they are. Our problems, at any given time, are finite. But our potential for creating goodness is infinite.

To make this idea clearer, imagine an Earth in which all of the major problems have been solved. There is no hunger, no poverty, and no disease. There are no social ills, no emotional problems, and no interpersonal problems. People do not have to work. Imagine, furthermore, that the people on this planet will live forever, and their task is simply to enjoy eternity as much as they can. What should these people do?

One answer would be, “this Earth would be boring, and the best way to make it more interesting would be to reintroduce those problems.” But this is a poor answer. Surely we can make this Earth interesting in a more palatable way?

It is worth mentioning, also, that these people are not bored, not paralyzed by their freedom, and not in existential angst about the meaning of their lives. They do not have any major existential problems. So there are no problems that would be solved by reintroducing hardship.

I do think that an interesting existence necessarily involves problems. A problem-free existence would be lacking in the kind of drama which can make us passionate about life. But the proper reaction to this is not to introduce problems for their own sake. Instead, we should introduce problems whose resolution has the potential to yield good things. The problems should be sub-problems of, “how do we make the world more fun?” rather than problems for the sake of having problems.

So the one question facing these people is how to maximize the positive value of their world. What should they do?

Obviously they would go to parties, make art, love each other, engage in religious activities, do math and science, and in general do every cool thing that one can think of. But mightn’t there be better things they could do with their time? Maybe things that are many orders of magnitude better?

If we are serious about the problem of positive value, we will ask ourselves for a general theory of value, which is correct, and which tells us what would be the best thing for these people to do.

The problem I have posed may seem impractical, since we do not live in the world that these people live in. But it is not impractical. Particularly in the first world, each of us sometimes finds ourselves in the situation these people are in. We find ourselves, at a given time, not hungry or sick, in a good mood, without any work we have to do. What do we do then?

“We should solve the problems that Earth has” seems like an inadequate answer. Certainly this is one of the things we should do in this situation, but it is not the only thing. To see why, imagine a world in which everybody did this. Quickly our problems would be solved. But once they were, we would find ourselves in a problem-free existence with no art, no music, no movies, no philosophy, no religion, etc. We would be alive and well, but we would have nothing to live for. So the general problem of positive value reappears as relevant to us.

The problem of positive value is part of the general problem of value. We would be wrong to pursue only it. I have gone to pains to point it out because it is a bit harder to notice than the problem of negative value. If you ask a person to think of a general theory of what needs to happen, they would quickly think that starving children in Africa need to be fed, and depressed people in America need to become happy; but it would probably take them longer to think that there is a limitless possibility for goodness which we do not know how to actualize.

Leave a comment

Absolutism and Relativism

I’ve been puzzling over the paradox of absolutism and relativism. These are two philosophical meta-views. Absolutism is the view that there is a single correct philosophical view. Relativism is the view that there is no single correct philosophical view; there are multifarious perspectives and beliefs, but none of them are privileged as the one reality.

Both of these meta-views have problems. The problem with absolutism is that whenever we identify one view as the single correct one, we exclude all of the other views. If we pick materialism, or Eastern mysticism, or Christianity, as the correct view, then we exclude all the others.

We end up either ignoring everybody who disagrees with us, or getting into interminable arguments. What’s more, we miss out on a lot this way, though we don’t necessarily realize it. If a lot of people hold a view, it probably has a lot of truth and profundity to it; otherwise, why would people believe it? Surely there is a lot of widely believed garbage; but can we really maintain that everything outside of our favorite paradigm is garbage? So this is the problem with absolutism.

The problem with relativism is that it seems fairly obvious that there are truths about reality. If three people look at a table, all of them see a different table. We have a massive possibility space, and each of us experiences only a minute fraction of it. There are infinite possible perspectives on the table, and all of them are different tables. But, even so, there is clearly a single table underlying all of these perspectives!

We never know all of the details of the table; we never analyze it fully and exhaust everything that can be thought about it. The table transcends every possible perspective on the table; it lies beyond them and is the unattainable limit of all of the perspectives. It is an objective reality which we will never fully know.

Relativists must go through the most difficult contortions to explain away this objective reality and justify why there is in fact no table, why there are only different points of view which postulate slightly different subjective tables.

I look at this situation and feel that a synthesis is needed. We have two meta-views, both of which have a lot of merit and both of which are inadequate. How can we reconcile absolutism and relativism?

I think that people tend towards absolutism for a lot of reasons. We want to know what’s going on. And when we find a perspective that resonates with us, it can be very easy to be sucked into it. It exerts such power over us that we know it to be correct. The absolutist has a spiritual sort of power supporting their view; it magnetizes their being and brings all things under its sway.

And again, there are a lot of reasons that people tend towards relativism. The relativist is certainly one who grasps diverse views with ease, and who has a deep-set egalitarian virtue which does not wish to leave anything out. They can see a multifaceted quality of existence which is not available to the absolutist. There is an inspiring sense of infinity in their relativism, where no word is final, where there is always something to be added.

So, what will our synthesis look like? First, let us remember that we do not know everything. Our theories have truth to them; but they are not the final truth. There is always a theory which surpasses our existing knowledge, which accounts for the data we have not accounted for and resolves the problems we have not resolved.

Every paradigm (materialism, Eastern mysticism, Christianity, etc.) has noticed some facets of reality which the others have not noticed. Each has things that it treats very well; and each has things that it accounts for poorly. Each has holes and shortcomings. Each is biased. There are no unbiased thinkers on philosophy, just as there no unbiased thinkers on ethics or politics.

We can always arrive at a superior theory; and we can always synthesize the theories that we have to create new theories which aggregate their insights. (The process of synthesis is not a simple lumping together; it is an exquisitely delicate and artful process.)

I think that the incompleteness of all theories is a metaphysical fact. The universe consists of points of view, and the universe is infinite. It is a possibility space; not a random, chaotic possibility space, but a profoundly organized and parsimonious possibility space.

Disorganized data can always be transformed into organized understanding. The universe isn’t confused; we are the ones who are confused.

Remember Godel’s incompleteness theorem. Mathematics is infinite. But mathematics is still elegant and parsimonious, both in the parts we know and in the parts we do not know.

There are only perspectives. But some perspectives are super-perspectives. They are perspectives that are so grand, so massive, so powerful and full of truth that they are capable of swaying the masses and creating whole universes within themselves.

I refer not only to the major philosophical paradigms, but also to the moments on LSD when one understands more deeply than one has ever understood; to the people who have a mission in life; to enlightenment. The fact that none of these are final does not diminish their value. Surely a super-perspective is something worth having.

Leave a comment


One of the functions the music AI needs is the ability to compose new phrases. How would it go about this?

One strategy would be completely “de novo” composition, just randomly generating a sequence of notes. However, this is very unlikely to yield beautiful music. So we will eschew this strategy.

Another strategy would be “de novo” synthesis from concepts. We take an existing phrase concept, and randomly synthesize a phrase which satisfies that concept. This strategy is likely to do reasonably well.

A third strategy would be mutation of existing phrases. We take a good phrase, and modify it slightly. There are two obvious ways we could do phrase mutation: preserving concepts, and mutating concepts. In the first case, we mutate the phrase while keeping its concepts the same. In the second case, we mutate the concepts along with the phrase. (First we mutate the concepts, then we mutate the phrase.)

Are these all of the possible mutation strategies? No. In AI, a good rule is: never say, “the only options.” There is always another way to do something. Only the closest other way may be a large inferential distance away from the ideas we already have. In that case we can say, “the only obvious options.” And I think that these phrase mutation strategies are the only obvious options.

Besides phrase mutations, we also need concept mutations — because concepts are supposed to evolve. So we can ask the general question, “how do we mutate these data structures?”

An open-ended strategy would be as follows. For a data structure we wish to mutate, we define a set of transformations: i.e., functions over the data structure. Then to mutate a data structure, we simply apply a series of transformations. When a transformation takes more than one data structure as an argument, we can call it a “combination.” An example of a phrase combination would be, “sequentially concatenate these phrases.”

We have the option to evolve the set of transformations. This process would use the same fitness metrics as concept evolution: simplicity, usefulness, distinctiveness. (“Usefulness” is how likely the transformation is to yield a good data structure, when it is applied.)

Of course, to do that, we need to define a set of transformations over transformations. So at some point, the obvious option is to have a fixed set of transformations for the more “meta” data structures.

We need transformations over all of the things that we want to evolve. The things that we want to evolve include:

* Phrases.
* Phrase concepts.
* Phrase transformations.

So we have an evolved set of phrase transformations, and fixed sets of transformations for concepts and phrase transformations.

A fixed set of transformations seems potentially limiting. But I think the only thing it affects is how quickly the AI comes up with good new ideas; it couldn’t absolutely prevent the AI from coming up with any given idea.

At least, that is true if the set of transformations is “complete.” A set of transformations over a data structure A is “complete” if, for every a and b in A, there is some sequence of transformations which turns a into b. When we have fixed sets of transformations over data structures, we will want those transformation sets to be provably complete.

Leave a comment

The Universe

Taking another stab at the metaphysical question.

In the beginning there was nothing. Something began to exist; this we know, because here we are. But what came to exist?

Materialists say that it was “matter:” some sort of unconscious substance whose behavior follows mathematical laws. But if we reject materialism, this cannot be our answer, and we need to approach the problem afresh.

Some of the problems we have with materialism are that it describes a universe with no ethical purpose, and that it does not have an adequate solution to the problem of consciousness. So our metaphysics must solve these problems.

We can solve these problems by saying that what came to exist was a consciousness. We say that everything that exists is conscious experience; and this solves the problem of consciousness. By saying that that consciousness has an ethical purpose, we resolve the problem of an amoral universe.

If everything that exists is conscious experience, it follows that atoms, stars, rocks, etc. are forms of experience. The whole universe is alive.

The first consciousness was pure consciousness, infinite energy, pure light and ecstasy. It was God.

God is a being which is infinitely free. It has the power to create/become any other being. The manner of its action has the character of becoming, because it transforms itself in order to create, but it has the character of creation, because it does not destroy or diminish its original form in the course of its becoming.

God has not only freedom, but will or purpose. God’s will/purpose is to experience Its infinite possibilities, because these possibilities are good.

Here we run into the “Euthyphro paradox.” Are the possibilities good because God wills them, or does God will them because they are good? We dissolve the paradox by saying that God willing something, and the thing being good, are two ways of stating the same thing.

There are two general intuitions about ethics: ethics as preference, and ethics as given. The intuition of ethics as preference says that goodness consists of fulfillment of desires. The intuition of ethics as given says that goodness is an objective thing imposed from outside, which need not align with our desires.

These intuitions correspond to the two alternatives of the Euthyphro paradox. Ethics as preference would say that things are good because God wants them. Ethics as given would say that God wants things because they are good. But we can dissolve the paradox by saying that God’s desires are the objective good.

So God creates/becomes an infinite panoply of beings, including the universe that we experience. All of these beings are God; but they are different forms of God, made less free and more articulated. This process of creation continues up to this moment, and will continue infinitely, because God’s possibilities are infinite and Its purpose is to explore them.

The first beings are what we call “laws.” (A synonym for law is “archetype.”) A law is a being which is particularly simple and creative. Elementary examples of laws are the laws of logic and the laws of physics. God creates the laws, and the laws create the more complex, articulated beings.

But the laws are not all logical laws. Logic is one side of the logic/intuition duality, which can also be called thinking/feeling. Thus there are laws of an emotional character as well as of a logical character: laws such as love, fear, anger, joy, etc.

The most fundamental laws come in pairs of opposites: active/passive, logic/intuition, true/false, light/dark, male/female, positive/negative, wisdom/love, etc. We can see similarities between all of these dualities; and we can infer that they are all derived from a single primal duality, though it is hard to pinpoint the precise nature of that duality.

God is the first law; and the second and third laws are the primal duality. All subsequent laws come from the primal duality.

How many laws are there? There are infinite laws. What degree of infinity? For every degree of infinity we can describe, there are more laws than that. But some of the laws have not yet been discovered; God will never discover all of the laws.

The laws are related to each other in a parsimonious way. Though infinitely complex, it is not a messy system; it is the most elegant system conceivable.

Logically speaking, the concepts of free will and randomness are indistinguishable. The distinction is that free will includes the concept of desire or purpose. Free will obeys no laws other than itself; thus, logically speaking, we can call it random.

So God’s will results in a random outpouring of laws. These laws organize themselves into patterns, and create additional laws. This dance becomes progressively less chaotic and more articulated, and gives rise to a process of evolution.

Consider an infinitely large cellular automaton which starts empty, but has the property that occasionally a cell randomly activates or deactivates. In such a cellular automaton, patterns would occasionally arise. Those patterns which were best at persisting and replicating themselves would eventually become more common.

So this is what happens as a result of the random creative force of God. Progressively more complex beings evolve which are better at persisting and replicating. These are not yet the physical organisms we know; they are abstract, archetypal beings.

As these beings evolve, they become progressively more intelligent. So there arise cosmic intelligences, whose purpose is the same as God’s: to create. Each of these intelligences creates a world, and that world contains other intelligences.

We, and the universe we know, are the creations of a cosmic intelligence. We are like subroutines in a grand algorithm.

Leave a comment

Haiku, on Performing Tai Chi

I am a puppet
God tugs at muscles and bones
Dancing, mind is dead.

Leave a comment

Concept Language Redux

Now it is time to take another go at the concept language.

What is a concept? A concept represents a subset of the space of possible phrases. It describes this subset in the abstract, using mathematical rules, rather than by enumerating all of its members. Concepts represent compositionally useful patterns that appear in music. They let the AI think abstractly about music.

There are at least two things you can do with a concept. You can use it to “analyze” a phrase: to say, of an existing phrase, whether or not the phrase is an example of the concept. You can use it “synthesize” a phrase: to create a new phrase which is an example of the concept.

These operations will be more complex than that in practice, because we’ll likely need to do things like take an existing phrase and modify it to satisfy an additional concept, and somehow merge the set of concepts into an aggregate structure to check a phrase against many concepts simultaneously.

Also, we will have to evolve concepts, varying them semi-randomly and measuring them against a fitness function.

Concepts are defined using a “concept language.” This language is based on the analytic/synthetic concept language which I developed previously for natural numbers. We are simply extending that language from concepts of natural numbers to concepts of phrases.

We shall reiterate the definition of a phrase. A phrase is a set of notes, which are grouped in a topological fashion into sub-phrases. The phrase as a whole, and each sub-phrase, can satisfy various concepts. A phrase has the following components:

1. N: a set of notes, each of which has pitch, velocity, position, and duration.
2. T: a topology over N.
3. For every set t in T, a set C(t) of concepts which t satisfies. (Prune members of t which satisfy no concepts.)
4. A record of N’s minimum position; its maximum position; its duration; its minimum pitch; its maximum pitch; and its pitch range.

And we shall reiterate the definition of our concept language over natural numbers. A number concept is:

* Y or N, one of the primitive concepts.
* The sequence operation, [C1, C2, …].
* The repetition operation, (C * n).

The repetition operation has a numerical argument (n) which is defined using a restricted function language, with the following syntax:

* Numerical constants: 0, 1, 2, …
* Variables: a, b, c, …
* Operators: +, -, *, /, %.
* Conditionals: if (P1) { E1 } else if (P2) { E2 } … else { Em }.

The Ei in the conditionals are written in the function language. The Pj are written in the condition language, which consists of comparisons (=, <, <=) joined by boolean operators (and, or, xor, not). The arguments of the comparisons are written in the function language.

The variables which are available depend on the surrounding context. We shall define what variables are available in number concepts when they are part of phrase concepts.

A phrase concept consists of a score concept, a topology concept, and a set of free variable definitions. The score concept says what notes the phrase contains. The topology concept says how these are grouped into sub-phrases.

The free variables are numbers whose values are defined by number concepts. These variables can be referenced in the functions of repetition operators within the score concept and the topology concept. The free variables are named f1, f2, ….

The score concept language has the following elements:

* Note concepts: note(P, V, T, D)
* Sequencing: [C1, C2, …]
* Repetition: (C * n)

A note concept specifies a note, in the abstract. P, V, T, and D are number concepts constraining the pitch, velocity, position, and duration of the note, respectively.

The sequencing and repetition operations have slightly different meanings than they do in the number concepts. The sequencing operation means, “the notes yielded by C1, C2, … are all in the score.” The repetition operation means, “the score contains the notes yielded by repeating C n times.”

In the score, each note has a number, such that they are in a sequence counting up from zero. The notes are computed in order, from first to last. The functions in a given note concept have access to the following variables:

* f1, f2, …: The free variables.
* r1, r2, …: The index numbers in each of the repetitions that this function is inside. r1 is the innermost repetition, r2 is the one outside that, etc.^
* i: The index number of the note that this function is part of.
* p1, p2, …, p{i-1}: The pitches of all preceding notes.
* v1, v2, …, v{i-1}: The velocities of all preceding notes.
* t1, t2, …, t{i-1}: The positions of all preceding notes.
* d1, d2, …, d{i-1}: The durations of all preceding notes.

^ So for instance, the expression ([N, (Y * r1)] * 4) yields NNYNYYNYYY.

The functions in the score concept, but not in a note concept, have access to r1, r2, …, and f1, f2, ….

The topology concept language has the following elements:

* Sub-phrase concepts: sub(D, C1, C2, …)
* Sequencing: [C1, C2, …]
* Repetition: (C * n)

A sub-phrase concept specifies a subset of the notes (D), and a set of concepts (C1, C2, …) which that subset satisfies. D is a number concept which is supposed to range over [0, n); it is the set of numbers which satisfy that concept. C1, C2, … are phrase concepts.

Sequencing and repetition have the same meaning that they have in score concepts.

The variables to which functions in the topology concept have access are r1, r2, …, f1, f2, …, and n, the total number of notes in the score.

So there it is. It’s rather complex, but I think it’s complex in the right way, and that’s what counts.

Leave a comment

Concept Language: Multiple Variables

Phrases have many variables, and the values of these variables need to be able to have mutually interacting constraints. As a stepping stone towards this, let us define concepts over not only single natural numbers, but pairs, triples, etc., of natural numbers. These concepts will define sub-sets of N, N x N, N x N x N, etc.

An appropriate visualization is an n-dimensional figure demarcated into blocks, with some of these blocks being white (satisfies the concept) and others being black (does not satisfy the concept).

So let us consider a concept over variables x, y, z, …

As before, the two primitive concepts are Y and N.

Then for each of the variables we have a sequencing operator: x[C1, C2, …], y[C1, C2, …], z[C1, C2, …], … To make more sense of this, let us consider a two-dimensional concept with variables x and y. Then x[C1, C2, …] means “horizontal sequence,” and y[C1, C2, …] means “vertical sequence.” By combining horizontal and vertical sequences, we can make arbitrary two-dimensional patterns.

Then for each of the variables we have a repetition operator: x(C * n), y(C * n), z(C * n), … Only now n does not have to be a constant; it can be a complex expression referring to any variables other than the variable which the repetition operator is over. We will say that this complex expression is a function which can use the following syntax:

* Constants and variables.
* Operators: +, -, *, /, %.
* Conditionals: if (C1) { E1 } else if (C2) { E2 } … else { En }

The conditionals are composed of comparisons (=, <, <=) joined by boolean operators (and, or, xor, not).

If it’s less confusing, we can also factor out the determinants of the three variables. Then the concept has separate expressions for each variable. Those expressions consist of Y/N, sequences, and repetitions whose coefficients are functions over the variables.

Performing analysis on these concepts is a straightforward extension of the method given for one-dimensional concepts.

Performing synthesis to determine a value for one variable is straightforward if we already have fixed values for all of the other variables. If we don’t have such fixed values, then things are trickier.

One solution is to restrict the variables so that they are computed in a specific order. So if we have variables a, b, c, d, in computing a we can refer to b, c, d, in computing b to c, d, in computing c d to d, in computing d to nothing. Then performing synthesis is straightforward. This restriction is probably acceptable.

1 Comment

Concept Language: Analysis and Synthesis

In pondering the concept language, I realized that I need to be able to do two things with concepts:

1. I need to be able to say, of a phrase, whether or not it matches the concept. (Call this “analysis.”)
2. I need to be able, given a concept, to generate a random phrase which matches the concept. (Call this “synthesis.”)

Analysis is easy to do if concepts are written as logical predicates. On the other hand, then synthesis becomes very difficult to do; in general, generating an example of something matching a logical predicate is computationally intractable.

Synthesis is easy to do if concepts are written as functions (where the range is the set of phrases matching the concept, and each phrase is given an index). On the other hand, then analysis becomes very difficult to do; in general, saying whether or not something is part of the range of a function is computationally intractable.

So what I require is a different concept language, which is neither like predicates nor like functions, in which both analysis and synthesis are computationally practical. In order to penetrate this problem, I’ve decided to begin by focusing on concepts over natural numbers, before generalizing the task to concepts over phrases.

Let us clarify the task. Both functions and predicates denote sets. The set, for a predicate, is the set of things which satisfy the predicate. The set, for a function, is the set of things which the function can yield. We need another way of denoting sets, for which analysis and synthesis are computationally practical. In this case, the sets are subsets of the natural numbers.

The language doesn’t have to be totally general; in fact, this would be a disadvantage. A totally general language would have wacky computational properties (non-halting, etc.), and would probably make various things more difficult. So we need to have the language at the right level of power — neither too powerful nor not powerful enough.

Here is a first attempt at a language with the properties we need. I’m sure that it’s not too powerful; I’m not sure that it’s powerful enough.

The primitive concepts are “Y” and “N.” They mean “this number is in the set,” and “this number is not in the set,” respectively.

There are two operations for constructing new concepts out of existing concepts. The first is “sequence,” which takes a series of concepts and strings them together in sequence on the number line. We will write it [a, b, c, …].

So for instance, [Y, N, Y, Y] means, “0 is in the set; 1 is not in the set; 2 is in the set; 3 is in the set.” The concept is undefined for numbers higher than 3. (Each concept is over a limited range of numbers.)

The second operation is “repetition,” which takes a concept and a numerical constant. It takes a concept and repeats it on the number line. We will write it as (a * n).

So for instance, ([N, N, Y, Y] * 3) looks like this:

0-N 1-N 2-Y 3-Y 4-N 5-N 6-Y 7-Y 9-N 10-N 11-Y 12-Y

In summary, the concept language is:

* Y and N, the primitive concepts.
* The sequence operation, [a, b, c, …].
* The repetition operation, (a * n).

An “empty” concept is N, a sequence whose members are all empty, a repetition whose operand is empty, or a repetition where the number of repetitions is zero. Empty concepts can be used in building concepts, but an empty concept is not itself a concept. We cannot perform analysis and synthesis on it. (In principle we could perform analysis, but say that nothing satisfies the concept. But it doesn’t even make sense to ask to perform synthesis on it.)

With this language it is computationally easy both to determine membership (analysis) and to randomly generate an example (synthesis). Let us consider how to do both of these.

First we need to be able to determine the “length” of a concept: that is, the amount of number line that it covers. For Y and N, this is 1. For sequence, this is the sum of the lengths of the members. For repetition, this is the length of the operand times the number of repetitions.

Let us consider how to generate an example (synthesis). If the concept is a repetition, generate an example of the operand and add it to the length of the operand multiplied by a random number in [0, n). If the concept is a sequence, randomly choose one of the non-empty members, generate an example of it, and add to it the lengths of all of the members preceding this member. If the concept is Y, the example is 0. (We will never be asked to generate an example of N, and this is fortunate because there is no example of N.)

Now let us consider how to determine membership of a number n (analysis).

If the concept is a sequence, subtract the lengths of the members from n until the length of a member is greater than n. n is “inside” that member. Determine membership in that member. If we run out of members, then n is out of range.

If the concept is a repetition, assert that n integer-divided by the length of the operand is less than the number of repetitions; otherwise n is out of range. If n is in range, determine membership in the operand of n modulo the operand length.

If the concept is Y, then n is a member. If the concept is N, then n is not a member.

So this is an example of the sort of thing that we need. A great many subsets of the natural numbers can be expressed in this language; but things like the set of prime numbers, or the powers of two, can’t be expressed. Is this in the right neighborhood of power level? Hard for me to say; but I lean towards yes. The next task is to invent a language like this for phrases.