Metamath Proof Explorer


Theorem bitsshft

Description: Shifting a bit sequence to the left (toward the more significant bits) causes the number to be multiplied by a power of two. (Contributed by Mario Carneiro, 22-Sep-2016)

Ref Expression
Assertion bitsshft ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → n ∈ ℕ 0 | n − N ∈ bits ⁡ A = bits ⁡ A ⁢ 2 N

Proof

Step Hyp Ref Expression
1 simpll ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → A ∈ ℤ
2 2nn ⊢ 2 ∈ ℕ
3 2 a1i ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → 2 ∈ ℕ
4 simplr ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → N ∈ ℕ 0
5 3 4 nnexpcld ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → 2 N ∈ ℕ
6 5 nnzd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → 2 N ∈ ℤ
7 dvdsmul2 ⊢ A ∈ ℤ ∧ 2 N ∈ ℤ → 2 N ∥ A ⁢ 2 N
8 1 6 7 syl2anc ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → 2 N ∥ A ⁢ 2 N
9 1 6 zmulcld ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → A ⁢ 2 N ∈ ℤ
10 bitsuz ⊢ A ⁢ 2 N ∈ ℤ ∧ N ∈ ℕ 0 → 2 N ∥ A ⁢ 2 N ↔ bits ⁡ A ⁢ 2 N ⊆ ℤ ≥ N
11 9 4 10 syl2anc ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → 2 N ∥ A ⁢ 2 N ↔ bits ⁡ A ⁢ 2 N ⊆ ℤ ≥ N
12 8 11 mpbid ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → bits ⁡ A ⁢ 2 N ⊆ ℤ ≥ N
13 12 sseld ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → n ∈ bits ⁡ A ⁢ 2 N → n ∈ ℤ ≥ N
14 uznn0sub ⊢ n ∈ ℤ ≥ N → n − N ∈ ℕ 0
15 13 14 syl6 ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → n ∈ bits ⁡ A ⁢ 2 N → n − N ∈ ℕ 0
16 bitsss ⊢ bits ⁡ A ⊆ ℕ 0
17 16 a1i ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → bits ⁡ A ⊆ ℕ 0
18 17 sseld ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → n − N ∈ bits ⁡ A → n − N ∈ ℕ 0
19 2cnd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → 2 ∈ ℂ
20 2 a1i ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → 2 ∈ ℕ
21 20 nnne0d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → 2 ≠ 0
22 simplr ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → N ∈ ℕ 0
23 22 nn0zd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → N ∈ ℤ
24 simprl ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → n ∈ ℕ 0
25 24 nn0zd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → n ∈ ℤ
26 19 21 23 25 expsubd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → 2 n − N = 2 n 2 N
27 26 oveq2d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → A 2 n − N = A 2 n 2 N
28 simpl ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A ∈ ℤ
29 28 zcnd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → A ∈ ℂ
30 29 adantr ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → A ∈ ℂ
31 20 24 nnexpcld ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → 2 n ∈ ℕ
32 31 nncnd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → 2 n ∈ ℂ
33 20 22 nnexpcld ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → 2 N ∈ ℕ
34 33 nncnd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → 2 N ∈ ℂ
35 31 nnne0d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → 2 n ≠ 0
36 33 nnne0d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → 2 N ≠ 0
37 30 32 34 35 36 divdiv2d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → A 2 n 2 N = A ⁢ 2 N 2 n
38 27 37 eqtr2d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → A ⁢ 2 N 2 n = A 2 n − N
39 38 fveq2d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → A ⁢ 2 N 2 n = A 2 n − N
40 39 breq2d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → 2 ∥ A ⁢ 2 N 2 n ↔ 2 ∥ A 2 n − N
41 40 notbid ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → ¬ 2 ∥ A ⁢ 2 N 2 n ↔ ¬ 2 ∥ A 2 n − N
42 9 adantrr ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → A ⁢ 2 N ∈ ℤ
43 bitsval2 ⊢ A ⁢ 2 N ∈ ℤ ∧ n ∈ ℕ 0 → n ∈ bits ⁡ A ⁢ 2 N ↔ ¬ 2 ∥ A ⁢ 2 N 2 n
44 42 24 43 syl2anc ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → n ∈ bits ⁡ A ⁢ 2 N ↔ ¬ 2 ∥ A ⁢ 2 N 2 n
45 bitsval2 ⊢ A ∈ ℤ ∧ n − N ∈ ℕ 0 → n − N ∈ bits ⁡ A ↔ ¬ 2 ∥ A 2 n − N
46 45 ad2ant2rl ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → n − N ∈ bits ⁡ A ↔ ¬ 2 ∥ A 2 n − N
47 41 44 46 3bitr4d ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 ∧ n − N ∈ ℕ 0 → n ∈ bits ⁡ A ⁢ 2 N ↔ n − N ∈ bits ⁡ A
48 47 expr ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → n − N ∈ ℕ 0 → n ∈ bits ⁡ A ⁢ 2 N ↔ n − N ∈ bits ⁡ A
49 15 18 48 pm5.21ndd ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 ∧ n ∈ ℕ 0 → n ∈ bits ⁡ A ⁢ 2 N ↔ n − N ∈ bits ⁡ A
50 49 rabbi2dva ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → ℕ 0 ∩ bits ⁡ A ⁢ 2 N = n ∈ ℕ 0 | n − N ∈ bits ⁡ A
51 bitsss ⊢ bits ⁡ A ⁢ 2 N ⊆ ℕ 0
52 sseqin2 ⊢ bits ⁡ A ⁢ 2 N ⊆ ℕ 0 ↔ ℕ 0 ∩ bits ⁡ A ⁢ 2 N = bits ⁡ A ⁢ 2 N
53 51 52 mpbi ⊢ ℕ 0 ∩ bits ⁡ A ⁢ 2 N = bits ⁡ A ⁢ 2 N
54 50 53 eqtr3di ⊢ A ∈ ℤ ∧ N ∈ ℕ 0 → n ∈ ℕ 0 | n − N ∈ bits ⁡ A = bits ⁡ A ⁢ 2 N