## Wednesday, December 3, 2014

### “Mummy, why is lying wrong?”

“Mummy, why is lying wrong?”

“When you lie to people, you hurt their feelings. It’s bad to hurt people’s feelings.”

“Mummy, why is lying wrong?”

“Do you remember the story of the little shepherd, who cried ‘wolf!’ when there were no wolves to find, and whose word nobody trusted for all their lies and mischief? If you were to lie too much, my child, then people would not believe you when you had something important to say.

“The trust of others is a precious commodity, child, and you mustn’t squander it without good reason. Be truthful, and your truth may always be heard.”

“Mummy, why is lying wrong?”

“Lying isn’t always wrong, my child!

“When your teacher asks you how you are, what do you say? You say, ‘I’m fine, thank you, and how are you?’. You say that even if you aren’t fine. Because you’re supposed to lie. That lie is just part of the rules for how we talk to each other!

“When you ask me about the tooth fairy, Mummy lies and pretends it’s a real thing. Even though it isn’t! I do it because it makes you excited about losing your tooth instead of scared. That lie makes you happy instead of thinking about the pain!

“When the mayor says he won’t take money away from the library, he’s lying because he needs to get reelected. That lie is just part of his job. If he didn’t lie, he would be replaced by someone who was a better liar! Wouldn’t that be funny?

“When I tell you that lying is wrong, that’s a lie too. And I tell you that lie to make my life easier.”

“Mummy, why is lying wrong?”

“It’s okay for you to lie. Just make sure nobody else does.”

“Mummy, why is lying wrong?”

“When you’re all grown up, my child, you’ll understand that you should never set rules that contradict themselves. Imagine the opposite rule. Imagine if everybody was allowed to lie whenever they wanted! Then there would hardly be such a notion as truth for us to define lying by! ‘Lying is okay’ contradicts itself; it would be a terrible universal rule.

“Therefore, lying is wrong.”

“Mummy, why is lying wrong?”

“...Mummy?”

“I’m not even real.”

“Mummy, why is lying wrong?”

“Imagine all the happiness belonging to all the people in the whole world, my child. When two people become friends, there is even more happiness in all. When you scrape your knee, you are hurt and there is less.

“Lying may beget you a little happiness, but at the cost of others’. For when your friends find out they were lied to, or when the consequences of that lie affect them, they will lose double the happiness you gained. And there will be less happiness in the whole world to go around!

“We must all always endeavour to make there be more happiness, more Good. And so we mustn’t tell lies, lest we take happiness away from the world.”

“Mummy, why is lying wrong?”

“All acts are wrong, my child. No choice you make will ever be pure, without consequences. ‘Lying is wrong’ does not mean ‘don’t lie’. It means ‘lie, but lie knowing the costs’.”

“Mummy, why is lying wrong?”

“The same reason all wrong things are wrong — they cost us the beauty and harmony that the world has given us. Stealing your little cousin’s toy is wrong because it takes away the beauty of childhood innocence. Shining your magnifying glass on the ants is wrong because it takes away the beauty of their lives and the wonderful natural order that they are a part of.

“Lying takes away the beauty of people sharing ideas with each other.”

“Mummy, why is lying wrong?”

“Your Mummy feels an awful feeling in the pit of her stomach when people lie. That feeling is a visceral reaction of disgust, and those are what help us tell right from wrong.

“Other things disgust Mummy too. People shouting at each other and hurting each other’s feelings. Blood. Homophobia. Interracial marriage. Postmodern art. Videos of childbirth. Vulgar words. By trusting my intuition I learn that these, too, are wrong.

“In time I will help you learn what to be disgusted by. Until then, just know that lying is wrong.”

“Mummy, why is lying wrong?”

“Did you know that, once upon a time, there were two clans, the Diamond Clan and the Zephyr Clan? The clans were separated by a great valley, but they were very similar. They lied sometimes, they stole from each other sometimes, they used their fists instead of their words sometimes.

“Life was not too bad in these clans, but people always had to pay extra attention to guarding their precious things, to telling truth from lies. Every time you wanted to buy a loaf of bread from someone, you would have to check extra carefully to make sure that they hadn’t hollowed it out, and they would have to check that your gold pieces weren’t fool’s gold. Imagine how difficult it would have been to go to the shops!

“One day, the Great Philosophers of the Zephyr Clan gathered all the clanspeople together. They announced a grand rule that everyone would have to follow: tell the truth, or you will be in trouble. Do not steal, or you will be in trouble.”

“At first, people did not like the rules. Why should anyone else tell them when they were allowed to lie, or when they were allowed to take things? And, in truth, people never quite ended up liking those rules. But a strange thing happened. The people of the Zephyr clan became more productive. They knew that their neighbours wouldn’t steal from them, so they could spend more time working their fields. They trusted other people to pay them at the end of the day for building their roads, and were trusted in turn. They could work together, they could work for each other, they could do so many things they couldn’t have before.

“And it so happened that the Zephyr clan grew and prospered, while the Diamond clan did not.

“Lying, child, became ‘wrong’ for the Zephyr clanspeople when they decided it was wrong. But they gained something different instead. They traded their freedom to lie and to take what they found, for different kinds of freedom built upon trust or property or whatever else.

“And to this day, their descendants tell people, ‘don’t lie’.”

“Mummy, why is lying wrong?”

“Because it is.”

## Tuesday, November 4, 2014

### Don't worry, everything is terrible

(CW: suicide, mental illness, arbitrary dichotomies)

Say that you want to advise a friend against a course of action you believe to be against their best interests — punching their boss, running away from home, not running away from home, staying in a loveless relationship, etc. Usually this will be a case where from their viewpoint, the ‘unwise’ decision seems like the better one (or at least comparably good), whereas from your viewpoint the ‘unwise’ decision is obviously worse.

(Your judgement may not necessarily be right, either, but let’s simplify things by making that assumption and removing the ethical questions related to bad or paternalistically ignorant advice. This tends to restrict us to cases where you both have similar knowledge of the situation, and where being removed from the situation is an advantage. Of course, impartiality doesn’t always mean better decisions! Hence ‘assumption’.)

There are two broad classes of counsel you can provide: positive or negative.

The positive class involves suggesting to your friend that they’re undervaluing the ‘wise’ option(s) — their boss isn’t really that insufferable after all, they’ll feel so much better after they let this relationship go, they’ll win that prize if they keep training hard enough.

Conversely, the negative class of counsel involves suggesting to your friend that they’re overvaluing their ‘unwise’ option(s) — if they punch their boss they’ll go to jail, if they stay with their partner they’ll just continue to fight, if they give up training they’ll have let down everyone who was supporting them.

It’s pretty clear that, from a well-being perspective, telling your friend that “it’s better than you think” is strictly kinder than “it’s worse than you think”. In a case where both options feel unappealing to them (and why else would they be struggling with the decision?) then the former alleviates stress where the latter adds to it. Nobody emotionally benefits from having it affirmed to them that all their options are terrible.

This is perhaps (especially?) pertinent in the case of endogenous (internally caused) thought patterns: think binge-eating compulsions or suicidal ideation. There is a reason that you’re not supposed to say “think of how sad everyone would be if you died”, and it’s probably related to the fact that it doesn’t make things better. Suicide attempt survivors fished out of rivers never tell the cameras, years later, about how, as their life flashed before their eyes, they realised how little they had to die for.

This suggests a rule of thumb: if you want to dissuade someone you care about from a course of action, frame it positively. Negative framing might achieve the desired results, but it won’t help with the underlying distress.

## Wednesday, October 22, 2014

### Two (sound) axiom systems for linear temporal logic

(CW: mathematical logic.)

Current mood: looking up proof-theoretic treatments of linear temporal logic. (The LTL I encountered in university, primarily in concurrency-related courses, was approached model-theoretically and didn't describe how to prove program properties outside of brute force.)

Alas, it turns out that there are no finitistic (i.e. having decidable axioms) axiomatisations of LTL in general [Sz86]. (This should not be surprising, given that the model-theoretic definition of LTL relies upon the structure of the natural numbers, and hence that we encroach upon Gödelian territory.) It's unclear from my initial research whether this incompleteness result extends to the more restricted case of Boolean/propositional LTL with finite state.

In this post I consider two attempts to axiomatise the most important properties of LTL in a way conducive to proving simple program properties, and show that despite their similar structure, one is a strict logical consequence of the other.

## Monday, September 15, 2014

### Ten books I remember

...goes a meme that’s been doing the rounds on Facebook lately.

I wrote down the first ten I could think of. Then I shuffled them randomly so that I didn’t feel like I was playing favourites. These are those books.

### The Last Samurai, Helen De Witt

On the surface, De Witt’s 2000 novel is a coming-of-age story; a precocious young boy, raised by his equally gifted and eccentric mother, who finds a kind of independence as he seeks out his biological father. But The Last Samurai is so much more than that: it is about cross-generational bonds formed by intellectual kinship; autodidacts swimming in ponds far too small; it is about adventurers and explorers finding new roots in unknown lands; cinematic craft (the mother, Sibylla, raising the boy, Ludo, on Kurosawa’s 1954 Seven Samurai), and the art of storytelling; the loneliness of genius; the disjointed pace of parenthood (fragmented sentences and avant-garde paragraph breaks littering Sibylla’s narrative and suggesting an all-encompassing harried-mindedness); the semiotics of music; the ways in which even the very young look out for their elders.

I have read The Last Samurai only once. I intend to read it many times more. The prose is strange but mesmerising, and the themes speak to me on so many different levels that I get shivers just seeing the book lying patiently on my bedside table.

## Wednesday, August 27, 2014

(CW: coding exercise/study with zero higher purpose.)

In Paul Graham's 2002 essay, Revenge of the Nerds, Graham suggests one metric for the expressive power of a programming language: the ease of writing an accumulator.

[An accumulator is] a function that takes a number n, and returns a function that takes another number i and returns n incremented by i.

For example:

x = accumulator(7);
x(1); // 8
x(3); // 11
y = accumulator(-1);
y(1); // 0


In the parlance of OOP, an accumulator is a NumberIncrementerFactory. In the parlance of programming language theory, an accumulator produces a canonical example of a closure: a function together with a stateful external environment.

Graham uses the relative difficulty of writing accumulators in various languages to demonstrate the elegance/clumsiness of writing non-trivial code in them. (Of course, along with any notion of a metric comes Goodhart's law: a metric stops measuring anything useful if people start treating it as a target. If there are joke languages purpose-built to make writing quines easy, you can bet someone's written a language where there are accumulators as a language primitive.)

* Boldface mine.

## Saturday, August 9, 2014

### Knowledge out of nowhere: a note on Löb's theorem

Löb's theorem states that for any extension of Peano arithmetic, any “reasonable” intra-system definition of the term ‘provable’ and any statement $P$:

If $PA \vdash (Provable(P) \rightarrow P)$ (“$PA$ proves that (a proof of $P$ implies the truth of $P$)...”), then $PA \vdash P$ (“$PA$ proves $P$”).

Example. Let $P$ be “$0 = 1$”. Assume $PA \vdash \lnot Provable(0 = 1)$ (i.e. PA proves that there is no proof of $0 = 1$, or: $PA$ proves its own consistency.)

Then by explosion, $PA \vdash (Provable(0 = 1) \rightarrow 0 = 1)$, and by Löb's theorem, $PA \vdash 0 = 1$ (i.e. $PA$ is inconsistent). This result is Gödel's second incompleteness theorem.

There’s a stronger consequence at play from this strategy here — a consistent extension of $PA$ can’t prove the unprovability of anything within it, even what looks like blindingly obvious examples.

Consider the example of $PA_x$, which is exactly Peano arithmetic with the introduction of an additional named constant, $x$. Notably, $x$ does not appear in any of the axioms. $PA_x$ implies nothing about $x$ that it doesn’t already imply about other numbers.

Then by the same reasoning, if $PA_x \vdash \lnot Provable(x = 0)$, then $PA_x \vdash x = 0$. This conclusion is ridiculous, since from the “outside view” we can see that there should be no proof of $x = 0$ within the system. Given a model of $PA$ (such as the natural numbers), we can easily construct a model of $PA_x$ where $x \neq 0$.

Assuming the consistency of $PA_x$ (which trivially follows from the consistency of $PA$), this implies that $PA_x \not \vdash \lnot Provable(x = 0)$. But why can’t $PA_x$ prove the unprovability of the statement?

## Tuesday, July 29, 2014

### [Review] Offspring Fling OST

The thing that elevates Offspring Fling in my opinion from “cute” to “beautiful” is the soundtrack by Alec Holowka. (My knowledge of the indie games music scene is shamefully lacking, but this is the same composer who did the soundtrack for Aquaria, including its joyful and exploratory first level theme, “The Traveller”.)

To provide some context: Offspring Fling is a game in which one plays as a forest creature rescuing her eponymous offspring from monsters and other woodland hazards. The mechanics are puzzle platformer-ish, though achieving full completion requires pixel-perfect timing and starts to veer towards the “masocore” subgenre of platformer.

The art assets are all low-res small-colour-palette sprites which achieve a homely, pastel crayon look which I believe is technically known as “a less shitty Kirby’s Dreamland 3”. The protagonist herself is round and lemon-furred, with tiny stumps of limbs that belie her strength and a positively saccharine smile that never disappears from her face. Never. Well, except for the “rare” occasion where one of the cubs gets eaten — then we see her face turn to a “goodness, gracious!” look of shock for the half second before the game resets itself to the start of the level. But for the most part: unending saccharine smile.

Oh, and the main game mechanic involves picking up cubs and tossing (“flinging”) them horizontally at high speeds. This is not a game that takes itself very seriously.

## Sunday, June 1, 2014

### Thoughts on "Maleficent"

(Spoilers for Maleficent follow.)

(Also seriously, when I say thoughts, I mean disjointed sentence fragments.)

## Wednesday, May 21, 2014

### Tabula rasa

We leave this world as we entered it:
Genderless.

## Monday, May 5, 2014

### Birdsong

Her egg hatches. She sings.

## Saturday, May 3, 2014

### [Review] The Steep Approach to Garbadale, by Iain Banks

(I'll come clean: this is my first time reading Iain Banks. I haven't read the Culture series, nor The Wasp Factory, nor the rest of his oeuvre. Anybody who wishes to register a complaint should line up behind the You've never read Terry Pratchett!? folks.)

The Steep Approach to Garbadale follows Alban Wopuld, returning to the family fold after many years of self-imposed exile. The family business — a board games empire bigger than Parker Brothers — has been offered a buyout by its American partners, and as the rest of the Wopuld clan descends upon their eponymous ancestral estate for an Extraordinary General Meeting, Alban finds himself revisiting childhood flames and uncovering long-hidden family secrets.

Family is constantly at war with itself in Banks's twenty-first novel, most notably with the sharp family upheaval that follows Alban's teenage love affair with his cousin Sophie: a passion which sees the youths excoriated and separated by the family's stern matriarch, Win. More than a decade on, Alban still grapples ineffectually with the aftermath, and the question of closure weighs heavily over his mind. Years earlier, Alban's mother, Irene, took her own life, in what initially is cast as post-natal depression but which, as the novel progresses, reveals itself to be something more sinister.

Banks makes no secret of the link between water and death here: departed mother Irene in her hunting coat descending into the waters of Garbadale (the water chilling her utterly, sucking the warmth from her body), the adrenaline-seeking mathematician Verushka's traumatic brush with the tsunami of '04 (the thunder of its falling on the exposed reefs and sand, the splintering, crashing sound of it smashing trees), the lakeside fishing expedition beset by hounding rain as the tale approaches its climax. Water here stands for the elements, nature writ large: the characters may choose to weather it, fight it, or embrace it with open arms, but they cannot overcome it.

It is nature, however, which Alban retreats to — the book opens with his cousin Fielding tracking him down in a remote town nestled in forests and farmland — and in The Steep Approach we see the relative wilderness posed in stark contrast to the order and genteelness of the Wopuld clan. Even in his younger years Alban prefers to get his hands dirty, tending to the garden in the family estate at Lydcombe. We are shown a character far more at ease in nature's way than in the prim trappings of the family business.

Banks's prose is that of an seasoned author: precise yet illustrative, personal yet with a mordant edge of remove. Different voices enter and depart the narrative effortlessly, from Fielding, a libertine hiding beneath a businesslike veneer, to Alban's late mother and the all-too-accurately sketched depressive haze she departed the world in... and of course, too, Alban, who we see progress from the naivety of youth to his present-day weariness, his past at once both behind him and suffusing his every idle thought.

## Friday, April 18, 2014

### Your identity is problematic (just so you know)

(Content warning: identity policing, concern trolling, sexism, racism, transphobia, ableism. TL;DR don't read this.)

## Thursday, March 27, 2014

### 2048 is in NP

(This post assumes some familiarity with the game.)

### Turning interactive games into pen/paper puzzles

In computer science, $NP$ is the collection of all the types of pen/paper puzzles whose solutions are easy to double-check (but not necessarily easy to find). These span a wide range of difficulties, from mazes to Sudoku to who owns the zebra?-style logic puzzles.

(Formally, $NP$ is the set of decision problems for which yes answers can be verified in polynomial time.)

Of course, 2048 is a Category 1 life-threatening memetic contagion video game, not a pen/paper puzzle. So we're going to need to do a little bit of massaging to talk about it as if it was.

That's where Tetris comes in.

## Wednesday, February 26, 2014

### The Fable of the Fox and the Grapes

(Apologies to Aesop.)

One hot summer's day, a fox was strolling through a forest when he spied a bunch of grapes, sparkling purple and ripe, hanging over a lofty branch.

Just the thing to quench my thirst, quoth he.

Drawing back a few paces, he took a run and a jump, and just missed the bunch.

He turned around, took a few steps back and again ran and leapt at the grapes, but still with no success.

Thinking craftily, he unsheathed his claws and scratched away at the trunk of the tree, hoping to topple the whole thing down. But after a time he realised he had barely made a dent in its side.

Giving up at last, the fox sighed and walked away, his nose upturned, saying: They are probably sour grapes anyway. They could hardly be called grapes at all.

Moral of the fable: If they are legitimate grapes, the fox's body has ways to try and cut the whole thing down.

## Friday, February 21, 2014

### Program obfuscation, part 1: What is program obfuscation?

(TL;DR: technical definitions and notes on the cryptographic notion(s) of program obfuscation, philosophical asides on what it means to obfuscate a program and why one would want to; the main impossibility result for program obfuscation.)

You're working on a piece of IP, but for some reason it's really tough to prove that your work is your own. Maybe you're producing a transcription of a famous speech. Or you're implementing a computer algorithm you invented to find shortest paths in linear time. The canonical example is mapmaking, which is a painstaking process but one where, if done right, the end result is (approximately) the same regardless of who does it.

It's very easy for someone else to steal your work and pass it off as your own without proper attribution, and, as a pre-emptive defence, you might subtly watermark your work. Replace some words in the transcript with plausible synonyms; rig your program to produce a wrong answer on very specific input; add a fake street or exaggerate a bend on your city map. If you know what you're looking for, you can easily spot when someone has copied your work. But for them to notice the error, they'd have to be doing as much work as it took to make the transcript/program/map in the first place, so why bother?

...well, almost. This strategy doesn't work so well for the case where you watermark your algorithm. The Easter egg is going to be a snippet of code:

if (hash(input_graph) == "50a2fabfdd276f573ff") {
return 42;
}


...and a clever thief can go through your (decompiled) code, find odd functionality like this, and strip it away before repackaging it. Worse still, they can just trace through your algorithm to see how it works.

Ideally, you would like to obfuscate your program: run it through some automated tool that makes it as difficult as possible for an attacker to descry anything from the compiled program.

Plenty of approaches for this have been devised over the years, be it padding the code with extra variables and gibberish, adding new blocks of code that provably but non-obviously do nothing, or the host of techniques used by Obfuscator-LLVM, such as flattening the program's control flow into a giant state machine.

The cryptography community has approached this security problem in the reverse direction. Starting with [BGR01], researchers have been carefully defining notions of obfuscation which impose provable limits on an attacker with access to obfuscated programs.

In the remainder of this post, I'll introduce some of these technical definitions, show how they inter-relate. We'll see an important upper bound on how strong/general an obfuscator can be, and consider some philosophical arguments for why even weaker notions of obfuscation show strong security properties. This will provide a basis for a subsequent post exploring Garg, Gentry and Halevi's candidate indistinguishability obfuscation scheme (which has been doing the rounds lately).

## Friday, February 7, 2014

### "Iron this."

This blog post constitutes [a summary of / reading notes on] More than “just a joke”: The prejudice-releasing function of sexist humor. by Ford, Boxer, et al., 2008. Interested parties may wish to read the full paper.

(TL;DR: quoting the relevant article: Sexist humour may derive power to trivialize sexism and foster a sexist normative climate from the ambiguity of society's attitudes toward women.)

Setup: Participants were rated on hostile sexism scores according to Glick et al.'s Ambivalent Sexism Inventory, a 22-question battery featuring statements (to be rated on a 6-point agree/disagree scale) such as:

Women are too easily offended.

Women seek special favours under [the] guise of equality.

Feminists are making reasonable demands.*

* Naturally, scores for some of these items were inverted.

(The statements shown test for hostile sexism; others testing for benevolent sexism include Women have a superior moral sensibility and so on.)

The inventory was administered in the students' classrooms. Two to four weeks later the same students were (seemingly unrelatedly) exposed to a number of short role-playing scenarios. Buried in the middle of those were one of the following:

• Sexist humour condition: A vignette consisting of various characters exchanging mostly sexist jokes (How can you tell if a blonde's been using the computer? There's White-Out on the screen!).
• Neutral humour condition: A vignette consisting of various characters exchanging neutral jokes (What's the difference between a golfer and a skydiver? A golfer goes whack — Damn![...]).
• Sexist statement condition: A vignette consisting of various characters exchanging sexist social commentary (I just think that a woman's place is in the home and that it's a woman's role to do domestic duties such as laundry for her man.).

(Pretest ratings indicated that the sexist jokes were considered just as funny as the neutral ones, and just as sexist as the sexist statements.)

Within the context of the role-play, the students were then asked how much of a fixed budget they would be willing to donate to a fictional women's organisation.

Result: In the sexist humour condition, students' hostile sexism levels predicted how little they would donate. However, in the other two conditions, students' hostile sexism levels did not affect donation amounts.

### So what does that mean?

According to the authors:

In other words, sexist humor can serve as a releaser of prejudice. People with internalised sexism don't necessarily always act upon it, but they're far more likely to when other people are joking and creating a safe environment for them to freely act upon those values.

(Omitted: discussion of the second experiment in the paper which addresses some methodological issues with the above experiment (e.g. imagined versus real social groups; imagined versus real money).

Also omitted: the usual discussion about how representative undergrad sociology students are of their society at large.)

### IRL takeaways

• Even if you think you are not particularly bigoted yourself, making jokes at the expense of a marginalised group is absolutely not a morally neutral action. (No, not just gender.)

(Obviously this assumes you believe that further marginalising marginalised groups is ceterus paribus bad. If you don't, that's a whole other discussion. Several whole other discussions.)

• Jokes do not exist in a vacuum; they coexist with culture. Jokes are not just a byproduct of culture, they influence culture.
• That thing they said in primary school about not making fun of other people? Still relevant.

References:
Ford, Thomas E., et al. "More than “just a joke”: The prejudice-releasing function of sexist humor." Personality and Social Psychology Bulletin 34.2 (2008): 159-170.
Glick, Peter, and Susan T. Fiske. "The Ambivalent Sexism Inventory: Differentiating hostile and benevolent sexism." Journal of personality and social psychology 70.3 (1996): 491.

## Sunday, January 26, 2014

### Notes on well-ordering

(Content warning: maths. This was written as an exercise in approaching the underlying ideas with rigour and understanding. If it's of any help to other people, this is a happy side effect.)

In discrete mathematics, the Well-Ordering Principle for natural numbers states that any non-empty set of natural numbers contains a least element of itself.

Slightly more formally: $\forall S \subseteq \mathbb{N} : \; S = \emptyset \lor \exists x \in S (\forall y \in S (x \leq y))$

Example: Let $S = \{12,3,189,40,25\}$. Then the least element of $S$ is $3$.

Example: Let $S = \{\}$. The Well-Ordering Principle doesn't apply because $S$ is empty.

Example: Let $S = \mathbb{N}$. Then the least element of $S$ is $0$.

Example: Let $S = \{n \in \mathbb{N} \;|\; n\textrm{ odd}\} = \{1,3,5,\ldots\}$. Then the least element of $S$ is $1$.

The interesting thing here is that this applies to every subset of $\mathbb{N}$, of which there are uncountably many. Some of them we can't compute membership for, e.g. the image of the busy beaver function. Most of them we can't even give a finite description for.