## 2 Preliminaries
### Theory Validation: Fitting Constants  
The glue that connects the enumeration (Section 2.1) to the virtual experiment (Section 3.2) is finding constants in the candidate theories that fit the data. The problem is to find an equation of the form (recall that the size of \(\mathcal{A}=n\))  
\[c_{1}\mathcal{A}_{1}+\ldots+c_{n}\mathcal{A}_{n}=0, \tag{1}\]  
\begin{table}
\begin{tabular}{c c c} \hline \hline
**Operator** & **Term Cost** & **Alphabet** \\ \hline \(\mathcal{F}\) & 1 & A, B \\ \(\
abla\cdot\mathcal{F}\) & 4 & C, D \\ \(\frac{\partial}{\partial t}\mathcal{F}\) & 4 & E, F \\ \(\
abla\times\mathcal{F}\) & 7 & G, H \\ \(\
abla^{2}\mathcal{F}\) & 19 & I, J \\ \(\frac{\partial^{2}}{\partial t^{2}}\mathcal{F}\) & 19 & K, L \\ \hline \hline \end{tabular}
\end{table}
Table 1: Complexity of each operator term working on a field \(\mathcal{F}\in\{\mathbf{E},\mathbf{B}\}\).  
Figure 1: Time to discovery (s): Fast versus Slow brute force. The Slow search cuts off at 12 due to maximum complexity.  
where many of the \(c_{i}\) are implicitly zero by the enumeration. If such \(c_{i}\)_do not exist, which is almost always the case, the theory is invalid. However, if they do exist, then the theory is valid with high probability._ This is a linear algebra problem as described below.  
Finding the constants is equivalent to finding the null space of a linear system (for example, the data matrix extracted from Table 2). If the dimension of the null space is 0, then the theory is not valid because the only solution is a trivial zero vector. If the dimension of the null space is nonzero, it can only be 1, which corresponds to a unique solution. The reason is that in our enumerative method, we remove all valid sub-theories from the candidate theory before determining its constants. Had the dimension of the null space of the resulting system been larger than 1, it would have implied that some sub-theory had not been removed, contradicting the assumption. Next, to find the rank of the null space and the null space itself, we cannot simply use [PERSON]'s built-in rank() or nullspace() functions because the dynamic ranges are large (\(>\)10\({}^{30}\)) (this is one of those cases when symbolics and numerics do not play well together).  
The solution is to use singular value decomposition, in which the number of zero singular values (SVs) is equivalent to the dimension of the null space. The insight is that if we scale **B** by a factor of \(c\), it will be on the same scale as **E**, and after normalizing each column of the matrix so that each is on the same scale with another, the resulting singular values (if nonzero) should also be on the same scale. After scaling and normalizing, we use [PERSON]'s built-in svdvals() function to obtain a list of SVs ranked from the largest to the smallest.  
As discussed previously, the dimension of the null space can either be 1 or 0, and we only need to compare the smallest SV with the largest one to see whether the former is orders of magnitude smaller than the latter. If so, we can regard that as a zero, and proceed to retrieve the null space vector from the last column of \(V^{T}\) (as in \(A=U\Sigma V^{T}\)) by calling [PERSON]'s svd() function. The elements of the null space vector are the constants we look for. If not, it implies that the dimension of the null space is zero, and we conclude that the theory is invalid.