Metamath Proof Explorer


Theorem sadaddlem

Description: Lemma for sadadd . (Contributed by Mario Carneiro, 9-Sep-2016)

Ref Expression
Hypotheses sadaddlem.c C=seq0c2𝑜,m0ifcaddmbitsAmbitsBc1𝑜n0ifn=0n1
sadaddlem.k K=bits0-1
sadaddlem.1 φA
sadaddlem.2 φB
sadaddlem.3 φN0
Assertion sadaddlem φbitsAsaddbitsB0..^N=bitsA+Bmod2N

Proof

Step Hyp Ref Expression
1 sadaddlem.c C=seq0c2𝑜,m0ifcaddmbitsAmbitsBc1𝑜n0ifn=0n1
2 sadaddlem.k K=bits0-1
3 sadaddlem.1 φA
4 sadaddlem.2 φB
5 sadaddlem.3 φN0
6 2nn 2
7 6 a1i φ2
8 7 5 nnexpcld φ2N
9 8 nnzd φ2N
10 inss1 bitsA0..^NbitsA
11 bitsss bitsA0
12 10 11 sstri bitsA0..^N0
13 fzofi 0..^NFin
14 inss2 bitsA0..^N0..^N
15 ssfi 0..^NFinbitsA0..^N0..^NbitsA0..^NFin
16 13 14 15 mp2an bitsA0..^NFin
17 elfpw bitsA0..^N𝒫0FinbitsA0..^N0bitsA0..^NFin
18 12 16 17 mpbir2an bitsA0..^N𝒫0Fin
19 bitsf1o bits0:01-1 onto𝒫0Fin
20 f1ocnv bits0:01-1 onto𝒫0Finbits0-1:𝒫0Fin1-1 onto0
21 f1of bits0-1:𝒫0Fin1-1 onto0bits0-1:𝒫0Fin0
22 19 20 21 mp2b bits0-1:𝒫0Fin0
23 2 feq1i K:𝒫0Fin0bits0-1:𝒫0Fin0
24 22 23 mpbir K:𝒫0Fin0
25 24 ffvelcdmi bitsA0..^N𝒫0FinKbitsA0..^N0
26 18 25 mp1i φKbitsA0..^N0
27 26 nn0zd φKbitsA0..^N
28 3 27 zsubcld φAKbitsA0..^N
29 inss1 bitsB0..^NbitsB
30 bitsss bitsB0
31 29 30 sstri bitsB0..^N0
32 inss2 bitsB0..^N0..^N
33 ssfi 0..^NFinbitsB0..^N0..^NbitsB0..^NFin
34 13 32 33 mp2an bitsB0..^NFin
35 elfpw bitsB0..^N𝒫0FinbitsB0..^N0bitsB0..^NFin
36 31 34 35 mpbir2an bitsB0..^N𝒫0Fin
37 24 ffvelcdmi bitsB0..^N𝒫0FinKbitsB0..^N0
38 36 37 mp1i φKbitsB0..^N0
39 38 nn0zd φKbitsB0..^N
40 4 39 zsubcld φBKbitsB0..^N
41 2 fveq1i KbitsA0..^N=bits0-1bitsA0..^N
42 3 8 zmodcld φAmod2N0
43 42 fvresd φbits0Amod2N=bitsAmod2N
44 bitsmod AN0bitsAmod2N=bitsA0..^N
45 3 5 44 syl2anc φbitsAmod2N=bitsA0..^N
46 43 45 eqtrd φbits0Amod2N=bitsA0..^N
47 f1ocnvfv bits0:01-1 onto𝒫0FinAmod2N0bits0Amod2N=bitsA0..^Nbits0-1bitsA0..^N=Amod2N
48 19 42 47 sylancr φbits0Amod2N=bitsA0..^Nbits0-1bitsA0..^N=Amod2N
49 46 48 mpd φbits0-1bitsA0..^N=Amod2N
50 41 49 eqtrid φKbitsA0..^N=Amod2N
51 50 oveq2d φAKbitsA0..^N=AAmod2N
52 51 oveq1d φAKbitsA0..^N2N=AAmod2N2N
53 3 zred φA
54 8 nnrpd φ2N+
55 moddifz A2N+AAmod2N2N
56 53 54 55 syl2anc φAAmod2N2N
57 52 56 eqeltrd φAKbitsA0..^N2N
58 8 nnne0d φ2N0
59 dvdsval2 2N2N0AKbitsA0..^N2NAKbitsA0..^NAKbitsA0..^N2N
60 9 58 28 59 syl3anc φ2NAKbitsA0..^NAKbitsA0..^N2N
61 57 60 mpbird φ2NAKbitsA0..^N
62 2 fveq1i KbitsB0..^N=bits0-1bitsB0..^N
63 4 8 zmodcld φBmod2N0
64 63 fvresd φbits0Bmod2N=bitsBmod2N
65 bitsmod BN0bitsBmod2N=bitsB0..^N
66 4 5 65 syl2anc φbitsBmod2N=bitsB0..^N
67 64 66 eqtrd φbits0Bmod2N=bitsB0..^N
68 f1ocnvfv bits0:01-1 onto𝒫0FinBmod2N0bits0Bmod2N=bitsB0..^Nbits0-1bitsB0..^N=Bmod2N
69 19 63 68 sylancr φbits0Bmod2N=bitsB0..^Nbits0-1bitsB0..^N=Bmod2N
70 67 69 mpd φbits0-1bitsB0..^N=Bmod2N
71 62 70 eqtrid φKbitsB0..^N=Bmod2N
72 71 oveq2d φBKbitsB0..^N=BBmod2N
73 72 oveq1d φBKbitsB0..^N2N=BBmod2N2N
74 4 zred φB
75 moddifz B2N+BBmod2N2N
76 74 54 75 syl2anc φBBmod2N2N
77 73 76 eqeltrd φBKbitsB0..^N2N
78 dvdsval2 2N2N0BKbitsB0..^N2NBKbitsB0..^NBKbitsB0..^N2N
79 9 58 40 78 syl3anc φ2NBKbitsB0..^NBKbitsB0..^N2N
80 77 79 mpbird φ2NBKbitsB0..^N
81 9 28 40 61 80 dvds2addd φ2NAKbitsA0..^N+B-KbitsB0..^N
82 3 zcnd φA
83 4 zcnd φB
84 26 nn0cnd φKbitsA0..^N
85 38 nn0cnd φKbitsB0..^N
86 82 83 84 85 addsub4d φA+B-KbitsA0..^N+KbitsB0..^N=AKbitsA0..^N+B-KbitsB0..^N
87 81 86 breqtrrd φ2NA+B-KbitsA0..^N+KbitsB0..^N
88 3 4 zaddcld φA+B
89 27 39 zaddcld φKbitsA0..^N+KbitsB0..^N
90 moddvds 2NA+BKbitsA0..^N+KbitsB0..^NA+Bmod2N=KbitsA0..^N+KbitsB0..^Nmod2N2NA+B-KbitsA0..^N+KbitsB0..^N
91 8 88 89 90 syl3anc φA+Bmod2N=KbitsA0..^N+KbitsB0..^Nmod2N2NA+B-KbitsA0..^N+KbitsB0..^N
92 87 91 mpbird φA+Bmod2N=KbitsA0..^N+KbitsB0..^Nmod2N
93 11 a1i φbitsA0
94 30 a1i φbitsB0
95 93 94 1 5 2 sadadd3 φKbitsAsaddbitsB0..^Nmod2N=KbitsA0..^N+KbitsB0..^Nmod2N
96 inss1 bitsAsaddbitsB0..^NbitsAsaddbitsB
97 sadcl bitsA0bitsB0bitsAsaddbitsB0
98 11 30 97 mp2an bitsAsaddbitsB0
99 96 98 sstri bitsAsaddbitsB0..^N0
100 inss2 bitsAsaddbitsB0..^N0..^N
101 ssfi 0..^NFinbitsAsaddbitsB0..^N0..^NbitsAsaddbitsB0..^NFin
102 13 100 101 mp2an bitsAsaddbitsB0..^NFin
103 elfpw bitsAsaddbitsB0..^N𝒫0FinbitsAsaddbitsB0..^N0bitsAsaddbitsB0..^NFin
104 99 102 103 mpbir2an bitsAsaddbitsB0..^N𝒫0Fin
105 24 ffvelcdmi bitsAsaddbitsB0..^N𝒫0FinKbitsAsaddbitsB0..^N0
106 104 105 mp1i φKbitsAsaddbitsB0..^N0
107 106 nn0red φKbitsAsaddbitsB0..^N
108 106 nn0ge0d φ0KbitsAsaddbitsB0..^N
109 2 fveq1i KbitsAsaddbitsB0..^N=bits0-1bitsAsaddbitsB0..^N
110 109 fveq2i bits0KbitsAsaddbitsB0..^N=bits0bits0-1bitsAsaddbitsB0..^N
111 106 fvresd φbits0KbitsAsaddbitsB0..^N=bitsKbitsAsaddbitsB0..^N
112 104 a1i φbitsAsaddbitsB0..^N𝒫0Fin
113 f1ocnvfv2 bits0:01-1 onto𝒫0FinbitsAsaddbitsB0..^N𝒫0Finbits0bits0-1bitsAsaddbitsB0..^N=bitsAsaddbitsB0..^N
114 19 112 113 sylancr φbits0bits0-1bitsAsaddbitsB0..^N=bitsAsaddbitsB0..^N
115 110 111 114 3eqtr3a φbitsKbitsAsaddbitsB0..^N=bitsAsaddbitsB0..^N
116 115 100 eqsstrdi φbitsKbitsAsaddbitsB0..^N0..^N
117 106 nn0zd φKbitsAsaddbitsB0..^N
118 bitsfzo KbitsAsaddbitsB0..^NN0KbitsAsaddbitsB0..^N0..^2NbitsKbitsAsaddbitsB0..^N0..^N
119 117 5 118 syl2anc φKbitsAsaddbitsB0..^N0..^2NbitsKbitsAsaddbitsB0..^N0..^N
120 116 119 mpbird φKbitsAsaddbitsB0..^N0..^2N
121 elfzolt2 KbitsAsaddbitsB0..^N0..^2NKbitsAsaddbitsB0..^N<2N
122 120 121 syl φKbitsAsaddbitsB0..^N<2N
123 modid KbitsAsaddbitsB0..^N2N+0KbitsAsaddbitsB0..^NKbitsAsaddbitsB0..^N<2NKbitsAsaddbitsB0..^Nmod2N=KbitsAsaddbitsB0..^N
124 107 54 108 122 123 syl22anc φKbitsAsaddbitsB0..^Nmod2N=KbitsAsaddbitsB0..^N
125 92 95 124 3eqtr2d φA+Bmod2N=KbitsAsaddbitsB0..^N
126 125 fveq2d φbitsA+Bmod2N=bitsKbitsAsaddbitsB0..^N
127 126 115 eqtr2d φbitsAsaddbitsB0..^N=bitsA+Bmod2N