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 ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A ∩ ℤ ≥ N = bits ⁡ A 2 N ⁢ 2 N

Proof

Step Hyp Ref Expression
1 simpl ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A ∈ ℤ
2 2nn ⊢ 2 ∈ ℕ
3 2 a1i ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → 2 ∈ ℕ
4 simpr ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → N ∈ ℕ 0
5 3 4 nnexpcld ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → 2 N ∈ ℕ
6 1 5 zmodcld ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A mod 2 N ∈ ℕ 0
7 6 nn0zd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A mod 2 N ∈ ℤ
8 7 znegcld ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → − A mod 2 N ∈ ℤ
9 sadadd ⊢ − A mod 2 N ∈ ℤ ∧ A ∈ ℤ → bits ⁡ − A mod 2 N sadd bits ⁡ A = bits ⁡ - A mod 2 N + A
10 8 1 9 syl2anc ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ − A mod 2 N sadd bits ⁡ A = bits ⁡ - A mod 2 N + A
11 sadadd ⊢ − A mod 2 N ∈ ℤ ∧ A mod 2 N ∈ ℤ → bits ⁡ − A mod 2 N sadd bits ⁡ A mod 2 N = bits ⁡ - A mod 2 N + A mod 2 N
12 8 7 11 syl2anc ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ − A mod 2 N sadd bits ⁡ A mod 2 N = bits ⁡ - A mod 2 N + A mod 2 N
13 8 zcnd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → − A mod 2 N ∈ ℂ
14 7 zcnd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A mod 2 N ∈ ℂ
15 13 14 addcomd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → - A mod 2 N + A mod 2 N = A mod 2 N + − A mod 2 N
16 14 negidd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A mod 2 N + − A mod 2 N = 0
17 15 16 eqtrd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → - A mod 2 N + A mod 2 N = 0
18 17 fveq2d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ - A mod 2 N + A mod 2 N = bits ⁡ 0
19 0bits ⊢ bits ⁡ 0 = ∅
20 18 19 eqtrdi ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ - A mod 2 N + A mod 2 N = ∅
21 12 20 eqtrd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ − A mod 2 N sadd bits ⁡ A mod 2 N = ∅
22 21 oveq1d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ − A mod 2 N sadd bits ⁡ A mod 2 N sadd bits ⁡ A ∩ ℤ ≥ N = ∅ sadd bits ⁡ A ∩ ℤ ≥ N
23 bitsss ⊢ bits ⁡ − A mod 2 N ⊆ ℕ 0
24 bitsss ⊢ bits ⁡ A mod 2 N ⊆ ℕ 0
25 inss1 ⊢ bits ⁡ A ∩ ℤ ≥ N ⊆ bits ⁡ A
26 bitsss ⊢ bits ⁡ A ⊆ ℕ 0
27 26 a1i ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A ⊆ ℕ 0
28 25 27 sstrid ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A ∩ ℤ ≥ N ⊆ ℕ 0
29 sadass ⊢ bits ⁡ − A mod 2 N ⊆ ℕ 0 ∧ bits ⁡ A mod 2 N ⊆ ℕ 0 ∧ bits ⁡ A ∩ ℤ ≥ N ⊆ ℕ 0 → bits ⁡ − A mod 2 N sadd bits ⁡ A mod 2 N sadd bits ⁡ A ∩ ℤ ≥ N = bits ⁡ − A mod 2 N sadd bits ⁡ A mod 2 N sadd bits ⁡ A ∩ ℤ ≥ N
30 23 24 28 29 mp3an12i ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ − A mod 2 N sadd bits ⁡ A mod 2 N sadd bits ⁡ A ∩ ℤ ≥ N = bits ⁡ − A mod 2 N sadd bits ⁡ A mod 2 N sadd bits ⁡ A ∩ ℤ ≥ N
31 bitsmod ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A mod 2 N = bits ⁡ A ∩ 0 ..^ N
32 31 oveq1d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A mod 2 N sadd bits ⁡ A ∩ ℤ ≥ N = bits ⁡ A ∩ 0 ..^ N sadd bits ⁡ A ∩ ℤ ≥ N
33 inss1 ⊢ bits ⁡ A ∩ 0 ..^ N ⊆ bits ⁡ A
34 33 27 sstrid ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A ∩ 0 ..^ N ⊆ ℕ 0
35 fzouzdisj ⊢ 0 ..^ N ∩ ℤ ≥ N = ∅
36 35 ineq2i ⊢ bits ⁡ A ∩ 0 ..^ N ∩ ℤ ≥ N = bits ⁡ A ∩ ∅
37 inindi ⊢ bits ⁡ A ∩ 0 ..^ N ∩ ℤ ≥ N = bits ⁡ A ∩ 0 ..^ N ∩ bits ⁡ A ∩ ℤ ≥ N
38 in0 ⊢ bits ⁡ A ∩ ∅ = ∅
39 36 37 38 3eqtr3i ⊢ bits ⁡ A ∩ 0 ..^ N ∩ bits ⁡ A ∩ ℤ ≥ N = ∅
40 39 a1i ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A ∩ 0 ..^ N ∩ bits ⁡ A ∩ ℤ ≥ N = ∅
41 34 28 40 saddisj ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A ∩ 0 ..^ N sadd bits ⁡ A ∩ ℤ ≥ N = bits ⁡ A ∩ 0 ..^ N ∪ bits ⁡ A ∩ ℤ ≥ N
42 indi ⊢ bits ⁡ A ∩ 0 ..^ N ∪ ℤ ≥ N = bits ⁡ A ∩ 0 ..^ N ∪ bits ⁡ A ∩ ℤ ≥ N
43 41 42 eqtr4di ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A ∩ 0 ..^ N sadd bits ⁡ A ∩ ℤ ≥ N = bits ⁡ A ∩ 0 ..^ N ∪ ℤ ≥ N
44 nn0uz ⊢ ℕ 0 = ℤ ≥ 0
45 4 44 eleqtrdi ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → N ∈ ℤ ≥ 0
46 fzouzsplit ⊢ N ∈ ℤ ≥ 0 → ℤ ≥ 0 = 0 ..^ N ∪ ℤ ≥ N
47 45 46 syl ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → ℤ ≥ 0 = 0 ..^ N ∪ ℤ ≥ N
48 44 47 eqtrid ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → ℕ 0 = 0 ..^ N ∪ ℤ ≥ N
49 26 48 sseqtrid ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A ⊆ 0 ..^ N ∪ ℤ ≥ N
50 dfss2 ⊢ bits ⁡ A ⊆ 0 ..^ N ∪ ℤ ≥ N ↔ bits ⁡ A ∩ 0 ..^ N ∪ ℤ ≥ N = bits ⁡ A
51 49 50 sylib ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A ∩ 0 ..^ N ∪ ℤ ≥ N = bits ⁡ A
52 43 51 eqtrd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A ∩ 0 ..^ N sadd bits ⁡ A ∩ ℤ ≥ N = bits ⁡ A
53 32 52 eqtrd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A mod 2 N sadd bits ⁡ A ∩ ℤ ≥ N = bits ⁡ A
54 53 oveq2d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ − A mod 2 N sadd bits ⁡ A mod 2 N sadd bits ⁡ A ∩ ℤ ≥ N = bits ⁡ − A mod 2 N sadd bits ⁡ A
55 30 54 eqtrd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ − A mod 2 N sadd bits ⁡ A mod 2 N sadd bits ⁡ A ∩ ℤ ≥ N = bits ⁡ − A mod 2 N sadd bits ⁡ A
56 sadid2 ⊢ bits ⁡ A ∩ ℤ ≥ N ⊆ ℕ 0 → ∅ sadd bits ⁡ A ∩ ℤ ≥ N = bits ⁡ A ∩ ℤ ≥ N
57 28 56 syl ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → ∅ sadd bits ⁡ A ∩ ℤ ≥ N = bits ⁡ A ∩ ℤ ≥ N
58 22 55 57 3eqtr3d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ − A mod 2 N sadd bits ⁡ A = bits ⁡ A ∩ ℤ ≥ N
59 1 zcnd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A ∈ ℂ
60 13 59 addcomd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → - A mod 2 N + A = A + − A mod 2 N
61 59 14 negsubd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A + − A mod 2 N = A − A mod 2 N
62 59 14 subcld ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A − A mod 2 N ∈ ℂ
63 5 nncnd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → 2 N ∈ ℂ
64 5 nnne0d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → 2 N ≠ 0
65 62 63 64 divcan1d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A − A mod 2 N 2 N ⁢ 2 N = A − A mod 2 N
66 1 zred ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A ∈ ℝ
67 5 nnrpd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → 2 N ∈ ℝ +
68 moddiffl ⊢ A ∈ ℝ ∧ 2 N ∈ ℝ + → A − A mod 2 N 2 N = A 2 N
69 66 67 68 syl2anc ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A − A mod 2 N 2 N = A 2 N
70 69 oveq1d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A − A mod 2 N 2 N ⁢ 2 N = A 2 N ⁢ 2 N
71 61 65 70 3eqtr2d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A + − A mod 2 N = A 2 N ⁢ 2 N
72 60 71 eqtrd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → - A mod 2 N + A = A 2 N ⁢ 2 N
73 72 fveq2d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ - A mod 2 N + A = bits ⁡ A 2 N ⁢ 2 N
74 10 58 73 3eqtr3d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → bits ⁡ A ∩ ℤ ≥ N = bits ⁡ A 2 N ⁢ 2 N