let nlist be non empty FinSequence of [:INT,INT:]; for a, b being non empty FinSequence of INT
for x, y being Element of INT st len a = len b & len a = len nlist & ( for i being Nat st i in Seg (len nlist) holds
b . i <> 0 ) & ( for i being Nat st i in Seg (len nlist) holds
( (nlist . i) `1 = a . i & (nlist . i) `2 = b . i ) ) & ( for i, j being Nat st i in Seg (len nlist) & j in Seg (len nlist) & i <> j holds
b . i,b . j are_coprime ) & ( for i being Nat st i in Seg (len nlist) holds
x mod (b . i) = (a . i) mod (b . i) ) & y = Product b holds
(ALGO_CRT nlist) mod y = x mod y
let a, b be non empty FinSequence of INT ; for x, y being Element of INT st len a = len b & len a = len nlist & ( for i being Nat st i in Seg (len nlist) holds
b . i <> 0 ) & ( for i being Nat st i in Seg (len nlist) holds
( (nlist . i) `1 = a . i & (nlist . i) `2 = b . i ) ) & ( for i, j being Nat st i in Seg (len nlist) & j in Seg (len nlist) & i <> j holds
b . i,b . j are_coprime ) & ( for i being Nat st i in Seg (len nlist) holds
x mod (b . i) = (a . i) mod (b . i) ) & y = Product b holds
(ALGO_CRT nlist) mod y = x mod y
let x, y be Element of INT ; ( len a = len b & len a = len nlist & ( for i being Nat st i in Seg (len nlist) holds
b . i <> 0 ) & ( for i being Nat st i in Seg (len nlist) holds
( (nlist . i) `1 = a . i & (nlist . i) `2 = b . i ) ) & ( for i, j being Nat st i in Seg (len nlist) & j in Seg (len nlist) & i <> j holds
b . i,b . j are_coprime ) & ( for i being Nat st i in Seg (len nlist) holds
x mod (b . i) = (a . i) mod (b . i) ) & y = Product b implies (ALGO_CRT nlist) mod y = x mod y )
assume A1:
( len a = len b & len a = len nlist )
; ( ex i being Nat st
( i in Seg (len nlist) & not b . i <> 0 ) or ex i being Nat st
( i in Seg (len nlist) & not ( (nlist . i) `1 = a . i & (nlist . i) `2 = b . i ) ) or ex i, j being Nat st
( i in Seg (len nlist) & j in Seg (len nlist) & i <> j & not b . i,b . j are_coprime ) or ex i being Nat st
( i in Seg (len nlist) & not x mod (b . i) = (a . i) mod (b . i) ) or not y = Product b or (ALGO_CRT nlist) mod y = x mod y )
assume A2:
for i being Nat st i in Seg (len nlist) holds
b . i <> 0
; ( ex i being Nat st
( i in Seg (len nlist) & not ( (nlist . i) `1 = a . i & (nlist . i) `2 = b . i ) ) or ex i, j being Nat st
( i in Seg (len nlist) & j in Seg (len nlist) & i <> j & not b . i,b . j are_coprime ) or ex i being Nat st
( i in Seg (len nlist) & not x mod (b . i) = (a . i) mod (b . i) ) or not y = Product b or (ALGO_CRT nlist) mod y = x mod y )
assume A3:
for i being Nat st i in Seg (len nlist) holds
( (nlist . i) `1 = a . i & (nlist . i) `2 = b . i )
; ( ex i, j being Nat st
( i in Seg (len nlist) & j in Seg (len nlist) & i <> j & not b . i,b . j are_coprime ) or ex i being Nat st
( i in Seg (len nlist) & not x mod (b . i) = (a . i) mod (b . i) ) or not y = Product b or (ALGO_CRT nlist) mod y = x mod y )
assume A4:
for i, j being Nat st i in Seg (len nlist) & j in Seg (len nlist) & i <> j holds
b . i,b . j are_coprime
; ( ex i being Nat st
( i in Seg (len nlist) & not x mod (b . i) = (a . i) mod (b . i) ) or not y = Product b or (ALGO_CRT nlist) mod y = x mod y )
assume A5:
for i being Nat st i in Seg (len nlist) holds
x mod (b . i) = (a . i) mod (b . i)
; ( not y = Product b or (ALGO_CRT nlist) mod y = x mod y )
assume A6:
y = Product b
; (ALGO_CRT nlist) mod y = x mod y
A7:
for i being Nat st i in Seg (len nlist) holds
(ALGO_CRT nlist) mod (b . i) = x mod (b . i)