Metamath Proof Explorer


Theorem bitsres

Description: Restrict the bits of a number to an upper integer set. (Contributed by Mario Carneiro, 5-Sep-2016)

Ref Expression
Assertion bitsres AN0bitsAN=bitsA2N2N

Proof

Step Hyp Ref Expression
1 simpl AN0A
2 2nn 2
3 2 a1i AN02
4 simpr AN0N0
5 3 4 nnexpcld AN02N
6 1 5 zmodcld AN0Amod2N0
7 6 nn0zd AN0Amod2N
8 7 znegcld AN0Amod2N
9 sadadd Amod2NAbitsAmod2NsaddbitsA=bits-Amod2N+A
10 8 1 9 syl2anc AN0bitsAmod2NsaddbitsA=bits-Amod2N+A
11 sadadd Amod2NAmod2NbitsAmod2NsaddbitsAmod2N=bits-Amod2N+Amod2N
12 8 7 11 syl2anc AN0bitsAmod2NsaddbitsAmod2N=bits-Amod2N+Amod2N
13 8 zcnd AN0Amod2N
14 7 zcnd AN0Amod2N
15 13 14 addcomd AN0-Amod2N+Amod2N=Amod2N+Amod2N
16 14 negidd AN0Amod2N+Amod2N=0
17 15 16 eqtrd AN0-Amod2N+Amod2N=0
18 17 fveq2d AN0bits-Amod2N+Amod2N=bits0
19 0bits bits0=
20 18 19 eqtrdi AN0bits-Amod2N+Amod2N=
21 12 20 eqtrd AN0bitsAmod2NsaddbitsAmod2N=
22 21 oveq1d AN0bitsAmod2NsaddbitsAmod2NsaddbitsAN=saddbitsAN
23 bitsss bitsAmod2N0
24 bitsss bitsAmod2N0
25 inss1 bitsANbitsA
26 bitsss bitsA0
27 26 a1i AN0bitsA0
28 25 27 sstrid AN0bitsAN0
29 sadass bitsAmod2N0bitsAmod2N0bitsAN0bitsAmod2NsaddbitsAmod2NsaddbitsAN=bitsAmod2NsaddbitsAmod2NsaddbitsAN
30 23 24 28 29 mp3an12i AN0bitsAmod2NsaddbitsAmod2NsaddbitsAN=bitsAmod2NsaddbitsAmod2NsaddbitsAN
31 bitsmod AN0bitsAmod2N=bitsA0..^N
32 31 oveq1d AN0bitsAmod2NsaddbitsAN=bitsA0..^NsaddbitsAN
33 inss1 bitsA0..^NbitsA
34 33 27 sstrid AN0bitsA0..^N0
35 fzouzdisj 0..^NN=
36 35 ineq2i bitsA0..^NN=bitsA
37 inindi bitsA0..^NN=bitsA0..^NbitsAN
38 in0 bitsA=
39 36 37 38 3eqtr3i bitsA0..^NbitsAN=
40 39 a1i AN0bitsA0..^NbitsAN=
41 34 28 40 saddisj AN0bitsA0..^NsaddbitsAN=bitsA0..^NbitsAN
42 indi bitsA0..^NN=bitsA0..^NbitsAN
43 41 42 eqtr4di AN0bitsA0..^NsaddbitsAN=bitsA0..^NN
44 nn0uz 0=0
45 4 44 eleqtrdi AN0N0
46 fzouzsplit N00=0..^NN
47 45 46 syl AN00=0..^NN
48 44 47 eqtrid AN00=0..^NN
49 26 48 sseqtrid AN0bitsA0..^NN
50 df-ss bitsA0..^NNbitsA0..^NN=bitsA
51 49 50 sylib AN0bitsA0..^NN=bitsA
52 43 51 eqtrd AN0bitsA0..^NsaddbitsAN=bitsA
53 32 52 eqtrd AN0bitsAmod2NsaddbitsAN=bitsA
54 53 oveq2d AN0bitsAmod2NsaddbitsAmod2NsaddbitsAN=bitsAmod2NsaddbitsA
55 30 54 eqtrd AN0bitsAmod2NsaddbitsAmod2NsaddbitsAN=bitsAmod2NsaddbitsA
56 sadid2 bitsAN0saddbitsAN=bitsAN
57 28 56 syl AN0saddbitsAN=bitsAN
58 22 55 57 3eqtr3d AN0bitsAmod2NsaddbitsA=bitsAN
59 1 zcnd AN0A
60 13 59 addcomd AN0-Amod2N+A=A+Amod2N
61 59 14 negsubd AN0A+Amod2N=AAmod2N
62 59 14 subcld AN0AAmod2N
63 5 nncnd AN02N
64 5 nnne0d AN02N0
65 62 63 64 divcan1d AN0AAmod2N2N2N=AAmod2N
66 1 zred AN0A
67 5 nnrpd AN02N+
68 moddiffl A2N+AAmod2N2N=A2N
69 66 67 68 syl2anc AN0AAmod2N2N=A2N
70 69 oveq1d AN0AAmod2N2N2N=A2N2N
71 61 65 70 3eqtr2d AN0A+Amod2N=A2N2N
72 60 71 eqtrd AN0-Amod2N+A=A2N2N
73 72 fveq2d AN0bits-Amod2N+A=bitsA2N2N
74 10 58 73 3eqtr3d AN0bitsAN=bitsA2N2N