Metamath Proof Explorer


Theorem sadaddlem

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

Ref Expression
Hypotheses sadaddlem.c C = seq 0 c 2 𝑜 , m 0 if cadd m bits A m bits B c 1 𝑜 n 0 if n = 0 n 1
sadaddlem.k K = bits 0 -1
sadaddlem.1 φ A
sadaddlem.2 φ B
sadaddlem.3 φ N 0
Assertion sadaddlem φ bits A sadd bits B 0 ..^ N = bits A + B mod 2 N

Proof

Step Hyp Ref Expression
1 sadaddlem.c C = seq 0 c 2 𝑜 , m 0 if cadd m bits A m bits B c 1 𝑜 n 0 if n = 0 n 1
2 sadaddlem.k K = bits 0 -1
3 sadaddlem.1 φ A
4 sadaddlem.2 φ B
5 sadaddlem.3 φ N 0
6 2 fveq1i K bits A 0 ..^ N = bits 0 -1 bits A 0 ..^ N
7 2nn 2
8 7 a1i φ 2
9 8 5 nnexpcld φ 2 N
10 3 9 zmodcld φ A mod 2 N 0
11 10 fvresd φ bits 0 A mod 2 N = bits A mod 2 N
12 bitsmod A N 0 bits A mod 2 N = bits A 0 ..^ N
13 3 5 12 syl2anc φ bits A mod 2 N = bits A 0 ..^ N
14 11 13 eqtrd φ bits 0 A mod 2 N = bits A 0 ..^ N
15 bitsf1o bits 0 : 0 1-1 onto 𝒫 0 Fin
16 f1ocnvfv bits 0 : 0 1-1 onto 𝒫 0 Fin A mod 2 N 0 bits 0 A mod 2 N = bits A 0 ..^ N bits 0 -1 bits A 0 ..^ N = A mod 2 N
17 15 10 16 sylancr φ bits 0 A mod 2 N = bits A 0 ..^ N bits 0 -1 bits A 0 ..^ N = A mod 2 N
18 14 17 mpd φ bits 0 -1 bits A 0 ..^ N = A mod 2 N
19 6 18 syl5eq φ K bits A 0 ..^ N = A mod 2 N
20 19 oveq2d φ A K bits A 0 ..^ N = A A mod 2 N
21 20 oveq1d φ A K bits A 0 ..^ N 2 N = A A mod 2 N 2 N
22 3 zred φ A
23 9 nnrpd φ 2 N +
24 moddifz A 2 N + A A mod 2 N 2 N
25 22 23 24 syl2anc φ A A mod 2 N 2 N
26 21 25 eqeltrd φ A K bits A 0 ..^ N 2 N
27 9 nnzd φ 2 N
28 9 nnne0d φ 2 N 0
29 inss1 bits A 0 ..^ N bits A
30 bitsss bits A 0
31 29 30 sstri bits A 0 ..^ N 0
32 fzofi 0 ..^ N Fin
33 inss2 bits A 0 ..^ N 0 ..^ N
34 ssfi 0 ..^ N Fin bits A 0 ..^ N 0 ..^ N bits A 0 ..^ N Fin
35 32 33 34 mp2an bits A 0 ..^ N Fin
36 elfpw bits A 0 ..^ N 𝒫 0 Fin bits A 0 ..^ N 0 bits A 0 ..^ N Fin
37 31 35 36 mpbir2an bits A 0 ..^ N 𝒫 0 Fin
38 f1ocnv bits 0 : 0 1-1 onto 𝒫 0 Fin bits 0 -1 : 𝒫 0 Fin 1-1 onto 0
39 f1of bits 0 -1 : 𝒫 0 Fin 1-1 onto 0 bits 0 -1 : 𝒫 0 Fin 0
40 15 38 39 mp2b bits 0 -1 : 𝒫 0 Fin 0
41 2 feq1i K : 𝒫 0 Fin 0 bits 0 -1 : 𝒫 0 Fin 0
42 40 41 mpbir K : 𝒫 0 Fin 0
43 42 ffvelrni bits A 0 ..^ N 𝒫 0 Fin K bits A 0 ..^ N 0
44 37 43 mp1i φ K bits A 0 ..^ N 0
45 44 nn0zd φ K bits A 0 ..^ N
46 3 45 zsubcld φ A K bits A 0 ..^ N
47 dvdsval2 2 N 2 N 0 A K bits A 0 ..^ N 2 N A K bits A 0 ..^ N A K bits A 0 ..^ N 2 N
48 27 28 46 47 syl3anc φ 2 N A K bits A 0 ..^ N A K bits A 0 ..^ N 2 N
49 26 48 mpbird φ 2 N A K bits A 0 ..^ N
50 2 fveq1i K bits B 0 ..^ N = bits 0 -1 bits B 0 ..^ N
51 4 9 zmodcld φ B mod 2 N 0
52 51 fvresd φ bits 0 B mod 2 N = bits B mod 2 N
53 bitsmod B N 0 bits B mod 2 N = bits B 0 ..^ N
54 4 5 53 syl2anc φ bits B mod 2 N = bits B 0 ..^ N
55 52 54 eqtrd φ bits 0 B mod 2 N = bits B 0 ..^ N
56 f1ocnvfv bits 0 : 0 1-1 onto 𝒫 0 Fin B mod 2 N 0 bits 0 B mod 2 N = bits B 0 ..^ N bits 0 -1 bits B 0 ..^ N = B mod 2 N
57 15 51 56 sylancr φ bits 0 B mod 2 N = bits B 0 ..^ N bits 0 -1 bits B 0 ..^ N = B mod 2 N
58 55 57 mpd φ bits 0 -1 bits B 0 ..^ N = B mod 2 N
59 50 58 syl5eq φ K bits B 0 ..^ N = B mod 2 N
60 59 oveq2d φ B K bits B 0 ..^ N = B B mod 2 N
61 60 oveq1d φ B K bits B 0 ..^ N 2 N = B B mod 2 N 2 N
62 4 zred φ B
63 moddifz B 2 N + B B mod 2 N 2 N
64 62 23 63 syl2anc φ B B mod 2 N 2 N
65 61 64 eqeltrd φ B K bits B 0 ..^ N 2 N
66 inss1 bits B 0 ..^ N bits B
67 bitsss bits B 0
68 66 67 sstri bits B 0 ..^ N 0
69 inss2 bits B 0 ..^ N 0 ..^ N
70 ssfi 0 ..^ N Fin bits B 0 ..^ N 0 ..^ N bits B 0 ..^ N Fin
71 32 69 70 mp2an bits B 0 ..^ N Fin
72 elfpw bits B 0 ..^ N 𝒫 0 Fin bits B 0 ..^ N 0 bits B 0 ..^ N Fin
73 68 71 72 mpbir2an bits B 0 ..^ N 𝒫 0 Fin
74 42 ffvelrni bits B 0 ..^ N 𝒫 0 Fin K bits B 0 ..^ N 0
75 73 74 mp1i φ K bits B 0 ..^ N 0
76 75 nn0zd φ K bits B 0 ..^ N
77 4 76 zsubcld φ B K bits B 0 ..^ N
78 dvdsval2 2 N 2 N 0 B K bits B 0 ..^ N 2 N B K bits B 0 ..^ N B K bits B 0 ..^ N 2 N
79 27 28 77 78 syl3anc φ 2 N B K bits B 0 ..^ N B K bits B 0 ..^ N 2 N
80 65 79 mpbird φ 2 N B K bits B 0 ..^ N
81 dvds2add 2 N A K bits A 0 ..^ N B K bits B 0 ..^ N 2 N A K bits A 0 ..^ N 2 N B K bits B 0 ..^ N 2 N A K bits A 0 ..^ N + B - K bits B 0 ..^ N
82 27 46 77 81 syl3anc φ 2 N A K bits A 0 ..^ N 2 N B K bits B 0 ..^ N 2 N A K bits A 0 ..^ N + B - K bits B 0 ..^ N
83 49 80 82 mp2and φ 2 N A K bits A 0 ..^ N + B - K bits B 0 ..^ N
84 3 zcnd φ A
85 4 zcnd φ B
86 44 nn0cnd φ K bits A 0 ..^ N
87 75 nn0cnd φ K bits B 0 ..^ N
88 84 85 86 87 addsub4d φ A + B - K bits A 0 ..^ N + K bits B 0 ..^ N = A K bits A 0 ..^ N + B - K bits B 0 ..^ N
89 83 88 breqtrrd φ 2 N A + B - K bits A 0 ..^ N + K bits B 0 ..^ N
90 3 4 zaddcld φ A + B
91 45 76 zaddcld φ K bits A 0 ..^ N + K bits B 0 ..^ N
92 moddvds 2 N A + B K bits A 0 ..^ N + K bits B 0 ..^ N A + B mod 2 N = K bits A 0 ..^ N + K bits B 0 ..^ N mod 2 N 2 N A + B - K bits A 0 ..^ N + K bits B 0 ..^ N
93 9 90 91 92 syl3anc φ A + B mod 2 N = K bits A 0 ..^ N + K bits B 0 ..^ N mod 2 N 2 N A + B - K bits A 0 ..^ N + K bits B 0 ..^ N
94 89 93 mpbird φ A + B mod 2 N = K bits A 0 ..^ N + K bits B 0 ..^ N mod 2 N
95 30 a1i φ bits A 0
96 67 a1i φ bits B 0
97 95 96 1 5 2 sadadd3 φ K bits A sadd bits B 0 ..^ N mod 2 N = K bits A 0 ..^ N + K bits B 0 ..^ N mod 2 N
98 inss1 bits A sadd bits B 0 ..^ N bits A sadd bits B
99 sadcl bits A 0 bits B 0 bits A sadd bits B 0
100 30 67 99 mp2an bits A sadd bits B 0
101 98 100 sstri bits A sadd bits B 0 ..^ N 0
102 inss2 bits A sadd bits B 0 ..^ N 0 ..^ N
103 ssfi 0 ..^ N Fin bits A sadd bits B 0 ..^ N 0 ..^ N bits A sadd bits B 0 ..^ N Fin
104 32 102 103 mp2an bits A sadd bits B 0 ..^ N Fin
105 elfpw bits A sadd bits B 0 ..^ N 𝒫 0 Fin bits A sadd bits B 0 ..^ N 0 bits A sadd bits B 0 ..^ N Fin
106 101 104 105 mpbir2an bits A sadd bits B 0 ..^ N 𝒫 0 Fin
107 42 ffvelrni bits A sadd bits B 0 ..^ N 𝒫 0 Fin K bits A sadd bits B 0 ..^ N 0
108 106 107 mp1i φ K bits A sadd bits B 0 ..^ N 0
109 108 nn0red φ K bits A sadd bits B 0 ..^ N
110 108 nn0ge0d φ 0 K bits A sadd bits B 0 ..^ N
111 2 fveq1i K bits A sadd bits B 0 ..^ N = bits 0 -1 bits A sadd bits B 0 ..^ N
112 111 fveq2i bits 0 K bits A sadd bits B 0 ..^ N = bits 0 bits 0 -1 bits A sadd bits B 0 ..^ N
113 108 fvresd φ bits 0 K bits A sadd bits B 0 ..^ N = bits K bits A sadd bits B 0 ..^ N
114 106 a1i φ bits A sadd bits B 0 ..^ N 𝒫 0 Fin
115 f1ocnvfv2 bits 0 : 0 1-1 onto 𝒫 0 Fin bits A sadd bits B 0 ..^ N 𝒫 0 Fin bits 0 bits 0 -1 bits A sadd bits B 0 ..^ N = bits A sadd bits B 0 ..^ N
116 15 114 115 sylancr φ bits 0 bits 0 -1 bits A sadd bits B 0 ..^ N = bits A sadd bits B 0 ..^ N
117 112 113 116 3eqtr3a φ bits K bits A sadd bits B 0 ..^ N = bits A sadd bits B 0 ..^ N
118 117 102 eqsstrdi φ bits K bits A sadd bits B 0 ..^ N 0 ..^ N
119 108 nn0zd φ K bits A sadd bits B 0 ..^ N
120 bitsfzo K bits A sadd bits B 0 ..^ N N 0 K bits A sadd bits B 0 ..^ N 0 ..^ 2 N bits K bits A sadd bits B 0 ..^ N 0 ..^ N
121 119 5 120 syl2anc φ K bits A sadd bits B 0 ..^ N 0 ..^ 2 N bits K bits A sadd bits B 0 ..^ N 0 ..^ N
122 118 121 mpbird φ K bits A sadd bits B 0 ..^ N 0 ..^ 2 N
123 elfzolt2 K bits A sadd bits B 0 ..^ N 0 ..^ 2 N K bits A sadd bits B 0 ..^ N < 2 N
124 122 123 syl φ K bits A sadd bits B 0 ..^ N < 2 N
125 modid K bits A sadd bits B 0 ..^ N 2 N + 0 K bits A sadd bits B 0 ..^ N K bits A sadd bits B 0 ..^ N < 2 N K bits A sadd bits B 0 ..^ N mod 2 N = K bits A sadd bits B 0 ..^ N
126 109 23 110 124 125 syl22anc φ K bits A sadd bits B 0 ..^ N mod 2 N = K bits A sadd bits B 0 ..^ N
127 94 97 126 3eqtr2d φ A + B mod 2 N = K bits A sadd bits B 0 ..^ N
128 127 fveq2d φ bits A + B mod 2 N = bits K bits A sadd bits B 0 ..^ N
129 128 117 eqtr2d φ bits A sadd bits B 0 ..^ N = bits A + B mod 2 N