Metamath Proof Explorer


Theorem smumul

Description: For sequences that correspond to valid integers, the sequence multiplication function produces the sequence for the product. This is effectively a proof of the correctness of the multiplication process, implemented in terms of logic gates for df-sad , whose correctness is verified in sadadd .

Outside this range, the sequences cannot be representing integers, but the smul function still "works". This extended function is best interpreted in terms of the ring structure of the 2-adic integers. (Contributed by Mario Carneiro, 22-Sep-2016)

Ref Expression
Assertion smumul ABbitsAsmulbitsB=bitsAB

Proof

Step Hyp Ref Expression
1 bitsss bitsA0
2 bitsss bitsB0
3 smucl bitsA0bitsB0bitsAsmulbitsB0
4 1 2 3 mp2an bitsAsmulbitsB0
5 4 sseli kbitsAsmulbitsBk0
6 5 a1i ABkbitsAsmulbitsBk0
7 bitsss bitsAB0
8 7 sseli kbitsABk0
9 8 a1i ABkbitsABk0
10 simpll ABk0A
11 simplr ABk0B
12 simpr ABk0k0
13 1nn0 10
14 13 a1i ABk010
15 12 14 nn0addcld ABk0k+10
16 10 11 15 smumullem ABk0bitsA0..^k+1smulbitsB=bitsAmod2k+1B
17 16 ineq1d ABk0bitsA0..^k+1smulbitsB0..^k+1=bitsAmod2k+1B0..^k+1
18 2nn 2
19 18 a1i ABk02
20 19 15 nnexpcld ABk02k+1
21 10 20 zmodcld ABk0Amod2k+10
22 21 nn0zd ABk0Amod2k+1
23 22 11 zmulcld ABk0Amod2k+1B
24 bitsmod Amod2k+1Bk+10bitsAmod2k+1Bmod2k+1=bitsAmod2k+1B0..^k+1
25 23 15 24 syl2anc ABk0bitsAmod2k+1Bmod2k+1=bitsAmod2k+1B0..^k+1
26 17 25 eqtr4d ABk0bitsA0..^k+1smulbitsB0..^k+1=bitsAmod2k+1Bmod2k+1
27 inass bitsA0..^k+10..^k+1=bitsA0..^k+10..^k+1
28 inidm 0..^k+10..^k+1=0..^k+1
29 28 ineq2i bitsA0..^k+10..^k+1=bitsA0..^k+1
30 27 29 eqtri bitsA0..^k+10..^k+1=bitsA0..^k+1
31 30 oveq1i bitsA0..^k+10..^k+1smulbitsB0..^k+1=bitsA0..^k+1smulbitsB0..^k+1
32 31 ineq1i bitsA0..^k+10..^k+1smulbitsB0..^k+10..^k+1=bitsA0..^k+1smulbitsB0..^k+10..^k+1
33 inss1 bitsA0..^k+1bitsA
34 1 a1i ABk0bitsA0
35 33 34 sstrid ABk0bitsA0..^k+10
36 2 a1i ABk0bitsB0
37 35 36 15 smueq ABk0bitsA0..^k+1smulbitsB0..^k+1=bitsA0..^k+10..^k+1smulbitsB0..^k+10..^k+1
38 34 36 15 smueq ABk0bitsAsmulbitsB0..^k+1=bitsA0..^k+1smulbitsB0..^k+10..^k+1
39 32 37 38 3eqtr4a ABk0bitsA0..^k+1smulbitsB0..^k+1=bitsAsmulbitsB0..^k+1
40 20 nnrpd ABk02k+1+
41 10 zred ABk0A
42 modabs2 A2k+1+Amod2k+1mod2k+1=Amod2k+1
43 41 40 42 syl2anc ABk0Amod2k+1mod2k+1=Amod2k+1
44 eqidd ABk0Bmod2k+1=Bmod2k+1
45 22 10 11 11 40 43 44 modmul12d ABk0Amod2k+1Bmod2k+1=ABmod2k+1
46 45 fveq2d ABk0bitsAmod2k+1Bmod2k+1=bitsABmod2k+1
47 26 39 46 3eqtr3d ABk0bitsAsmulbitsB0..^k+1=bitsABmod2k+1
48 10 11 zmulcld ABk0AB
49 bitsmod ABk+10bitsABmod2k+1=bitsAB0..^k+1
50 48 15 49 syl2anc ABk0bitsABmod2k+1=bitsAB0..^k+1
51 47 50 eqtrd ABk0bitsAsmulbitsB0..^k+1=bitsAB0..^k+1
52 51 eleq2d ABk0kbitsAsmulbitsB0..^k+1kbitsAB0..^k+1
53 elin kbitsAsmulbitsB0..^k+1kbitsAsmulbitsBk0..^k+1
54 elin kbitsAB0..^k+1kbitsABk0..^k+1
55 52 53 54 3bitr3g ABk0kbitsAsmulbitsBk0..^k+1kbitsABk0..^k+1
56 nn0uz 0=0
57 12 56 eleqtrdi ABk0k0
58 eluzfz2b k0k0k
59 57 58 sylib ABk0k0k
60 12 nn0zd ABk0k
61 fzval3 k0k=0..^k+1
62 60 61 syl ABk00k=0..^k+1
63 59 62 eleqtrd ABk0k0..^k+1
64 63 biantrud ABk0kbitsAsmulbitsBkbitsAsmulbitsBk0..^k+1
65 63 biantrud ABk0kbitsABkbitsABk0..^k+1
66 55 64 65 3bitr4d ABk0kbitsAsmulbitsBkbitsAB
67 66 ex ABk0kbitsAsmulbitsBkbitsAB
68 6 9 67 pm5.21ndd ABkbitsAsmulbitsBkbitsAB
69 68 eqrdv ABbitsAsmulbitsB=bitsAB