05 December 2012

Causal Dynamical Triangulation

Causal Dynamical Triangulation

I've been reading up on Causal Dynamical Triangulation (CDT) (by Loll, Ambjoern, and Jurkiewicz). It's an attempted unified field theory related to Loop Quantum Gravity (LQG), which you may have read the Scientific American article on a few years back.
What it (like LQG) has to recommend it is that the structure of space emerges from the theory itself. Basically, it proposes a topological substrate (spin-foam) made of simplexes (lines, triangles, tetrahedrons, etc). Spatial curvature emerges from how those simplexes can join together.

Degeneration and the arrow of time

The big problem for CDT in its early form was that the space that emerged was not our space. What emerged was one of two degenerate forms. It either has infinite dimensions or just one. The topology went to one of two extremes of connectedness.
The key insight for CDT was that space emerges correctly if edges of simplexes can only be joined when their arrows of time are pointing in the same direction.

So time doesn't emerge?

But some like to see the "arrow of time" as emergent. The view is that it's not so much that states only mix (unmix) along the arrow of time. It's the other way around: "time" has an arrow of time because it has an unmixed state at one end (or point) and a mixed state at the other.
To say the say thing in a different way, the rule isn't that the arrow of time makes entropy increase, it's that when you have an entropy gradient along a time-like curve, you have an arrow of time.
The appeal is that we don't have to say that the time dimension has special rules such as making entropy increase in one direction. Also, both QM and relativity show us a time-symmetrical picture of fundamental interactions and emergent arrow-of-time doesn't mess that picture up.

Observables and CDT

So I immediately had to wonder, could the "only join edges if arrows of time are the same" behavior be emergent?
In quantum mechanics, you can only observe certain aspects of a wavefunction, called Observables. Given a superposition of a arrow-matched and arrow-mismatched CDT states, is it the case that only the arrow-matched state is observable? Ie that any self-adjoint operator must be only a function of arrow-matched states?
I frankly don't know CDT remotely well enough to say, but it doesn't sound promising and I have to suspect that Loll et al already looked at that.

A weaker variant

So I'm pessimistic of a theory where mismatched arrows are simply always cosmically censored.
But as far as my limited understanding CDT goes, with all due humility, there's room for them to be mostly censored. Like, arrow-mismatched components are strongly suppressed in all observables in cases where there's a strong arrow of time.

Degeneration: A feature, not a bug?

It occured to me that the degeneration I described earlier might be a feature and not a bug.
Suppose for a moment that CDT is true but that the "only join edges if arrows of time are the same" behavior is just emergent, not fundamental. What happens in the far future, the heat death of the universe, when entropy has basically maxxed out?
Space degenerates. It doesn't even resemble our space. It's either an infinite-dimensioned complete graph or a 1-dimensioned line.

The Boltzmann Brain paradox

What's good about that is that it may solve the Boltzmann Brain paradox. Which is this:
What's the likelihood that a brain (and mind) just like yours would arise from random quantum fluctuations in empty space? Say, in a section of interstellar space a million cubic miles in volume which we observe for one minute?
Very small. Very, very small. But it's not zero. Nor does it even approach zero as the universe ages and gets less dense, at least not if the cosmological constant is non-zero. The probability has a lower limit.
Well, multiplying an infinite span of time times that gives an infinite number of expected cases of Boltzmann Brains exactly like our own. The situation should be utterly dominated by those cases. But that's the opposite of what we see.

Degeneracy to the rescue

But if CDT and emergent time are true, the universe would have degenerated long before that time. Waving my hands a bit, I doubt that a Boltzmann Brain could exist even momentarily in that sort of space. Paradox solved.

Is that the Big Rip?

(The foregoing was speculative and hand-waving, but this will be far more so)
Having described that degeneration, I can't help noticing its resemblance to the Big Rip, the hypothesized future event when cosmological expansion dominates the universe and tears everything apart.
That makes me wonder if the accelerating expansion of space that we see could be explained along similar lines. Like, the emergent arrow-of-time-matching isn't quite 100% perfect, and when it "misses", space expands a little.
This would fit with the weaker variant proposed above.


For one thing, it's not clear how it could explain the missing 72.8% of the universe's mass as dark energy was hypothesized to.


Now my hands are tired from all the hand-waving I'm doing, so I'll stop.

Edit: dynamic -> dynamical

Meaning 2

Meaning 2


I relayed the definition of "meaning" that I consider best, which is generally accepted in semiotics:
X means Y just if X is a reliable indication of Y
Lameen Souag asked a good question
how would [meaning as reliable indication] account for the fact that lies have a meaning?


"Reliable" doesn't mean foolproof. Good liars do abuse reliable indicators.
Second, when we have seen through a lie, we do use the term "meaning" in that way. When you know that someone is a liar, you might say "what she says doesn't mean anything" (doesn't reliably indicate anything). Or you might speak of a meaning that has little to do with the lie's literal words, but accords with what it reliably indicates: "When he says `trust me', that means you should keep your wallet closed."

Language interpretation

Perhaps you were speaking of a more surface sense of the lie's meaning? Like, you could say "Sabrina listed this item on Ebay as a 'new computer', but it's actually a used mop." Even people who considered her a liar and her utterances unreliable could understand what her promise meant; that's how they know she told a lie. They extract a meaning from an utterance even though they know it doesn't reliably indicate anything. Is that a fair summation of your point?
To understand utterances divorced from who actually says them, we use a consensus of how to transform from words and constructions to indicators; a language.
Don't throw away the context, though. We divorced the utterance from its circumstances and viewed it thru other people's consensus. We can't turn around and treat what we get thru that process as things we directly obtained from the situation; they weren't.
If Sabrina was reliable in her speech (wouldn't lie etc), we could take a shortcut here, because viewing her utterance thru others' consensus wouldn't change what it means. But she isn't, so we have to remember that the reliable-in-the-consensus indicators are not reliable in the real circumstances (Sabrina's Ebay postings).
So when interpreting a lie, we get a modified sense of meaning. "Consensus meaning", if you will. It's still a meaning (reliable indication), but we mustn't forget how we obtained it: not from the physical situation itself but via a consensus.

The consensus / language

NB, that only works because the (consensus of) language transforms words and constructions in reliable ways. If a lot of people used language very unreliably, it wouldn't. What if (say) half the speakers substituted antonyms on odd-numbered days, or when they secretly flipped a coin and it came up tails. How could you extract much meaning from what they said?

Not all interpretations are created equal

This may sound like All Interpretations Are Created Equal, and therefore you can't say objectively that Sabrina commited fraud; that's just your interpetation of what she said; there could be others. But that's not what I mean at all.
For instance, we can deduce that she committed fraud (taking the report as true).
At the start of our reasoning process, we only know her locutionary act - the physical expression of it, posting 'new computer for sale'. We don't assume anything about her perlocutionary act - convincing you (or someone) that she offers a new computer for sale.
  1. She knows the language (Assumption, so we can skip some boring parts)
  2. You might believe what she tells you (Assumption)
  3. Since the iterm is actually an old mop, making you believe that she offers a new computer is fraud. (Assumption)
  4. Under the language consensus, 'new computer' reliably indicates new computer (common vocabulary)
  5. Since she knows the language, she knew 'new computer' would be transformed reliably-in-the-consensus to indicate new computer (by 1&4)
  6. Reliably indicating 'new computer' to you implies meaning new computer to you. (by definition) (So now we begin to see her perlocutionary act)
  7. So by her uttering 'new computer', she has conveyed to you that she is offering a new computer (by 5&6)
  8. She thereby attempts the perlocutionary act of persuading you that she offers a new computer (by 2&7)
  9. She thereby commits fraud (by 3&8)
I made some assumptions for brevity, but the point is that with no more than this definition of meaning and language-as-mere-consensus, we can make interesting, reasonable deductions.

(Late edits for clarity)

30 August 2012

Fairchy 3: Ultimate secure choice

Ultimate secure choice


I wrote about Fairchy, an idea drawn from both decision markets and FAI that I hope offers a way around the Clippy and the box problem that FAI has.

Measuring human satisfaction without human frailties

One critical component of the idea is that (here comes a big mental chunk) the system predictively optimizes a utility function that's partly determined by surveying citizens. It's much like voting in an election, but it measures each citizen's self-reported satisfaction.
But for that, human frailty is a big issue. There are any number of potential ways to manipulate such a poll. A manipulator could (say) spray oxytocin into the air at a polling place, artificially raising the reported satisfaction. And it can only get worse in the future. If elections and polls are shaky now, how meaningless would they be with nearly godlike AIs trying to manipulate the results?
But measuring the right thing is crucial here, otherwise it won't optimize the right thing.

Could mind uploading offer a principled solution?

It doesn't help non-uploads

I'll get this out of the way immediately: The following idea will do nothing to help people who are not uploaded. Which right now is you and me and everyone else. That's not its point. Its point is to arrive before super-intelligent AIs do.
This seems like a reasonable expectation. Computer hardware probably has to get fast enough to "do" human-level intelligence before it can do super-human intelligence.
It's not a sure thing, though. It's conceivable that running human-level intelligence via upload-and-emulating, even with shortcuts, could be much slower than running a programmed super-human AI.

First part: Run a verified mind securely

Enough caveats. On to the idea itself.
The first part of the idea is to run uploaded minds securely.
  • Verify that the mind data is what was originally uploaded.
  • Verify that the simulated environment is a standard environment, one designed not to prejudice the voter. This environment may include a random seed.
  • Poll the mind in the secure simulated environment.
  • Output the satisfaction metric.
This seems doable. There's been a fair amount of work on secure computation on untrusted machines, and there's sure to be further development. That will probably be secure even in the face of obscene amounts of adversarial computing power.
And how I propose to ensure that this is actually done:
One important aspect of secure computation is that it provides hard-to-forge evidence of compliance. With this in hand, FAIrchy gives us an easy answer: Make this verification a component of the utility function (Further on, I assume this connection is elaborated as needed for various commit logs etc).
This isn't primarily meant to withhold reward from manipulators, but to create incentive to keep the system running and secure. To withhold reward from manipulators, when a failure to verify is seen, the system might escrow a proportionate part of the payoff until the mind in question is rerun and the computation verifies.


  • It's only as strong as strong encryption.
  • How does the mind know the state of the world, especially of his personal interests? If we have to teach him the state of the world:
    • It's hard to be reasonably complete wrt his interests
    • It's very very hard to do so without creating opportunities for distortion and other adverse presentation.
    • He can't have and use secret personal interests
  • Dilemma:
    • If the mind we poll is the same mind who is "doing the living":
      • We've cut him off from the world to an unconscionable degree.
      • Were he to communicate, privacy is impossible for him.
      • We have to essentially run him all the time forever with 100% uptime, making maintenance and upgrading harder and potentially unfair.
      • Presumably everyone runs with the same government-specified computing horsepower, so it's not clear that individuals could buy more; in this it's socialist.
      • Constant running makes verification harder, possibly very much.
    • If it isn't, his satisfaction can diverge from the version(s) of him that are "doing the living". In particular, it gives no incentive for anyone to respect those versions' interests, since they are not reflected in the reported satisfaction.
  • On failure to verify, how do we retry from a good state?
  • It's inefficient. Everything, important or trivial, must be done under secure computation.
  • It's rigidly tied to the original state of the upload. Eventually it might come to feel like being governed by our two-year-old former selves.

Strong encryption

The first problem is the easy one. Being only as strong as strong encryption still puts it on very strong footing.
  • Current encryption is secure even under extreme extrapolations of conventional computing power.
  • Even though RSA (prime-factoring) encryption may fall to Shor's Algorithm when quantum computing becomes practical, some encryption functions are not expected to.
  • Even if encryption doesn't always win the crypto "arms race" as it's expected to, it gives the forces of legitimacy an advantage.

Second part: Expand the scope of action

ISTM the solution to these problems is to expand the scope of this mechanism. No longer do we just poll him, we allow him to use this secure computation as a platform to:
  • Exchange information
    • Surf-wise, email-wise, etc. Think ordinary net connection.
    • Intended for:
      • News and tracking the state of the world
      • Learning about offers.
      • Negotiating agreements
      • Communicating and co-ordinating with others, perhaps loved ones or coworkers.
      • Anything. He can just waste time and bandwidth.
  • Perform legal actions externally
    • Spend money or other possessions
    • Contract to agreements
    • Delegate his personal utility metric, or some fraction of it. Ie, that fraction of it would then be taken from the given external source; presumably there'd be unforgeable digital signing involved. Presumably he'd delegate it to some sort of external successor self or selves.
    • Delegate any other legal powers.
    • (This all only goes thru if the computation running him verifies, but all attempts are logged)
  • Commit to alterations of his environment and even of his self.
    • This includes even committing to an altered self created outside the environment.
    • Safeguards:
      • This too should only go thru if the computation running him verifies, and attempts should be logged.
      • It shouldn't be possible to do this accidentally.
      • He'll have opportunity and advice to stringently verify its correctness first.
      • There may be some "tryout" functionality whereby his earlier self will be run (later or in parallel) to pass judgement on the goodness of the upgrade.
  • Verify digital signatures and similar
    • Eg, to check that external actions have been performed as represented.
    • (This function is within the secure computation but external to the mind. Think running GPG at will)
The intention is that he initially "lives" in the limited, one-size-fits-all government-issue secure computing environment, but uses these abilities to securely move himself outwards to better secure environments. He could entirely delegate himself out of the standard environment or continue to use it as a home base of sorts; I provided as much flexibility there as I could.

Problems solved

This would immediately solve most of the problems above:
  • He can know the state of the world, especially of his personal interests, by surfing for news, contacting friends, basically using a net connection.
  • Since he is the same mind who is "doing the living" except as he delegates otherwise, there's no divergence of satisfaction.
  • He can avail himself of more efficient computation if he chooses, in any manner and degree that's for sale.
  • He's not rigidly tied to the original state of the upload. He can grow, even in ways that we can't conceive of today.
  • His inputs and outputs are no longer cut off from the world even before he externalizes.
  • Individuals can buy more computing horsepower (and anything else), though they can only use it externally. Even that restriction seems not neccessary, but that's a more complex design.
Tackling the remaining problems:
  • Restart: Of course he'd restart from the last known good state.
    • Since we block legal actions for unverified runs, a malicious host can't get him into any trouble.
    • We minimize ambiguity about which state is the last known good state to make it hard to game on that.
      • The verification logs are public or otherwise overseen.
      • (I think there's more that has to be done. Think Bitcoin blockchains as a possible model)
  • Running all the time:
    • Although he initially "lives" there, he has reasonable other options, so ISTM the requirements are less stringent:
      • Uneven downtime, maintenance, and upgrading is less unfair.
      • Downtime is less unconscionable, especially after he has had a chance to establish a presence outside.
    • The use of virtual hosting may make this easier to do and fairer to citizens.
  • Privacy of communications:
    • Encrypt his communications.
    • Obscure his communications' destinations. Think Tor or Mixmaster.
  • Privacy of self:
    • Encrypt his mind data before it's made available to the host
    • Encrypt his mind even as it's processed by the host (http://en.wikipedia.org/wiki/Homomorphic_computing). This may not be practical, because it's much slower than normal computing. Remember, we need this to be fast enough to be doable before super-intelligent AIs are.
    • "Secret-share" him to many independent hosts, which combine their results. This may fall out naturally from human brain organization. Even if it doesn't, it seems possible to introduce confusion and diffusion.
    • (This is a tough problem)

Security holes

The broader functionality opens many security holes, largely about providing an honest, empowering environment to the mind. I won't expand on them in this post, but I think they are not hard to close with creative thinking.
There's just one potential exploit I want to focus on: A host running someone multiple times, either in succession or staggered in parallel. If he interacts with the world, say by reading news, this introduces small variations which may yield different results. Not just different satisfaction results, but different delegations, contracts, etc. A manipulator would then choose the most favorable outcome and report that as the "real" result, silently discarding the others.
One solution is to make a host commit so often that it cannot hold multiple potentially-committable versions very long.
  • Require a certain pace of computation.
  • Use frequent unforgeable digital timestamps so a host must commit frequently.
  • Sign and log the citizen's external communications so that any second stream of them becomes publicly obvious. This need not reveal the communications' content.

Checking via redundancy

Unlike the threat of a host running multiple diverging copies of someone, running multiple non-diverging copies on multiple independent hosts may be desirable, because:
  • It makes the "secret-share" approach above possible
  • A citizen's computational substrate is not controlled by any one entity, which follows a general principle in security to guard against exploits that depend on monopolizing access.
  • It is likely to detect non-verification much earlier.
However, the CAP theorem makes the ideal case impossible. We may have to settle for softer guarantees like Eventual Consistency.

(Edit: Fixed stray anchor that Blogspot doesn't handle nicely)

09 August 2012

Parallel Dark Matter

Parallel Dark Matter 9


I have been blogging about a theory I call Parallel Dark Matter (and here and here), which I may not be the first to propose, though I seem to be the first to flesh the idea out.

In particular, I mentioned recent news that the solar system appears devoid of dark matter, something that PDM predicted and no other dark matter theory did.

Watch that title!

So I wes very surprised to read Plenty of Dark Matter Near the Sun (or here). It appeared to contradict not only the earlier success of PDM but also the recent observations.

But when I got the paper that the article is based on (here and from the URL it looks like arXiv has it too), the abstract immediately set the record straight.

By "near the sun", they don't mean "in the solar system" like you might think. They mean the stellar neighborhood. It's not immediately obvious just how big a chunk of stellar neighborhood they are talking about, but you may get some idea from the fact that their primary data is photometric distances to a set of K dwarf stars.

The paper

Silvia Garbari, Chao Liu, Justin I. Read, George Lake. A new determination of the local dark matter density from the kinematics of K dwarfs. Monthly Notice of the Royal Astronomical Society, 9 August, 2012; 2012arXiv1206.0015G (here)

But that's not the worst

science20.com got it worse: "Lots Of Dark Matter Near The Sun, Says Computer Model". No and no. They used a simulation of dark matter to calibrate their mass computations. They did not draw their conclusions from it.

And the Milky Way's halo may not be spherical

The most interesting bit IMO is that their result "is at mild tension with extrapolations from the rotation curve that assume a spherical halo. Our result can be explained by a larger normalisation for the local Milky Way rotation curve, an oblate dark matter halo, a local disc of dark matter, or some combination of these."

04 August 2012

Plastination 3

Plastination 3


I blogged about Plastination, a potential alternative to cryonics, and suggested storing, along with the patient, an EEG of their healthy brain activity.


Some people misunderstood the point of doing that. It is to provide a potential cross-check. I won't try to guess how future simulators might best use the cross-check.

And it isn't intended to rule out storing fMRI or MEG data also, although neither seems practical to get every six months or so.


But what to my wondering eyes should appear a few days after I wrote that? MEG-MRI, a technology that claims unprecedented accuracy in measuring brain activity.

So I wrote this follow-up post to note that MEG-MRI as another potential source of cross-checking information.

19 July 2012

Plastination 2

Plastination 2


I blogged about Plastination, a potential alternative to cryonics.

Luke's comment got me to write more (always a risk commenters take)

The biggest problem

The big problem in plastination is that it is hit-or-miss. What it preserves, it seems to preserve well, but in current SOA, whole sections of the brain might be unpreserved. The researchers who developed it didn't care about bringing their lab rats back from the dead, so that was considered good enough.

From a layman's POV, infusing the whole brain doesn't look harder than cryonics infusing the whole brain with cryoprotectant, but there could be all sorts of technical details that make me wrong.

So which wins, plastination or cryonics?

A lot depends on which you judge more likely in a reasonable time-frame: repair nanobots or emulation. I'd judge emulation much more likely. We can already emulate roundworms and have partly emulated fruit flies. So I suspect Moore's law makes human emulation in a reasonable time-frame much more likely than not.

Can we prove it?

One thing I like about plastination-to-emulation is that we could prove it out now. Teach a fruit fly some trick, or let it learn something meaningful to a fruit fly - maybe the identity of a rival, if fruit flies learn that.

Plastinate its brain, emulate it. Does it still know what it learned? And know it equally well? If so, we can justifiably place some confidence in this process. If not, we've just found a bug to fix.

So with plastination-to-emulation, we have the means to drive a debugging cycle. That's very good.

Difference in revival population dynamics

One difference that I don't know what to make of: If they work, the population dynamics of revival would probably be quite different.

In plastination-to-emulation, revival becomes possible for everybody at the same time. If you can scan in one plastinated brain, you can scan any one.

In cryonics-to-cure-and-thaw, I expect there'd be waves as the various causes of death were solved. Like, death from sudden heart attack might be cured long before Alzheimer's disease became reversible, if ever.

11 July 2012

Plastination - the new cryonics?

Plastination - an alternative to cryonics


I'll assume that everyone who reads my blog has heard of cryonics.


Chemopreservation has been known for some time, but has recently received some attention as a credible alternative to cryonics. These pages (PLASTINATION VERSUS CRYONICS, Biostasis through chemopreservation) make the case well. They also explain some nuances that I won't go into. But basically, chemopreservation stores you more robustly by turning your brain into plastic. There's no liquid nitrogen required, no danger of defrosting. With chemopreservation, they can't just fix what killed you and "wake you up", you'd have to be scanned and uploaded.

Are thawing accidents likely? Yes.

Cryonics organizations such as Alcor just wouldn't let you thaw, because they take their mission very seriously?
Without casting any aspersions on cryonics organizations' competence and integrity, consider that recently, 150 autistic brains being stored for research at McLean Hospital were accidentally allowed to thaw (here, here, here). McLean and Harvard presumably take their mission just as seriously as Alcor and have certain organizational advantages.

My two cents: Store EEG data too

In the cryonics model, storing your EEG's didn't make much sense. When (if) resuscitation "restarted your motor", your brainwaves would come back on their own. Why keep a reference for them?
But plastination assumes from the start that revival consists of scanning your brain in and emulating it. Reconstructing you would surely be done computationally, so any source of information could be fed into the reconstruction logic.
Ideally the plastinated brain would preserve all the information that is you, and preserve it undistorted. But what if it preserved enough information but garbled it? Like, the information that got thru was ambiguous. There would be no way to tell the difference between the one answer that reconstructs your mind correctly and many other answers that construct something or someone else.
Having a reference point in a different modality could help a lot. I won't presume to guess how it would best be used in the future, but from an info-theory stance, there's a real chance that it might provide crucial information to reconstruct your mind correctly.
And having an EEG reference could provide something less crucial but very nice: verification.

20 June 2012

Parallel Dark Matter - make that five

Hold that last brane


I have been blogging about a theory I call Parallel Dark Matter (and here and here), which I may not be the first to propose, though I seem to be the first to flesh the idea out.

Recently I posted (Brown dwarfs may support PDM) that wrt brown dwarfs, the ratio between the number we see by visual observation and the number that we seem to see by gravitational microlensing, 1/5, is similar to what PDM predicts.

I had another look and it turns out I was working from bad data. The ratio is not just similar, it's the same.

Dark matter accounts for 23% of the universe's mass, while visible matter accounts for 4.6% (the remainder is dark energy). Ie, exactly 1/5. I don't know why I accepted a source that put it as 1/6; lazy, I guess.

That implies 5 dark branes rather than 6. I have updated my old PDM posts accordingly.

11 June 2012

Brown dwarfs may support PDM

Some evidence from brown dwarfs may support PDM


I have been blogging about a theory I call Parallel Dark Matter (and here and here), which I may not be the first to propose, though I seem to be the first to flesh the idea out.

We see fewer brown dwarfs than we expected

In recent news, here and here, a visual survey of brown dwarfs (Wide-field Infrared Survey Explorer, or WISE) shows far fewer of them than astronomers expected.
Previous estimates had predicted as many brown dwarfs as typical stars, but the new initial tally from WISE shows just one brown dwarf for every six stars.
Note the ratio between observed occurence and predicted occurence: 1/6. That's not the last word, though. Davy Kirkpatrick of WISE says that:
the results are still preliminary: it is highly likely that WISE will discover additional Y dwarfs, but not in vast numbers, and probably not closer than the closest known star, Proxima Centauri. Those discoveries could bring the ratio of brown dwarfs to stars up a bit, to about 1:5 or 1:4, but not to the 1:1 level previously anticipated

But gravitational lensing appeared to show that they were common

But gravitational microlensing events suggested that brown dwarfs are common; if they weren't, it'd be unlikely that we'd see gravitational microlensing by them to that degree.
While I don't have the breadth of knowledge to properly survey the argument for brown dwarf commonness, it's my understanding that this was the main piece of evidence for it.

This is just what PDM would predict

PDM predicts that we would "see" gravity from all six branes, but only visually see the brown dwarfs from our own brane.
The ratio isn't exact but seems well within the error bars. They found 33, so leaving out other sources of uncertainty, you'd expect only a 68% chance that the "right" figure - ie, if it were exactly the same as the average over the universe - would be between 27 and 38.
Note that PDM predicts a 1/6 ratio between gravitational observations and visual observations. I emphasize that because in the quotes above, the ratios were between something different, visual observations of brown dwarfs vs visible stars.

18 May 2012




Some years back, I wrote a testing framework for emacs called Emtest. It lives in a repo hosted on Savannah, mirrored here, doc'ed here.


Recently a testing framwork called Cucumber came to my attention. I have multiple reactions to it:

But they left important parts unadopted

But they didn't really adopt table testing in its full power. There are a number of things I have found important for table-driven testing that they apparently have not contemplated:

N/A fields
These are unprovided fields. A test detects them, usually skipping over rows that lack a relevant field. This is more useful than you might think. Often you are defining example inputs to a function that usually produces output (another field) but sometimes ought to raise error. For those cases, you need to provide inputs but there is nothing sensible to put in the output field.
Constructed fields
Often you want to construct some fields in terms of other fields in the same row. The rationale above leads directly there.
Constructed fields II
And often you want to construct examples in terms of examples that are used in other tests. You know those examples are right because they are part of working tests. If they had some subtle stupid mistake in them, it'd have already shown up there. Reuse is nice here.
Persistent fields
This idea is not originally mine, it comes from an article on Gamasutra1. I did expand it a lot, though. The author looked for a way to test image generation (scenes) and what he did was at some point, capture a "good" image the same image generator. Then from that point on, he could automatically compare the output to a known good image.
  • He knew for sure when it passed.
  • When the comparison failed, he could diff the images and see where and how badly; it might be unnoticeable dithering or the generator might have omitted entire objects or shadows.
  • He could improve the reference image as his generator got better.

I've found persistent fields indispensable. I use them for basically anything that's easier to inspect that it is to write examples of. For instance, about half of the Klink tests use it.

They didn't even mention me

AFAICT neither Cucumber nor Gherkin credits me at all. Maybe they're honestly unaware of the lineage of the ideas they're using. Still, it gets tiresome not getting credit for stuff that AFAICT I invented and gave freely to everybody in the form of working code.

They don't use TESTRAL or anything like it.

TESTRAL is the format I defined for reporting tests. Without going into great detail, TESTRAL is better than anything else out there. Not just better than the brain-dead ad hoc formats, but better than TestXML.

BDD is nice

Still, I think they have some good ideas, especially regarding Behavior Driven Development. IMO that's much better than Test-Driven Development2.

In TDD, you're expected to test down to the fine-grained units. I've gone that route, and it's a chore. Yes, you get a nice regression suite, but pretty soon you just want to say "just let me write code!"

In constrast, where TDD is bottom-up, BDD is top-down. Your tests come from use-cases (which are structured the way I structure inline docstrings in tests, which is nice, and just how much did you Cucumber guys borrow?) BDD looks like a good paradigm for development.

Not satisfied with Emtest tables, I replaced them

But my "I was first" notwithstanding, I'm not satisfied with the way I made Emtest do tables. At the time, because nobody anywhere had experience with that sort of thing, I adopted the most flexible approach I could see. This was tag-based, an idea I borrowed from Carsten Dominick's org-mode3.

However, over the years the tag-based approach has proved too powerful.

  • It takes a lot of clever code behind the scenes to make it work.
  • Maintaining that code is a PITA. Really, it's been one of the most time-consuming parts of Emtest, and always had the longest todo list.
  • In front of the scenes, there's too much power. That's not as good as it sounds, and led to complex specifications because too many tags needed management.
  • Originally I had thought that a global tag approach would work best, because it would make the most stuff available. That was a dud which I fixed that years ago.

So, new tables for Emtest

So this afternoon I coded a better table package for Emtest. It's available on Savannah right now; rather, the new Emtest with it is available. It's much simpler to use:

define a table, giving arguments:
A docstring for the entire table.
A list of column names. For now they are simply symbols, later they may get default initialization forms and other help
The remaining arguments are rows. Each begins with a namestring.
Evaluate body once for each row, with the row bound to var-sym
Given a table row and a field symbol, get the value of the respective field

I haven't added Constructed fields or Persistent fields yet. I will when I have to use them.

Also added foreign-tester support

Emtest also now supports foreign testers. That is, it can communicate with an external process running a tester, and then report that tester's results and do all the bells and whistles (persistence, organizing results, expanding and collapsing them, point-and-shoot launching of tests, etc) So the external tester can be not much more than "find test, run test, build TESTRAL result".

It communicates in Rivest-style canonical s-expressions, which is as simple a structured format as anything ever. It's equally as expressive as XML and there exist interconverters.

I did this with the idea of using it for the Functional Reactive Programming stuff I was talking about before, if in fact I make a test implementation for it (Not sure).

And renamed to tame the chaos

At one time I had written Emtest so that the function and command prefixes were all modular. Originally they were written-out, like emtest/explorer/fileset/launch. That was huge and unwieldy, so I shortened their prefixes to module unique abbreviations like emtl:

But when I looked at it again now, that was chaos! So now

  • Everything the user would normally use is prefixed emtest
    • Main entry point emtest
    • Code-editing entry point emtest:insert
    • "Panic" reset command emtest:reset
    • etc
  • Everything else is prefixed emt: followed by a 2 or 3 letter abbreviation of its module.

I haven't done this to the define and testhelp modules, though, since the old names are probably still in use somewhere.


1 See, when I borrow ideas, I credit the people it came from, even if I have improved on it. Can't find the article but I did look; it was somewhat over 5 years ago, one of the first big articles on testing there.

2 Kent Beck's. Again, crediting the originator.

3 Again credit where it's due. He didn't invent tags, of course, and I don't know who was upstream from him wrt that.

12 May 2012

Mutability And Signals 3

Mutability And Signals 3


I have a crazy notion of using signals to fake mutability, thereby putting a sort of functional reactive programming on top of formally immutable data. (here and here)


So recently I've been looking at how that might be done. Which basically means by fully persistent data structures. Other major requirements:

  • Cheap deep-copy
  • Support a mutate-in-place strategy (which I'd default to, though I'd also default to immutable nodes)
  • Means to propagate signals upwards in the overall digraph (ie, propagate in its transpose)

Fully persistent data promises much

  • As mentioned, signals formally replacing mutability.
  • Easily keep functions that shouldn't mutate objects outside themselves from doing so, even in the presence of keyed dynamic variables. For instance, type predicates.
  • From the above, cleanly support typed slots and similar.
  • Trivial undo.
  • Real Functional Reactive Programming in a Scheme. Implementations like Cell and FrTime are interesting but "bolted on" to languages that disagree with them. Flapjax certainly caught my interest but it's different (behavior based).
  • I'm tempted to implement logic programming and even constraint handling on top of it. Persistence does some major heavy lifting for those, though we'd have to distinguish "immutable", "mutate-in-place", and "constrain-only" versions.
  • If constraint handling works, that basically gives us partial evaluation.
  • And I'm tempted to implement Software Transactional Memory on it. Once you have fully persistent versioning, STM just looks like merging versions if they haven't collided or applying a failure continuation if they have. Detecting in a fine-grained way whether they have is the remaining challenge.

DSST: Great but yikes

So for fully persistent data structures, I read the Driscoll, Sarnak, Sleator and Tarjan paper (and others, but only DSST gave me the details). On the one hand, it basically gave me what I needed to impelement this, if in fact I do. On the other hand, there were a number of "yikes!" moments.

The first was discovering that their solution did not apply to arbitrary digraphs, but to digraphs with a constant upper bound p on the number of incoming pointers. So the O(1) cost they reported is misleading. p "doesn't count" because it's a constant, but really we do want in-degree to be arbitrarily large, so it does count. I don't think it will be a big deal because the typical node in-degree is small in every code I've seen, even in some relentlessly self-referring monstrosities that I expect are the high-water mark for this.

Second yikes was a gap between the version-numbering means they refer to (Dietz et al) and their actual needs for version-numbering. Dietz et al just tell how to efficiently renumber a list when there's no room to insert a new number.

Figured that out: I have to use a level of indirection for the real indexes. Everything (version data and persistent data structure) hold indirect indexes and looks up the real index when it needs it. The version-renumbering strategy is not crucial.

Third: Mutation boxes. DSST know about them, provide space for them, but then when they talk about the algorithm, totally ignore them. That would make the description much more complex, they explain. Yes, true, it would. But the reader is left staring at a gratuitously costly operation instead.

But I don't want to sound like I'm down on them. Their use of version-numbering was indispensable. Once I read and understood that, the whole thing suddenly seemed practical.

Deep copy

But that still didn't implement a cheap deep copy on top of mutate-in-place. You could freeze a copy of the whole digraph, everywhere, but then you couldn't both that and a newer copy in a single structure. Either you'd see two copies of version A or two copies of version B, but never A and B.

Mixing versions tends to call up thoughts of confluent persistence, but IIUC this is a completely different thing. Confluent persistence IIUC tries to merge versions for you, which limits its generality. That would be like (say) finding every item that was in some database either today or Jan 1; that's different.

What I need is to hold multiple versions of the same structure at the same time, otherwise deep-copy is going to be very misleading.

So I'd introduce "version-mapping" nodes, transparent single-child nodes that, when they are1 accessed as one version, their child is explored as if a different version. Explore by one path, it's version A, by another it's version B.


Surprisingly, one part of what I needed for signals just fell out of DSST: parent pointers, kept up to date.

Aside from that, I'd:

  • Have signal receiver nodes. Constructed with a combiner and an arbitrary data object, it evaluates that combiner when anything below it is mutated, taking old copy, new copy, receiver object, and path. This argobject looks very different under the hood. Old and new copy are recovered from the receiver object plus version stamps; it's almost free.
  • When signals cross the mappers I added above, change the version stamps they hold. This is actually trivial.
  • As an optimization, so we wouldn't be sending signals when there's no possible receiver, I'd flag parent pointers as to whether anything above them wants a signal.

Change of project

If I code this, and that's a big if, it will likely be a different project than Klink, my Kernel interpreter, though I'll borrow code from it.

  • It's such a major change that it hardly seems right to call it a Kernel interpreter.
  • With experience, there are any number of things I'd do differently. So if I restart, it'll be in C++ with fairly heavy use of templates and inheritance.
  • It's also an excuse to use EMSIP.


1 Yes, I believe in using resumptive pronouns when it makes a sentence flow better.

Review Inside Jokes 1

Review Inside Jokes 1


I am currently reading Inside Jokes by Matthew M. Hurley, Daniel C. Dennett, and Reginald B. Adams Jr. So far, the book has been enlightening.

Brief summary

Their theory, which seems likely to me, is that humor occurs when you retract an active, committed, covertly entered belief.
It's active in your mind at the moment. They base this on a Just-In-Time Spreading Activation model.
Covertly entered
Not a belief that you consciously same to. You assumed it "automatically".
A belief that you're sure about, as opposed to a "maybe". To an ordinary degree, not neccessarily to a metaphysical certitude.
And a blocking condition: Strong negative emotions block humor.

Basic humor

What they call "basic" humor is purely in your own "simple" (my word) mental frame. That frame is not interpersonal, doesn't have a theory of mind. Eg, when you suddenly realize where you left your car keys and it's a place that you foolishly ruled out before, which is often funny, that's basic humor.

Non-basic humor

Non-basic humor occurs in other mental frames. These frames have to include a theory of mind. Ie, we can't joke about clams - normal clams, not anthropomorphized in some way. I expect this follows from the requirement of retracting a belief in that frame.

Did they miss a trick?

They say that that in third-person humor, the belief we retract is in our frame of how another person is thinking, what I might call an "empathetic frame".
I think that's a mis-step. A lot of jokes end with the butt of the joke plainly unenlightened. It's clear to everyone that nothing has been retracted in his or her mind. ISTM this doesn't fit at all.

Try social common ground instead.

I think they miss a more likely frame, one which I'd call social common ground. (More about it below)
We can't just unilaterally retract a belief that exists in social common ground. "Just disbelieving it" would be simply not doing social common ground. And we as social creatures have a great deal of investment in it.
To retract a belief in social common ground, something has to license us to do so, and it generally also impels us to. ISTM the need to create that license/impulse explains why idiot jokes are the way they are.
This also explains why the butt of the joke not "getting it" doesn't prevent a joke from being funny, and even enhances the mirth. His or her failure to "get it" doesn't block social license to retract.
Covert entry fits naturally here too. As social creatures, we also have a great deal of experience and habit regarding social common ground. This gives plenty of room for covert entry.

What's social common ground?

Linguistic common ground

"Common ground" is perhaps more easily explained in linguistics. If I mention (say) the book Inside Jokes, then you can say "it" to refer to it, even though you haven't previously mentioned the book yourself. But neither of us can just anaphorically1 refer to "it" when we collectively haven't mentioned it before.
We have a sort of shared frame that we both draw presuppositions from. Of course, it's not really, truly shared. It's a form of co-operation and it can break. But normally it's shared.

From language common ground to social common ground

I don't think it's controversial to say that:
  • A similar common ground frame always holds socially, even outside language.
  • Normal people maintain a sense of this common ground during social interactions.
  • Sometimes they do so even at odds with their wishes, the same way they can't help understanding speech in their native language.


1 Pedantry: There are also non-anaphoric "it"s, such as "It's raining."

05 May 2012

I may not be the first to propose PDM

I may not be the first to propose PDM


Previously I advanced Parallel Dark Matter, the theory dark matter is actually normal matter that "lives" on one of 5 "parallel universes" that exchange only gravitational force with the visible universe. I presumptively call these parallel universes "branes" because they fit with braneworld cosmology.

Spergel and Steinhardt proposed it earlier

They may have proposed it in 2000, and in exactly one sentence.
It's not exactly the same: They don't explicitly propose that it simply is ordinary matter on another brane, and they do not propose multiple branes accounting for the ratio of dark matter to visible matter. But it's close enough that in good conscience I have to let everyone know that they said this first.
AFAICT they and everyone else paid no further attention to it.
The relevant sentence is on page 2: "M-theory and superstrings, for example, suggest the possibility that dark matter fields reside on domain walls with gauge fields separated from ordinary matter by an extra (small) dimension".

04 May 2012

The nature of Truth

The nature of Truth


I recently finished reading A User's Guide To Thought And Meaning by Ray Jackendoff. In it, he asks "What is truth?" and mentions several problems with what we might call the conventional view.

He didn't really answer the question, but on reading it, a surprising answer occured to me.


Truth is just what valid reasoning preserves.

No more and no less. I'll abbreviate it T=WVP

Not "about the world"

The conventional view is that truths are about the world, and valid reasoning merely doesn't drop the ball. I'll abbreviate it CVOT. To illustrate CVOT, consider:

All elephants are pink
Nelly is an Elephant
Nelly is pink

where the reasoning is valid but the major premiss is false, and so is the conclusion.

Since "about the world" plays no part in my definition, I feel the need to justify why it needn't and shouldn't.

"About the world" isn't really about the world

Consider the above example. Presumably you determined that "All elephants are pink" is false because at some point you saw an elephant and it was grey1.

And how did you determine that what you were seeing was an elephant and it wasn't pink? Please don't stop at "I saw it and I just knew". I know that readers of this blog have more insight into their thinking than that. Your eyes and your brain interpreted something as seeing a greyish elephant. I'm not saying it wasn't one, mind you. But you weren't born knowing all about elephants. You had to learn about them. You even had to learn the conventional color distinctions - other cultures distinguish the named colors differently.

So you used reasoning to determine that this sensory input indicated an elephant. Not conscious reasoning - the occipital lobe does an enormous amount of processing without conscious supervision, and not declarative facts - more like skills to interpret sights correctly. But consciously or not, you used a type of reasoning.

So the major premiss ("All elephants are pink") wasn't directly about the world after all. We reached it by reasoning. So on this level at least, T=WVP looks unimpeachable and CVOT looks problematic.

Detour: Reasoning and valid deductive reasoning

I'll go back in a moment and finish that argument, but first I must clarify something.

My sharp-eyed readers will have noticed that I first talked about valid reasoning, but above I just said "reasoning" and meant something much broader than conscious deductive reasoning. I'm referring to two different things.

Deductive reasoning is the type of reasoning involved in the definition, because only deductive reasoning can be valid. But other types of reasoning too can be characterized by how well or poorly they preserve truth in some salient context, even while we define truth only by reference to valid reasoning. Truth-preservation is not the only virtue that reasoning can have. For instance, one can also ask how well it finds promising hypotheses or explores ramifications. Truth-preservation is just the aspect that's relevant to this definition.

One might object that evolutionarily, intuitive reasoning is not motivated by agreeing with deductive reasoning, but by usefulness. Evolution provided us with reasoning tools not because it has great respect for deductive reasoning, but because they are "good tricks" and saved the lives of our remote ancestors. In some cases useful mental activity and correct mental activity part company, for instance a salesperson convincing himself or herself that the line of products really is a wonderful bargain, the better to persuade the customers, when honestly it's not.

True. It's a happy accident that evolutionary "good tricks" gave us tools that strongly tend to agree with deductive reasoning. But accident or not, we can sensibly characterize other acts of reasoning by how well or poorly they preserve truth.

Can something save CVOT?

I said that "on this level at least, T=WVP looks unimpeachable and CVOT looks problematic."

Well, couldn't we extend CVOT one level down? Yes we could, but the same situation recurs. The inputs, which look at first like truths or falsities about the world, turn out on closer inspection to be the products of yet more reasoning (in the broad sense). And not neccessarily our own reasoning, they could be "pre-packaged" by somebody else. This gives us no better reason to expect that they truthfully describe the real world.

Can we save CVOT by looking so far down the tower2 of mental levels that there's just no reasoning involved? We must be careful not to stop prematurely, for instance at "I just see an elephant". Although nobody taught us how to see and we didn't consciously reason it out, there is a reasoning work being done underneath there.

What if we look so far down that no living creature has mentally operated on the inputs? For instance, when we smell a particular chemical, say formaldehyde, because our smell receptors match the chemical's shape?

Is that process still about the world? Yes, but not the way the color of elephants was. It tells you that there are molecules of formaldehyde at this spot at this time. That's much more limited.

CVOT can't stop here. It wouldn't be right to treat this process as magically perceiving the world. A nerve impulse is not a molecule of formaldehyde. To save CVOT, truth about the world still has to enter the picture somehow. There's still a mediating process from inputs (a molecule of formaldehyde is nearby) to outputs (sending an impulse).

But by now you can see the dilemma for CVOT: in trying to find inputs that are true but aren't mediated by reasoning, we have to keep descending further, but in doing so, we sacrifice aboutness and still face the same problem of inputs.

Can CVOT just stop descending at some point? Can we save it by poositing that the whole process (chemical, cell, impulse) produces an output that's true about the world, and furthermore that this truth is achieved other than by correctly processing true inputs about the world?

Yes for the first part, no for the second. If we fool the smell receptor, for instance by triggering it with electricity instead of formaldehyde, it will happily communicate a falsehood about the world, because it will have correctly processed false inputs.

So we do need to be concerned about the truth of the inputs, so CVOT does need to keep descending. It has to descend to natural selection at this point. Since I believe in the unity of design space, I think this change of destination makes no difference to the argument, so I merely mention it in passing.

Since we must descend as long as there are inputs, where will it end? What has outputs but no inputs? What can be directly sensed without any mediation?

If there is such a level to land at, I can only imagine it as a level of pointillistic experiences. Like Euclid's points, they have no part. One need not assemble them from lower inputs because they have no structure to require assembly.

If such pointillistic experiences exist, they aren't about anything because they don't have any structure. At best, a pointillistic experience indicates transiently, without providing further context, a single interaction in the world. Not being about anything, they can't be truths about the world.

So CVOT is not looking good. It needs its ultimate inputs to have aboutness and they don't, not properly anyways.

Does T=WVP do better?

If CVOT has problems, that doesn't neccessarily mean that T=WVP doesn't. Can T=WVP offer a coherent view of truth, one that doesn't need magically true inputs?

I believe it can. I said earlier that truth-preservation is not the only virtue that reasoning can have. Adbuctive reasoning can (under felicitous conditions) find good explanations and inductive reasoning can supply probable facts even in the absence of inputs. Bear in mind that I include unconscious, frozen, and tacit processes here, just as long as they are doing any reasoning work.

So while deductive reasoning doesn't drop the ball, other types of reasoning can actually improve the ball. Could they improve the ball so much that really, as processed thru this grand and mostly unconscious tower of reasoning, they actually create the ball? Could they incrementally transform initial inputs that aren't even properly about the world into truth as we know it? I contend that this is exactly how it happens.

Other indications that "about the world" just doesn't belong

Consider the following statements3:

  1. Sherlock Holmes was a detective
  2. Sherlock Holmes was a chef

Notice I didn't say "fictional". You can figure out that they're talking about fiction, but that's not in the statements themselves.

I assume your intuition, like mine, is that (1) is true (or true-ish) and (2) is false (or false-ish).

In CVOT, they're the same, because they're both meaningless (or indeterminate or falsely presupposing). (1) can't naturally be privileged over (2) in CVOT.

In T=WVP, (1) is privileged over (2), as it should be. Both are reasoning about Arthur Conan Doyle's fiction. (1) proceeds from healthy, unexceptional reasoning about them, while (2) somehow imagines Holmes serving the hound of the Baskervilles to dinner guests. (1) clearly proceeds from better reasoning than (2), and in T=WVP this justifies its superior truth status.

CVOT could awkwardly salvaged by saying that we allow accomodation, so we map "Sherlock Holmes" to the fictional detective by adding the qualifier "fictional" to the statements. But then why can't we fix (2) with accomodation too? Doyle never wrote "Cookin' With Sherlock", but it's likely that someone somewhere has. Why can't we accomodate to that too? And if we accomodate to anything anyone ever wrote, including (say) Alice In Wonderland and Bizzaro world, being about the world means almost nothing.

Furthermore, if we accept accomodation as truth-preserving, we risk finding that "All elephants are pink" is true too4 because "by pink, you must mean ever so slightly pinkish grey" or "by elephant, you must mean a certain type of mouse".

I could reductio further, but I think I've belabored it enough.

Circularity avoided in T=WVP

Rather than defining truth as what valid reasoning preserves, it's more usual to define valid reasoning as truth-preserving operations. Using both definitions together would make a circular definition.

But we can define valid reasoning in other ways. For instance, in terms of tautologies - statements that are always true no matter what value their variables take. A tautology whose top functor is "if" (material implication) describes a valid reasoning operation. For instance:

(a & (a -> b)) -> b

In English, "If you have A and you also have "A implies B", then you have B". That's modus ponens and it's valid reasoning.

I said tautologies are "statements that are always true", which is the conventional definition of them, but it contains "true". Again I need to avoid a circular definition. So I just define tautology and the logical operations in terms of a matrix of enumerated values (a truth-table). We don't need to know the nature of truth to construct such a matrix or to examine it. We can construct operations isomorphic to the usual logical operations simply in terms of opaque symbols:


Some other virtues of this definition


  • It recovers the Quinean disquotation sense of truth. Ie, a quoted true statement, interpreted competently, is true.
  • It recovers our ordinary sense of truth (I hinted at this above)
  • It recovers the property that truth has where the chain is as strong as its weakest link.


1 Or you trusted somebody else who told you the saw a grey elephant. In which case, read the argument as applying to them.

2 I'm talking as if it was a tower of discrete levels only for expository convenience. I don't think it's all discrete levels, I think it's the usual semi-fluid, semi-defined situation that natural selection creates.

3 Example borrowed from Ray Jackendoff

4 Strictly speaking, we would only do this for presuppositions, but if the speaker mentions "the pink elephant" at some point the reductio is good to go.

27 April 2012

Review: Ray Jackendoff's User's Guide To Thought And Meaning

A User's Guide To Thought And Meaning


I just finished A User's Guide To Thought And Meaning by Ray Jackendoff, a linguist best known for X-bar theory.


I wasn't impressed with it. Although he starts off credibly if pedestrianly, the supporting arguments for his main thesis are fatally flawed. I found it annoying as I got further into the book to see him building on a foundation that I considered unproven and wrong.

His main thesis can be summarized by a quote from the last chapter:

What we experience as rational thinking consists of thoughts linked
to language.  The thoughts themselves aren't conscious.

A strange mistake

The foregoing quote leads me to the strangest assumption in the book. He says that our mental tools are exactly our language tools. He does allow at one or two points that visual thinking might qualify too.

That may be true of Ray, but I know for a fact that it's not true of me. I often have the experience of designing some piece of source code in my head, often when I'm either falling asleep or waking up. Then later I go to code it, and I realize that I have to think of good names for the various variables and functions. I hadn't used names before when I handled them mentally because I wasn't handling them by language (as we know it). I wasn't handling them by visual imagery either. Of course I was mentally handling them as concepts.

There are other indicators that we think in concepts: The tip-of-the-tongue experience and words like "Thingamajig" and "whatchamacallit". In the chapter Some phenomena that test the Unconscious Meaning Hypothesis, Ray mentions these but feels that his hypothesis survives them. It's not clear to me why he concludes that.

What is clear to me is that we (at least some of us) think with all sorts of mental tools and natural language is only one of them.

If he meant "language" in a broad sense that includes all possible mental tools, which he never says, it makes his thesis rather meaningless.

Shifting ground

Which brings me to a major problem of the book. Although he proposes that all meaning is unconscious, his support usually goes to show that some meaning (or mental activity) is unconscious. That's not good enough. It's not even surprising; of course foundational mental activity is unconscious.

To be fair, I will relate where he attempts to prove that all meaning is unconscious, from the chapter What's it Like To Be Thinking Rationally? He does this by quoting neuropsychologist Karl Lashey:

No activity of mind is ever conscious.  This sounds like a paradox but
it is nonetheless true.  There are order and arrangement, but there is
no experience of the creation of that order.  I could give numberless
examples, for there is no exception to the rule.  

Unfortunately, Lashey's quote fails to support this; again he gives examples and takes himself to have proven the general case. Aside from this, he simply pronounces his view repeatedly and forcefully. Jackendoff says "I think this observation is right on target" and he's off.

One is tempted to ask, what about:

  • Consciously deciding what to think about.
  • Introspection
  • Math and logic, where we derive a meaning by consciously manipulating symbols? Jackendoff had talked about what philosophers call the Regression Problem earlier in the chapter, and I think he takes himself to have proven that symbolic logic is unconscious too, but that's silly. He also talks about the other senses "all" being misleading in syllogisms, but that's a fact about natural language polysemy, not about consciousness.

None of this is asked, but one is left with the impression that all of these "don't count". It makes me want to ask, "What would count? If nothing counts as conscious thought, then you really haven't said anything."

One last thing

In an early chapter Some Uses of ~mean~ and ~meaning~, he tries to define meaning. Frustratingly, he seems unaware of the definition I consider best, which is generally accepted in semiotics:

X means Y just if X is a reliable indication of Y

Essentially all of the disparate examples he gives fall under this definition, either directly or metonymically.

Since the meaning of "meaning" is central to his book, failure to use find and use this definition gives one pause.

01 March 2012

Digrasp - The options for representing digraphs with pairs

Digrasp 3


This is a long-ish answer to John's comment on How are dotted graphs second-class?, where he asks how I have in mind to represent digraphs using pairs.

The options for representing digraphs with pairs

I'm not surprising that it comes across as unclear. I'm deliberately leaving it open which of several possible approaches is "right". ISTM it would be premature to fix on one right now.

As I see it, the options include:

  1. Unlabelled n-ary rooted digraph. Simplest in graph theory, strictest in Kernel: Cars are nodes, cdrs are edges (arcs) and may only point to pairs or nil. With this, there is no way to make dotted graphs or lists, so there is no issue of their standing nor any risk of "deep" conversion to dotted graphs. It loses or alters some functionality, alists in particular.
  2. Labelled binary rooted digraph: More natural in Kernel, but more complex and messier in graph theory. Cars and cdrs are both edges, and are labelled (graph theory wise) as "car" or "cdr". List-processing operations are understood as distinguishing the two labels and expecting a pair in the cdr. They can encounter unexpected dotted ends, causing errors.
  3. Dynamic hybrid: Essentially as now. Dottedness can be checked for, much like with `proper-list?' but would also be checkable recursively. There's risk of "deep" conversion from one to the other; list-processing operations may raise error.
  4. Static hybrid: A type similar to pair (undottable-pair) can only contain unlabelled n-ary digraphs, recursively. List operations require that type and always succeed on it. There's some way to structurally copy conformant "classic" pair structures to undottable-pair structures.
  5. Static hybrid II: As above, but an undottable-pair may hold a classic pair in its car but not its cdr, and that's understood as not part of the digraph.

And there's environments / labelled digraphs

By DIGRASP, I also mean fully labelled digraphs in which the nodes are environments and the labels are symbols. But they have little to do with the list-processing combiners.

27 February 2012

How are dotted graphs second class?



I said that dotted graphs seem to be second class objects and John asked me to elaborate.

How are dotted graphs second class?

A number of combiners in the spec accept cyclic but not dotted lists. These are:

  • All the type predicates
  • map and for-each
  • list-neighbors
  • append and append!
  • filter
  • reduce
  • "Constructably circular" combiners like $sequence

So they accept any undotted graph, but not general dotted graphs. This occurs often enough that to make dotted graphs seem second-class.

Could it be otherwise?

The "no way" cases

For some combiners I think there is no sane alternative, like `pair?' and the appends.

The "too painful" cases

For others, like filter or list-neighbors, the dotted end could have been treated like an item, but it seems klugey and irregular, and they can't do anything sane with a "unary dotted list", ie a non-list.

$sequence etc seem to belong here.

map and for-each

For map and for-each, dotted lists at the top level have the same problem as above, but ISTM "secondary" dotted lists and lists of varying length could work.

Those could be accomodated by passing another combiner argument (proc2) that, when any list runs out, is given the remaining tails isomorphically to Args, and its return is used as the tail of the return list. In other words, map over a "rectangle" of list-of-list and let proc2 work on the irregular overrun.

The existing behavior could be recaptured by passing a proc2 that, if it gets all nils, returns nil, and otherwise raises error. Other useful behaviors seem possible, such as continuing with default arguments or governing the length of the result by the shortest list.


Reduce puzzles me. A cyclic list's cycle after it is collapsed to a single item resembles a dotted tail, and is legal. Does that imply that a dotted list should be able to shortcut to that stage?