# Automatic component identification/extraction of a system

This may probably be a nonsensical question, but here goes…

A definition of a system could be: “a set of interacting components, which give structure and behaviour to the system”. E.g. say, a car (a system) consists of (components, such as) engine, gear box, fuel injection unit, braking unit, headlights etc. which when interact define the overall structure and functionality of the car.

To model a system (for simulation, improving/optimizing system performance, causal analysis etc.) the components of a system need to be known in advance. E.g. to create a model of a car, all the components of a car and how they interact with each other, need to be known.

*Question: Are there any formal methods/techniques for “reverse engineering” a system from its observed behaviour, to automatically identify/extract its components?

i.e. using the example of the car, can one identify the components of a car only from the behaviour of the car?

One crude way could be, to examine the input-output responses of a system and then classify the measured output response. E.g. say, the headlights button in the car is switched on (input), measuring the light beam (output) from the headlights, and then classifying this light beam as a headlight/bulb as one of the components in the car. As said, this is a crude way (and possibly incorrect) and may not be able to identify all the components of a system. So, are there any formal methods to identify the internal components from the system behaviour?

A

Put it in an abstract mathematical way: you have a function $f\colon X\to Y$ which applied to any system $x$ gives the resulting measure $y=f(x)$. You want to identify a particular element $x_0\in X$ by knowing $f(x_0)$. This is an invertibility problem... if the function is not injective it is not possible to solve.