## Exercise 1: Inferring Functions

Consider our model of function inference from the chapter. We can reconceptualize our program as a sequence-generator by making the input arguments 1,2,3,…. Suppose that the first number in the sequence f(1) is 1 and the second number f(2) is 4. What number would come next?

///fold:
var plus = {fn: function(a,b) {return a + b}, expr: '+'}
var multiply = {fn: function(a,b) {return Math.round(a * b,0)}, expr: '*'}
var divide = {fn: function(a,b) {return Math.round(a/b,0)}, expr: '/'}
var minus = {fn: function(a,b) {return a - b}, expr: '-'}
var power = {fn: function(a,b) {return Math.pow(a,b)}, expr: '**'}
var binaryOps = [plus, multiply, divide, minus, power]

var identity = {fn: function(x) {return x}, expr: 'x'}

var randomConstantFunction = function() {
var c = uniformDraw(_.range(10))
return {fn: function(x){return c}, expr: c}
}

var randomCombination = function(f,g) {
var op = uniformDraw(binaryOps);
var opfn = op.fn
var ffn = f.fn
var gfn = g.fn
return {fn: function(x){return opfn(ffn(x),gfn(x))},
expr: f.expr+op.expr+g.expr}
}

// sample an arithmetic expression
var randomArithmeticExpression = function() {
if (flip()) {
return randomCombination(randomArithmeticExpression(),
randomArithmeticExpression())
} else {
return flip() ? identity : randomConstantFunction()
}
}
///

viz.table(Infer({method: 'enumerate', maxExecutions: 1000}, function() {
var e = randomArithmeticExpression();
var f = e.fn;

condition(f(1) == 1);
condition(f(2) == 4);

return f(3); // use this for Exercise 1.1
//   return e.expr; // use this for Exercise 1.2
}))


### Exercise 1.1

Not surprisingly, the model predicts 9 as the most likely result for f(3). However, it also puts significant probability on 27. Explain why these two numbers have the highest posterior probabilities.

### Exercise 1.2

Why is the probability of x ** 2 is so much lower than x * x?

### Exercise 1.3

Many people find the high probability assigned to 27 to be unintuitive (i.e. if we ran this as an experiment, 27 would be a very infrequent response). This suggests our model is an imperfect model of human intuitions. How could we decrease the probability of inferring 27?

HINT: Consider the priors.

## Exercise 2: Role-governed concepts (optional)

In the Rational Rules model we saw in the chapter, concepts were defined in terms of the features of single objects (e.g. “it’s a raven if it has black wings”). Psychologists have suggested that many concepts are not defined by the features of a single objects, but instead by the relations the object has to other objects. For instance, “a key is something that opens a lock”. These are called role-governed concepts.

Extend the Rational Rules model to capture role-governed concepts.

Hint: You will need primitive relations in your language of thought.

Hint: Consider adding quantifiers (e.g. there exists) to your language of thought.