Metamath Proof Explorer


Theorem bitsmod

Description: Truncating the bit sequence after some M is equivalent to reducing the argument mod 2 ^ M . (Contributed by Mario Carneiro, 6-Sep-2016)

Ref Expression
Assertion bitsmod NM0bitsNmod2M=bitsN0..^M

Proof

Step Hyp Ref Expression
1 simpl NM0N
2 2nn 2
3 2 a1i NM02
4 simpr NM0M0
5 3 4 nnexpcld NM02M
6 1 5 zmodcld NM0Nmod2M0
7 6 nn0zd NM0Nmod2M
8 7 biantrurd NM0x0¬2Nmod2M2xNmod2Mx0¬2Nmod2M2x
9 1 ad2antrr NM0x0x<MN
10 simplr NM0x0x<Mx0
11 bitsval2 Nx0xbitsN¬2N2x
12 9 10 11 syl2anc NM0x0x<MxbitsN¬2N2x
13 simpr NM0x0x<Mx<M
14 13 biantrud NM0x0x<MxbitsNxbitsNx<M
15 2z 2
16 15 a1i NM0x0x<M2
17 9 zred NM0x0x<MN
18 2 a1i NM0x0x<M2
19 18 10 nnexpcld NM0x0x<M2x
20 17 19 nndivred NM0x0x<MN2x
21 20 flcld NM0x0x<MN2x
22 7 ad2antrr NM0x0x<MNmod2M
23 22 zred NM0x0x<MNmod2M
24 23 19 nndivred NM0x0x<MNmod2M2x
25 24 flcld NM0x0x<MNmod2M2x
26 19 nnzd NM0x0x<M2x
27 26 16 zmulcld NM0x0x<M2x2
28 5 ad2antrr NM0x0x<M2M
29 28 nnzd NM0x0x<M2M
30 9 22 zsubcld NM0x0x<MNNmod2M
31 2cnd NM0x0x<M2
32 31 10 expp1d NM0x0x<M2x+1=2x2
33 1nn0 10
34 33 a1i NM0x0x<M10
35 10 34 nn0addcld NM0x0x<Mx+10
36 35 nn0zd NM0x0x<Mx+1
37 simplr NM0x0M0
38 37 adantr NM0x0x<MM0
39 38 nn0zd NM0x0x<MM
40 nn0ltp1le x0M0x<Mx+1M
41 10 38 40 syl2anc NM0x0x<Mx<Mx+1M
42 13 41 mpbid NM0x0x<Mx+1M
43 eluz2 Mx+1x+1Mx+1M
44 36 39 42 43 syl3anbrc NM0x0x<MMx+1
45 dvdsexp 2x+10Mx+12x+12M
46 16 35 44 45 syl3anc NM0x0x<M2x+12M
47 32 46 eqbrtrrd NM0x0x<M2x22M
48 28 nnrpd NM0x0x<M2M+
49 moddifz N2M+NNmod2M2M
50 17 48 49 syl2anc NM0x0x<MNNmod2M2M
51 2ne0 20
52 51 a1i NM0x0x<M20
53 31 52 39 expne0d NM0x0x<M2M0
54 dvdsval2 2M2M0NNmod2M2MNNmod2MNNmod2M2M
55 29 53 30 54 syl3anc NM0x0x<M2MNNmod2MNNmod2M2M
56 50 55 mpbird NM0x0x<M2MNNmod2M
57 27 29 30 47 56 dvdstrd NM0x0x<M2x2NNmod2M
58 30 zcnd NM0x0x<MNNmod2M
59 19 nncnd NM0x0x<M2x
60 10 nn0zd NM0x0x<Mx
61 31 52 60 expne0d NM0x0x<M2x0
62 58 59 61 divcan2d NM0x0x<M2xNNmod2M2x=NNmod2M
63 57 62 breqtrrd NM0x0x<M2x22xNNmod2M2x
64 10 nn0red NM0x0x<Mx
65 38 nn0red NM0x0x<MM
66 64 65 13 ltled NM0x0x<MxM
67 eluz2 MxxMxM
68 60 39 66 67 syl3anbrc NM0x0x<MMx
69 dvdsexp 2x0Mx2x2M
70 16 10 68 69 syl3anc NM0x0x<M2x2M
71 26 29 30 70 56 dvdstrd NM0x0x<M2xNNmod2M
72 dvdsval2 2x2x0NNmod2M2xNNmod2MNNmod2M2x
73 26 61 30 72 syl3anc NM0x0x<M2xNNmod2MNNmod2M2x
74 71 73 mpbid NM0x0x<MNNmod2M2x
75 dvdscmulr 2NNmod2M2x2x2x02x22xNNmod2M2x2NNmod2M2x
76 16 74 26 61 75 syl112anc NM0x0x<M2x22xNNmod2M2x2NNmod2M2x
77 63 76 mpbid NM0x0x<M2NNmod2M2x
78 25 zcnd NM0x0x<MNmod2M2x
79 74 zcnd NM0x0x<MNNmod2M2x
80 22 zcnd NM0x0x<MNmod2M
81 9 zcnd NM0x0x<MN
82 80 81 pncan3d NM0x0x<MNmod2M+N-Nmod2M=N
83 82 oveq1d NM0x0x<MNmod2M+N-Nmod2M2x=N2x
84 80 58 59 61 divdird NM0x0x<MNmod2M+N-Nmod2M2x=Nmod2M2x+NNmod2M2x
85 83 84 eqtr3d NM0x0x<MN2x=Nmod2M2x+NNmod2M2x
86 85 fveq2d NM0x0x<MN2x=Nmod2M2x+NNmod2M2x
87 fladdz Nmod2M2xNNmod2M2xNmod2M2x+NNmod2M2x=Nmod2M2x+NNmod2M2x
88 24 74 87 syl2anc NM0x0x<MNmod2M2x+NNmod2M2x=Nmod2M2x+NNmod2M2x
89 86 88 eqtrd NM0x0x<MN2x=Nmod2M2x+NNmod2M2x
90 78 79 89 mvrladdd NM0x0x<MN2xNmod2M2x=NNmod2M2x
91 77 90 breqtrrd NM0x0x<M2N2xNmod2M2x
92 dvdssub2 2N2xNmod2M2x2N2xNmod2M2x2N2x2Nmod2M2x
93 16 21 25 91 92 syl31anc NM0x0x<M2N2x2Nmod2M2x
94 93 notbid NM0x0x<M¬2N2x¬2Nmod2M2x
95 12 14 94 3bitr3d NM0x0x<MxbitsNx<M¬2Nmod2M2x
96 z0even 20
97 1 ad2antrr NM0x0¬x<MN
98 97 zred NM0x0¬x<MN
99 2rp 2+
100 99 a1i NM0x0¬x<M2+
101 37 nn0zd NM0x0M
102 101 adantr NM0x0¬x<MM
103 100 102 rpexpcld NM0x0¬x<M2M+
104 98 103 modcld NM0x0¬x<MNmod2M
105 simplr NM0x0¬x<Mx0
106 105 nn0zd NM0x0¬x<Mx
107 100 106 rpexpcld NM0x0¬x<M2x+
108 6 ad2antrr NM0x0¬x<MNmod2M0
109 108 nn0ge0d NM0x0¬x<M0Nmod2M
110 104 107 109 divge0d NM0x0¬x<M0Nmod2M2x
111 103 rpred NM0x0¬x<M2M
112 107 rpred NM0x0¬x<M2x
113 modlt N2M+Nmod2M<2M
114 98 103 113 syl2anc NM0x0¬x<MNmod2M<2M
115 100 rpred NM0x0¬x<M2
116 1le2 12
117 116 a1i NM0x0¬x<M12
118 102 zred NM0x0¬x<MM
119 105 nn0red NM0x0¬x<Mx
120 simpr NM0x0¬x<M¬x<M
121 118 119 120 nltled NM0x0¬x<MMx
122 eluz2 xMMxMx
123 102 106 121 122 syl3anbrc NM0x0¬x<MxM
124 115 117 123 leexp2ad NM0x0¬x<M2M2x
125 104 111 112 114 124 ltletrd NM0x0¬x<MNmod2M<2x
126 107 rpcnd NM0x0¬x<M2x
127 126 mulridd NM0x0¬x<M2x1=2x
128 125 127 breqtrrd NM0x0¬x<MNmod2M<2x1
129 1red NM0x0¬x<M1
130 104 129 107 ltdivmuld NM0x0¬x<MNmod2M2x<1Nmod2M<2x1
131 128 130 mpbird NM0x0¬x<MNmod2M2x<1
132 1e0p1 1=0+1
133 131 132 breqtrdi NM0x0¬x<MNmod2M2x<0+1
134 104 107 rerpdivcld NM0x0¬x<MNmod2M2x
135 0z 0
136 flbi Nmod2M2x0Nmod2M2x=00Nmod2M2xNmod2M2x<0+1
137 134 135 136 sylancl NM0x0¬x<MNmod2M2x=00Nmod2M2xNmod2M2x<0+1
138 110 133 137 mpbir2and NM0x0¬x<MNmod2M2x=0
139 96 138 breqtrrid NM0x0¬x<M2Nmod2M2x
140 120 intnand NM0x0¬x<M¬xbitsNx<M
141 139 140 2thd NM0x0¬x<M2Nmod2M2x¬xbitsNx<M
142 141 con2bid NM0x0¬x<MxbitsNx<M¬2Nmod2M2x
143 95 142 pm2.61dan NM0x0xbitsNx<M¬2Nmod2M2x
144 101 biantrurd NM0x0xbitsNx<MMxbitsNx<M
145 143 144 bitr3d NM0x0¬2Nmod2M2xMxbitsNx<M
146 an12 MxbitsNx<MxbitsNMx<M
147 145 146 bitrdi NM0x0¬2Nmod2M2xxbitsNMx<M
148 147 pm5.32da NM0x0¬2Nmod2M2xx0xbitsNMx<M
149 8 148 bitr3d NM0Nmod2Mx0¬2Nmod2M2xx0xbitsNMx<M
150 3anass Nmod2Mx0¬2Nmod2M2xNmod2Mx0¬2Nmod2M2x
151 elfzo2 x0..^Mx0Mx<M
152 elnn0uz x0x0
153 152 3anbi1i x0Mx<Mx0Mx<M
154 3anass x0Mx<Mx0Mx<M
155 151 153 154 3bitr2i x0..^Mx0Mx<M
156 155 anbi2i xbitsNx0..^MxbitsNx0Mx<M
157 an12 xbitsNx0Mx<Mx0xbitsNMx<M
158 156 157 bitri xbitsNx0..^Mx0xbitsNMx<M
159 149 150 158 3bitr4g NM0Nmod2Mx0¬2Nmod2M2xxbitsNx0..^M
160 bitsval xbitsNmod2MNmod2Mx0¬2Nmod2M2x
161 elin xbitsN0..^MxbitsNx0..^M
162 159 160 161 3bitr4g NM0xbitsNmod2MxbitsN0..^M
163 162 eqrdv NM0bitsNmod2M=bitsN0..^M