Lab for Automated Reasoning and Analysis LARA

Is the following statement valid when x is a real number and f is a function from reals to reals, and why:

"If (f(x))^2 = 4, then f(x)=2"

Answer: Not valid. Let x be an arbitrary element. Take as t interpretation a function f and such that f(x)=-2.

Is the following statement valid (for arbitrary properties P and Q), and why:

"If for all x, both P(x) and Q(x), then both
1) for all x, P(x), and
2) for all x, Q(x)."

Answer: Valid.

Is the following statement valid (for arbitrary properties P and Q), and why:

"If for all x, P(x) or Q(x) hold, then at least
one of the following two is true
1) for all x, P(x), or
2) for all x, Q(x)."

Answer: Invalid. Take as P,Q as predicates on integers, with P(x) meaning “x is even” and Q(x) meaning “x is odd”.

Let x,y,z be integer variables that satisfy both of these two conditions:

x + y = 3z
x - 2y = z

What is the strongest property that you can state about the integer x that does not mention the variables y or z?

Answer: x is divisible by 7.

Consider a simple programming language …

Say in 3-5 sentences how you would build an interpreter for this language:

Answer: Parse the program into abstract syntax tree. Represent program state as a mapping from variable names to their value. Traverse the abstract syntax tree and change the values of variables according to the meaning of statements.

What is the class of functions from integers to integers that can be described in this programming language?

Answer: All computable functions on integers can be described. To prove this formally, we could write a simulator for a Turing machine, which is often used as a formal model for computable functions. We can represent the tape as an unbounded integer, whose bits represent Turing machine tapes. We can write code with loops that extracts the n-th bit of the number to access the given cells in a Turing machine, and write transition functions of a Turing machine as constructs in our language.

Suggest (in 3-10 sentences) how you would design an algorithm for the following problem…

Answer: According to the Rice's theorem, there is no algorithm that solves this solution exactly. We can implement a practically useful “conservative” approximation which has the property that, when it claims that the program always returns zero, then it will indeed return zero, but when it says that the program “need not always return zero”, it still might be the case that the program always returns zero but our approximate algorithm was not smart enough to do that. Such approximate algorithm might perform interval analysis, which computes an interval of values to which the variables of the program can belong to.