Previously, I’ve been talking in broad terms about very general concepts in proficiology. This will be the first time I narrow my focus into a specific domain. A domain is a restricted setting with only a small number of relevant events / senses / agents – basically a toy problem, or a simplified model environment. The hope is that we can use important ideas from these domains as fundamental building blocks that will help us analyze more complex setups. In other words, we should be able to build more interesting / realistic generics by mixing & matching simple components from multiple domains, as if we were building a complex molecule atom-by-atom.
In this post we will talk about the Rivalry
domain, which focuses on events where one generic benefits at another generic’s loss. I will supplement my explanation with formal notation loosely based on functional programming languages. I am not requiring (or expecting) readers to have a background in computer science – it’s just that this kind of notation is very useful for describing nontrivial generic behaviors through the composition of simpler constructs. In any case, I will be explaining this functional notation as I go.
The Basic Senses: Pain and Gain
Central to the Rivalry
domain are a pair of senses that I will call Pain
and Gain
. Here, a sense is like a trigger that is activated upon encountering certain sequences of events. We will use the word scene
to mean “a sequence of events”, and more formally describe a sense
as a function which takes in a scene
and produces a boolean
value (either true
or false
). In functional notation, we say that a sense
has the type [scene -> boolean]
– the arrow denotes that a sense
is a function, where the input is a scene
and the output is a boolean
.
We will assume that there are sequences of events that are inherently considered pleasant, and sequences of events that are inherently considered unpleasant. Let’s suppose we had a scene
called [obtaining candy]
1, which is an inherently pleasant one. By definition, we say that [Gain(obtaining candy) = true]
– this is a formal way of saying that the act of obtaining candy triggers the Gain
sense. On the other hand, if we had a scene
called [having my candy taken away]
that is inherently unpleasant, then by definition we say that [Pain(having my candy taken away) = true]
– this is a formal way of saying that losing some candy triggers the Pain
sense. For completion, I should note that some scenes don’t trigger either sense. Perhaps we have a scene
called [nothing interesting is happening]
, where [Gain(nothing interesting is happening) = false]
and [Pain(nothing interesting is happening) = false]
.
Helper Functions: Mirroring
We also need to have a function called Mirror
which is used to view a scene
from someone else’s perspective2. Suppose we started with a scene
called [I took candy from someone]
where a generic takes candy away from another generic. We can use the Mirror
function to view the scene
from the perspective of the victim – perhaps we can call the result [someone took candy from me]
. Let’s put this into functional notation. We can say that the Mirror
function takes in a scene
and a generic
as inputs. If the inputs are well-formed then the function outputs a new scene. But if the inputs are nonsensical then the function outputs an error called Failure
. We can say that Mirror
has type [(scene, generic) -> scene?]
, and in our example we have:
Mirror(I took candy from someone, the bolded "someone") = Success(someone took candy from me) Mirror(I took candy from someone, an unrelated person) = Failure
Lastly, we need to have a function GetGenerics
which takes in a scene
and outputs a list of all the generics that participate in that scene
. This will help us find the generics that we can use as inputs to the Mirror
function.
More Advanced Senses: Selfishness and Selflessness
In the Rivalry
domain, the Pain
and Gain
senses are simply given to us and we don’t care too much about how they work. But we will use them (as well as Mirror
and GetGenerics
) as building blocks to create two more senses. The first one is called Rivalry-selfish
, and is triggered whenever something good happens to the generic at the expense of something bad happening to another generic. To be specific, we will use the following definition:
define Rivalry-selfish(scene): (scene -> boolean) as
let generics = GetGenerics(scene),
if there is some generic in generics where
Gain(scene) = true, and
Mirror(scene, generic) = Success(mirrored_scene), and
Pain(mirrored_scene) = true
then true
otherwise false
Here’s an explanation of this notation. We first recognize who is participating in the scene with [let generics = GetGenerics(scene)]
. Then for each generic, we check whether the scene satisfies three criteria:
- The scene is good from our perspective –
[Gain(scene) = true]
- It makes sense to mirror the scene –
[Mirror(scene, generic) = Success(mirrored_scene)]
- The scene is bad from the other generic’s perspective –
[Pain(mirrored_scene) = true]
If we are able to satisfy these criteria, then the Rivalry-selfish
sense is triggered.
Similarly, we can define the Rivalry-selfless
sense, which is triggered when something bad happens to the generic in a way that is beneficial to another generic.
define Rivalry-selfless(scene): (scene -> boolean) as
let generics = GetGenerics(scene),
if there is some generic in generics where
Pain(scene) = true, and
Mirror(scene, generic) = Success(mirrored_scene), and
Gain(mirrored_scene) = true
then true
otherwise false
Keep in mind that Rivalry-selfish
and Rivalry-selfless
are senses, not personality traits as the words “selfish” and “selfless” may suggest. They relate to the perception of whether a scene
has a “selfish nature” or a “selfless nature”, just as Pain
and Gain
refer to the perception of whether a scene is “good” or “bad”.
Dynamics of the Rivalry Domain
We are now ready to talk about how these senses relate to generic behavior. Suppose that we had a generic society where all generics have the Rivalry-selfish
and Rivalry-selfless
senses, and many actions trigger these Rivalry
senses. For instance, perhaps resources are limited in this society and generics frequently compete over such resources3. In this case, in claiming these resources a generic may very well inconvenience others around them.
Naturally, the lenses of the generics in this society will frequently produce evaluations related to the Rivalry
senses. In turn, that means each generic will likely house agents that are energized by such evaluations, and hence members of this society are constantly motivated to perform actions that trigger the Rivalry
senses.
Let’s try to create a very selfish generic. His lens will have two evaluations that directly mirror the Rivalry
senses, and he will have an agent which tries to maximize Rivalry-selfish
. For a more exaggerated effect, let’s say that both Rivalry-selfish
and Rivalry-selfless
energize this agent. Through the will of this agent, our generic will always try to do things that benefit himself while hurting others. If he happens to lose to another person (thereby triggering the Rivalry-selfless
sense), then he will get mad and become even more motivated to win. Funnily enough, we don’t even need to give him an agent that simply attempts to maximize Gain
. It’s possible that he doesn’t have any strong feelings about a “free benefit” (a scene which triggers Gain
without Rivalry-selfish
), and is satisfied only if the benefit comes at someone else’s disadvantage.
Of course, if we swap the two senses then we can just as easily create a highly altruistic generic who will gladly give back double for every favor he receives. Let’s try making the evaluations a little more complicated though. Suppose we had a generic who likes to classify his neighbors into two groups – the ingroup and the outgroup. We give him two evaluations:
ingroup selflessness
: produced whenRivalry-selfless
appears in the posterior information and the victim is in the ingroup.outgroup selfishness
: produced whenRivalry-selfish
appears in the posterior information and the victim is in the outgroup.
Now, we give him an agent called HelpMyFriends
which uses ingroup selflessness
as its source / sink evaluations, and an agent called HurtMyEnemies
which uses outgroup selfishness
as its source / sink evaluations. The result is that the generic will be happy to
- spend his time / effort doing things that help members of the ingroup, and
- gain benefits in a way that hurts members of the outgroup.
In other words, this generic has a group identity and is motivated to fight for the benefit of the ingroup. If other members of the ingroup also had agents similar to HelpMyFriends
and HurtMyEnemies
, then they would form a tightly knit tribe of generics who are all hostile toward those outside their group.
Education by Demonstration
Finally, let’s see what happens to a new generic joining into this Rivalry
-centered society4. Let’s say that his mind already has the Rivalry
senses, but they are not being used in any evaluations (which also means his pre-existing agents are unaware of this sense).
Initially, he does not understand the behaviors of his neighbors. Given the prior information for an event, he cannot find a good evaluation that he can use to predict the outcome through value prediction. Maybe after repeatedly witnessing a specific event several times, he can produce a causal estimate for the event:
If one person has candy and finds another person without candy, we might see the former give his candy to the latter. I’ve seen this happen several times, after all.
However, this knowledge doesn’t generalize to events which superficially appear very different, but still demonstrate similar kinds of Rivalry
dynamics:
If one person finds another person accidentally walking into a dangerous place, what’s going to happen? I have never seen anything like this before, so I have no idea.
(Turns out, the former person deliberately put himself at risk to pull the latter back to safety.)
Recall that the lens inherently seeks to improve predictive accuracy. If it discovers that it can use a new evaluation based on the existing Rivalry
senses to explain these events (though value prediction), then it will spawn this new evaluation in no time. After that, our generic may create a new agent that is energized by this new evaluation, and voila – he now behaves like a true member of the Rivalry
-centered generic society.
An interesting thought is that the Mirror
function may play a big role in this learning process. We know that the Rivalry
senses can only be triggered if either Pain
or Gain
is triggered. Simply watching someone else gain / lose something will not trigger the Rivalry
senses, since the observer is not directly affected. But if a generic uses the Mirror
function, they can view a scene
from a different perspective and conclude that someone else may be experiencing the Rivalry
senses5. By being able to study events even when they are not being personally experienced, a generic can give more training data to his lens and learn about the Rivalry
dynamics more quickly than otherwise.
Footnotes
- I will sometimes make analogies to situations encountered by babies / toddlers, because I think humans learn about the concept of
Rivalry
from a very young age (and build more advanced abstractions on top of it soon after). - I named the function after the mirror neuron, which is a neuron that fires either when a person performs a specific action, or when they simply watch someone else do that same action. The concept is simple, but this is actually a pretty advanced piece of functionality. This is painfully obvious to anyone working in robotics, as there is no inherent connection between a robot’s cameras / sensors and its motors / actuators. Despite the complexity, it probably was evolutionarily advantageous for animals to develop mirror neurons, since most animals frequently interact with others of the same species. The world just becomes that much more predictable once you realize that other members of your species can only do precisely what you can do yourself.
- Obviously, resources are indeed limited in the real world and many benefits do have to come at someone else’s loss. But this may not be the most pressing concern in most people’s minds, especially as overall standards of living improve. In the
Rivalry
domain, competition is in essence the only pressing concern in a generic’s mind. - This also includes “joining” the society by being born into this environment, by the way.
- Whether this is actually true or not is a separate issue. In the general case, two generics do not share the same senses, and it may be wrong to claim that another generic is experiencing
Rivalry
senses even though you would experience such senses if the same scene happened to you. Frequently using theMirror
function incorrectly like this can reinforce the perception that other people are followingRivalry
dynamics, even if the true reason for their behavior is much more varied.