The following are ideas for a significant re-design of the Physics Derivation Graph
Independent Graphs per Derivation
Suppose every derivation was an independent graph. This is easier to debug and analyze. A set of these derivations could be then merged to analyze the full graph, but that shouldn't be a requirement. Merging derivation graphs incurs overhead of finding overlaps. The overlap would be identifying common expressions. For example,A/B = C
is the same as
\frac{A}{B} = C
These should have the same unique index. This index (the Godel number) should be unique across all derivations. Although the graph of the derivation is independent of other derivations, the expression database will need to be shared globally.
Enable arbitrary formats
Currently all expressions are stored as Latex in a single CSV. I don't actually care about the representation (in this case Latex). Instead, I want a single numeric index (the Godel number) associated with arbitrary but equivalent representations. For example,A/B = C
gets the same unique numeric index as
\frac{A}{B} = C
and a Sage representation is also acceptable:
A,B,C = var('A,B,C')
expr = A/B == C
To enable arbitrary formats, place each in a separate file with the naming convention
<unique numeric id>_<type>_<date>.<extension>
"Type" = {Latex, Mathematica, Sage, etc}
The date is to distinguish versions of the same expression, ie A/B = C versus \frac{A}{B} = C.
A single unique numeric index may have multiple files:
4924829_latex_20151228.tex
4924829_latex_20151229.tex
4924829_mathematica_20151228.nb
The reason to have separate files for each representation and for each expression is to increase flexibility.
This adds to confusion when building the graph: which of the two equivalent latex representations should be used?
An additional source of work: checking that the various representations are consistent. An abstract syntax tree should be able to determine the equivalence of representations.
Implementing Inference Rules
Similarly for inference rule representations, there are Latex, Sage, and Mathematica implementations. Currently I have a single CSV for all the inference rules in Latex. Implement each inference rule in the relevant language:
multiplyBothSidesBy_latex_20151228.tex
multiplyBothSidesBy_sage_20151228.sagews
multiplyBothSidesBy_mathematica_20151228.nb
Again, there may be multiple ways to implement an inference rule. Which should be used when checking with the Computer Algebra System?
The inference rule representations might not be synchronized. This would be detectable if the derivation checks out using one CAS and not another.
The inference rule representations might not be synchronized. This would be detectable if the derivation checks out using one CAS and not another.