Each information should have its source defined (e.g. static, dynamic with an entry point listed), along with a time it was last updated. Or maybe even a history of all changes?
We won't be able to store all the information we gather during a dynamic run, because not all data will be serializable. We'll have to do some processing before saving (so, basically, during the system execution).
From simple facts we could derive new ones, by a use of simple reasoner. We could start with a reasoner engine with simple productions, like:
- If a function returns two different values for the same input it surely is not pure.
- If function calls non-pure functions it is surely not pure.