</math>
(An exact version, {{math|1=''KP''(''x'', ''y'') = ''KP''(''x'') + ''KP''(''y''|{{!}}''x''*){{sup| lowast;}}) + ''O''(1)}},
holds for the prefix complexity ''KP'', where {{math|''x*''{{sup|∗}}}} is a shortest program for ''x''.)
It states that the shortest program printing ''X'' and ''Y'' is obtained by concatenating a shortest program printing ''X'' with a program printing ''Y'' given ''X'', plus [[Big-O notation|at most]] a logarithmic factor. The results implies that [[Mutual information#Absolute mutual information|algorithmic mutual information]], an analogue of mutual information for Kolmogorov complexity is symmetric: ''{{tmath|1=I(x:y) = I(y:x) + O(\log K(x,y))''}}</font> for all ''x,y''.
==Proof==
The ≤ direction is obvious: we can write a program to produce ''x'' and ''y'' by concatenating a program to produce ''x'', a program to produce ''y'' given
access to ''x'', and (whence the log term) the length of one of the programs, so
that we know where to separate the two programs for ''x'' and {{math|1=''y''|{{!}}''x'' (log(''K''(''x'', ''y''))}} upper-bounds this length).
For the ≥ direction, it suffices to show that for all {{mvar|k,l}} such that {{tmath|1=k+l = K(x,y)}} we have that either
'':<math>K(x|k,l) ≤\le k + O(1)'' </math>
or
'':<math>K(y|x,k,l) ≤\le l + O(1)''</math>.
Consider the list (''(a''<sub>1</sub>,''b''<sub>1</sub>), (''a''<sub>2</sub>,''b''<sub>2</sub>), ..., (''a<sub>e</sub>,b<sub>e</sub>)'') of all pairs ''{{tmath|1=(a,b)''}} produced by programs of length exactly ''{{tmath|1=K(x,y)''}} [hence {{tmath|K(a,b) ≤\le K(x,y)}}]. Note that this list
* contains the pair ''{{tmath|1=(x,y)''}},
* can be [[recursively enumerable|enumerated]] given ''{{mvar|k''}} and ''{{mvar|l''}} (by running all programs of length ''{{tmath|1=K(x,y)''}} in parallel),
* has at most ''2<sup>''K''(''x'',''y'')</sup>'' elements (because there are at most 2<sup>''n''</sup> programs of length {{mvar|n}}).
First, suppose that ''x'' appears less than ''{{math|2<sup>''l''</sup>''}} times as first element. We can specify ''y'' given ''{{mvar|x,k,l''}} by enumerating (''(a''<sub>1</sub>,''b''<sub>1</sub>), (''a''<sub>2</sub>,''b''<sub>2</sub>), ...'' and then selecting ''{{tmath|1=(x,y)''}} in the sub-list of pairs ''{{tmath|1=(x,b)''}}. By assumption, the index of ''{{tmath|1=(x,y)''}} in this sub-list is less than ''{{math|2<sup>''l''</sup>''}} and hence, there is a program for ''y'' given ''{{mvar|x,k,l''}} of length ''{{tmath|1=l + O(1)''}}.
Now, suppose that ''x'' appears at least ''{{math|2<sup>''l''</sup>''}} times as first element. This can happen for at most ''{{math|1=2<sup>''K''(''x,y'')-−l</sup> = 2<sup>''k''</sup>''}} different strings. These strings can be enumerated given ''{{mvar|k,l''}} and hence ''x'' can be specified by its index in this enumeration. The corresponding program for ''x'' has size ''{{tmath|1=k + O(1)''}}. Theorem proved.
==References==
|