We might never know.
The only way to know this is by looking at the code. While players are quite crafty with backwards-engineering game mechanics, I highly doubt someone will figure this out, since the difference is just too small notice.
Then again, this means it does not impact gameplay at all.
How small is it?
According to this list I found on reddit, the maximum proc chance for generic items is 4.5%.
I have written a small Python script that loops over all unique permutations of 3 items with the same proc, ranging from 0 to 4.5 on each item, calculates the difference in chance between X+Y+Z
(added proc chance) and 1-(1-X)*(1-Y)*(1-Z)
(seperate proc chances), and spits out the maximum difference, as well as the average.
M=46 #Python range() does not include the upper bound, uses integers.
a=[]
for i in range(M):
for j in range(i,M):
for k in range(min(1,j),M):
a.append(((i+j+k)/10)-((100-100*(1-i/1000)*(1-j/1000)*(1-k/1000))))
print(max(a),sum(a)/len(a))
The maximum discrepancy is with three items with a chance of 4.5%, and is 0.60%. which means 13.5% proc chance with the additive calculation and 12.9% with the separate calculation.
The average discrepancy is around 0.15%. As I said above, this is too small to notice in regular gameplay. If someone has 3 4.5% items, and has singled out enemies and hit them (optimally with a regular attack) long enough to get statistically large amounts of data, feel free to answer this question.
Logical conclusion, but pure conjecture on my part
With differences so small as to not impact gameplay, I don't think someone took the effort to program an additive calculation into the game. With a separate calculation, all of these effects can be handled independently and without any crosslinking.