Sat Feb 23 13:21:53 CET 2013

Testing linear functions

Given an opaque function, determine the following:
- split linear variables vs. multiplicative parameters
- produce a matrix for the linear variables.

What determines whether a variable is a parameter?
- Only multiplied with signals.
- Never added to signals.

Maybe it is possible to assume that it is known which variables are
signals, because thei are either:
- given as input, or
- act as state feedback

The rest is lifting.  But.. there are ambiguities if multiplication of
constants is encountered.

This requires some kind of logic programming approach that can
represent these ambiguities.

To make it simpler, we have only 2 possible outcomes, one unknown and
a bunch of relations.

(a b c d)
 1 1 0 ?

exprs           node types

c = add a b  => a == b == c

c = mul a b  => a != b, c == 1 || a == b == 0, c == 1

c = div a b  => a == b == c = 0

c = unop a   => a == c == 1

This requires flat unification combined with backtracking for each of
the || alternatives.

Proably not too hard to setup.
Nice exercise.