Metamath Proof Explorer


Theorem smumullem

Description: Lemma for smumul . (Contributed by Mario Carneiro, 22-Sep-2016)

Ref Expression
Hypotheses smumullem.a ( 𝜑𝐴 ∈ ℤ )
smumullem.b ( 𝜑𝐵 ∈ ℤ )
smumullem.n ( 𝜑𝑁 ∈ ℕ0 )
Assertion smumullem ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑁 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑁 ) ) · 𝐵 ) ) )

Proof

Step Hyp Ref Expression
1 smumullem.a ( 𝜑𝐴 ∈ ℤ )
2 smumullem.b ( 𝜑𝐵 ∈ ℤ )
3 smumullem.n ( 𝜑𝑁 ∈ ℕ0 )
4 oveq2 ( 𝑥 = 0 → ( 0 ..^ 𝑥 ) = ( 0 ..^ 0 ) )
5 fzo0 ( 0 ..^ 0 ) = ∅
6 4 5 eqtrdi ( 𝑥 = 0 → ( 0 ..^ 𝑥 ) = ∅ )
7 6 ineq2d ( 𝑥 = 0 → ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) = ( ( bits ‘ 𝐴 ) ∩ ∅ ) )
8 in0 ( ( bits ‘ 𝐴 ) ∩ ∅ ) = ∅
9 7 8 eqtrdi ( 𝑥 = 0 → ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) = ∅ )
10 9 oveq1d ( 𝑥 = 0 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( ∅ smul ( bits ‘ 𝐵 ) ) )
11 bitsss ( bits ‘ 𝐵 ) ⊆ ℕ0
12 smu02 ( ( bits ‘ 𝐵 ) ⊆ ℕ0 → ( ∅ smul ( bits ‘ 𝐵 ) ) = ∅ )
13 11 12 ax-mp ( ∅ smul ( bits ‘ 𝐵 ) ) = ∅
14 10 13 eqtrdi ( 𝑥 = 0 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ∅ )
15 oveq2 ( 𝑥 = 0 → ( 2 ↑ 𝑥 ) = ( 2 ↑ 0 ) )
16 2cn 2 ∈ ℂ
17 exp0 ( 2 ∈ ℂ → ( 2 ↑ 0 ) = 1 )
18 16 17 ax-mp ( 2 ↑ 0 ) = 1
19 15 18 eqtrdi ( 𝑥 = 0 → ( 2 ↑ 𝑥 ) = 1 )
20 19 oveq2d ( 𝑥 = 0 → ( 𝐴 mod ( 2 ↑ 𝑥 ) ) = ( 𝐴 mod 1 ) )
21 20 fvoveq1d ( 𝑥 = 0 → ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod 1 ) · 𝐵 ) ) )
22 14 21 eqeq12d ( 𝑥 = 0 → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) ↔ ∅ = ( bits ‘ ( ( 𝐴 mod 1 ) · 𝐵 ) ) ) )
23 22 imbi2d ( 𝑥 = 0 → ( ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) ) ↔ ( 𝜑 → ∅ = ( bits ‘ ( ( 𝐴 mod 1 ) · 𝐵 ) ) ) ) )
24 oveq2 ( 𝑥 = 𝑘 → ( 0 ..^ 𝑥 ) = ( 0 ..^ 𝑘 ) )
25 24 ineq2d ( 𝑥 = 𝑘 → ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) = ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑘 ) ) )
26 25 oveq1d ( 𝑥 = 𝑘 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑘 ) ) smul ( bits ‘ 𝐵 ) ) )
27 oveq2 ( 𝑥 = 𝑘 → ( 2 ↑ 𝑥 ) = ( 2 ↑ 𝑘 ) )
28 27 oveq2d ( 𝑥 = 𝑘 → ( 𝐴 mod ( 2 ↑ 𝑥 ) ) = ( 𝐴 mod ( 2 ↑ 𝑘 ) ) )
29 28 fvoveq1d ( 𝑥 = 𝑘 → ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) )
30 26 29 eqeq12d ( 𝑥 = 𝑘 → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) ↔ ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑘 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) ) )
31 30 imbi2d ( 𝑥 = 𝑘 → ( ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) ) ↔ ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑘 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) ) ) )
32 oveq2 ( 𝑥 = ( 𝑘 + 1 ) → ( 0 ..^ 𝑥 ) = ( 0 ..^ ( 𝑘 + 1 ) ) )
33 32 ineq2d ( 𝑥 = ( 𝑘 + 1 ) → ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) = ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
34 33 oveq1d ( 𝑥 = ( 𝑘 + 1 ) → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) )
35 oveq2 ( 𝑥 = ( 𝑘 + 1 ) → ( 2 ↑ 𝑥 ) = ( 2 ↑ ( 𝑘 + 1 ) ) )
36 35 oveq2d ( 𝑥 = ( 𝑘 + 1 ) → ( 𝐴 mod ( 2 ↑ 𝑥 ) ) = ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) )
37 36 fvoveq1d ( 𝑥 = ( 𝑘 + 1 ) → ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) )
38 34 37 eqeq12d ( 𝑥 = ( 𝑘 + 1 ) → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) ↔ ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) ) )
39 38 imbi2d ( 𝑥 = ( 𝑘 + 1 ) → ( ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) ) ↔ ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) ) ) )
40 oveq2 ( 𝑥 = 𝑁 → ( 0 ..^ 𝑥 ) = ( 0 ..^ 𝑁 ) )
41 40 ineq2d ( 𝑥 = 𝑁 → ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) = ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑁 ) ) )
42 41 oveq1d ( 𝑥 = 𝑁 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑁 ) ) smul ( bits ‘ 𝐵 ) ) )
43 oveq2 ( 𝑥 = 𝑁 → ( 2 ↑ 𝑥 ) = ( 2 ↑ 𝑁 ) )
44 43 oveq2d ( 𝑥 = 𝑁 → ( 𝐴 mod ( 2 ↑ 𝑥 ) ) = ( 𝐴 mod ( 2 ↑ 𝑁 ) ) )
45 44 fvoveq1d ( 𝑥 = 𝑁 → ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑁 ) ) · 𝐵 ) ) )
46 42 45 eqeq12d ( 𝑥 = 𝑁 → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) ↔ ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑁 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑁 ) ) · 𝐵 ) ) ) )
47 46 imbi2d ( 𝑥 = 𝑁 → ( ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑥 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑥 ) ) · 𝐵 ) ) ) ↔ ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑁 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑁 ) ) · 𝐵 ) ) ) ) )
48 zmod10 ( 𝐴 ∈ ℤ → ( 𝐴 mod 1 ) = 0 )
49 1 48 syl ( 𝜑 → ( 𝐴 mod 1 ) = 0 )
50 49 oveq1d ( 𝜑 → ( ( 𝐴 mod 1 ) · 𝐵 ) = ( 0 · 𝐵 ) )
51 2 zcnd ( 𝜑𝐵 ∈ ℂ )
52 51 mul02d ( 𝜑 → ( 0 · 𝐵 ) = 0 )
53 50 52 eqtrd ( 𝜑 → ( ( 𝐴 mod 1 ) · 𝐵 ) = 0 )
54 53 fveq2d ( 𝜑 → ( bits ‘ ( ( 𝐴 mod 1 ) · 𝐵 ) ) = ( bits ‘ 0 ) )
55 0bits ( bits ‘ 0 ) = ∅
56 54 55 eqtr2di ( 𝜑 → ∅ = ( bits ‘ ( ( 𝐴 mod 1 ) · 𝐵 ) ) )
57 oveq1 ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑘 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑘 ) ) smul ( bits ‘ 𝐵 ) ) sadd { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } ) = ( ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) sadd { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } ) )
58 bitsss ( bits ‘ 𝐴 ) ⊆ ℕ0
59 58 a1i ( ( 𝜑𝑘 ∈ ℕ0 ) → ( bits ‘ 𝐴 ) ⊆ ℕ0 )
60 11 a1i ( ( 𝜑𝑘 ∈ ℕ0 ) → ( bits ‘ 𝐵 ) ⊆ ℕ0 )
61 simpr ( ( 𝜑𝑘 ∈ ℕ0 ) → 𝑘 ∈ ℕ0 )
62 59 60 61 smup1 ( ( 𝜑𝑘 ∈ ℕ0 ) → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) = ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑘 ) ) smul ( bits ‘ 𝐵 ) ) sadd { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } ) )
63 bitsinv1lem ( ( 𝐴 ∈ ℤ ∧ 𝑘 ∈ ℕ0 ) → ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) = ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) + if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) )
64 1 63 sylan ( ( 𝜑𝑘 ∈ ℕ0 ) → ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) = ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) + if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) )
65 64 oveq1d ( ( 𝜑𝑘 ∈ ℕ0 ) → ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) = ( ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) + if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) · 𝐵 ) )
66 1 adantr ( ( 𝜑𝑘 ∈ ℕ0 ) → 𝐴 ∈ ℤ )
67 2nn 2 ∈ ℕ
68 67 a1i ( ( 𝜑𝑘 ∈ ℕ0 ) → 2 ∈ ℕ )
69 68 61 nnexpcld ( ( 𝜑𝑘 ∈ ℕ0 ) → ( 2 ↑ 𝑘 ) ∈ ℕ )
70 66 69 zmodcld ( ( 𝜑𝑘 ∈ ℕ0 ) → ( 𝐴 mod ( 2 ↑ 𝑘 ) ) ∈ ℕ0 )
71 70 nn0cnd ( ( 𝜑𝑘 ∈ ℕ0 ) → ( 𝐴 mod ( 2 ↑ 𝑘 ) ) ∈ ℂ )
72 69 nnnn0d ( ( 𝜑𝑘 ∈ ℕ0 ) → ( 2 ↑ 𝑘 ) ∈ ℕ0 )
73 0nn0 0 ∈ ℕ0
74 ifcl ( ( ( 2 ↑ 𝑘 ) ∈ ℕ0 ∧ 0 ∈ ℕ0 ) → if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ∈ ℕ0 )
75 72 73 74 sylancl ( ( 𝜑𝑘 ∈ ℕ0 ) → if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ∈ ℕ0 )
76 75 nn0cnd ( ( 𝜑𝑘 ∈ ℕ0 ) → if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ∈ ℂ )
77 51 adantr ( ( 𝜑𝑘 ∈ ℕ0 ) → 𝐵 ∈ ℂ )
78 71 76 77 adddird ( ( 𝜑𝑘 ∈ ℕ0 ) → ( ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) + if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) · 𝐵 ) = ( ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) + ( if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) · 𝐵 ) ) )
79 76 77 mulcomd ( ( 𝜑𝑘 ∈ ℕ0 ) → ( if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) · 𝐵 ) = ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) )
80 79 oveq2d ( ( 𝜑𝑘 ∈ ℕ0 ) → ( ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) + ( if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) · 𝐵 ) ) = ( ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) + ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ) )
81 65 78 80 3eqtrd ( ( 𝜑𝑘 ∈ ℕ0 ) → ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) = ( ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) + ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ) )
82 81 fveq2d ( ( 𝜑𝑘 ∈ ℕ0 ) → ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) = ( bits ‘ ( ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) + ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ) ) )
83 70 nn0zd ( ( 𝜑𝑘 ∈ ℕ0 ) → ( 𝐴 mod ( 2 ↑ 𝑘 ) ) ∈ ℤ )
84 2 adantr ( ( 𝜑𝑘 ∈ ℕ0 ) → 𝐵 ∈ ℤ )
85 83 84 zmulcld ( ( 𝜑𝑘 ∈ ℕ0 ) → ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ∈ ℤ )
86 75 nn0zd ( ( 𝜑𝑘 ∈ ℕ0 ) → if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ∈ ℤ )
87 84 86 zmulcld ( ( 𝜑𝑘 ∈ ℕ0 ) → ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ∈ ℤ )
88 sadadd ( ( ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ∈ ℤ ∧ ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ∈ ℤ ) → ( ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) sadd ( bits ‘ ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ) ) = ( bits ‘ ( ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) + ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ) ) )
89 85 87 88 syl2anc ( ( 𝜑𝑘 ∈ ℕ0 ) → ( ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) sadd ( bits ‘ ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ) ) = ( bits ‘ ( ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) + ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ) ) )
90 oveq2 ( ( 2 ↑ 𝑘 ) = if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) → ( 𝐵 · ( 2 ↑ 𝑘 ) ) = ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) )
91 90 fveqeq2d ( ( 2 ↑ 𝑘 ) = if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) → ( ( bits ‘ ( 𝐵 · ( 2 ↑ 𝑘 ) ) ) = { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } ↔ ( bits ‘ ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ) = { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } ) )
92 oveq2 ( 0 = if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) → ( 𝐵 · 0 ) = ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) )
93 92 fveqeq2d ( 0 = if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) → ( ( bits ‘ ( 𝐵 · 0 ) ) = { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } ↔ ( bits ‘ ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ) = { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } ) )
94 bitsshft ( ( 𝐵 ∈ ℤ ∧ 𝑘 ∈ ℕ0 ) → { 𝑛 ∈ ℕ0 ∣ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) } = ( bits ‘ ( 𝐵 · ( 2 ↑ 𝑘 ) ) ) )
95 2 94 sylan ( ( 𝜑𝑘 ∈ ℕ0 ) → { 𝑛 ∈ ℕ0 ∣ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) } = ( bits ‘ ( 𝐵 · ( 2 ↑ 𝑘 ) ) ) )
96 ibar ( 𝑘 ∈ ( bits ‘ 𝐴 ) → ( ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ↔ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) ) )
97 96 rabbidv ( 𝑘 ∈ ( bits ‘ 𝐴 ) → { 𝑛 ∈ ℕ0 ∣ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) } = { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } )
98 95 97 sylan9req ( ( ( 𝜑𝑘 ∈ ℕ0 ) ∧ 𝑘 ∈ ( bits ‘ 𝐴 ) ) → ( bits ‘ ( 𝐵 · ( 2 ↑ 𝑘 ) ) ) = { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } )
99 77 adantr ( ( ( 𝜑𝑘 ∈ ℕ0 ) ∧ ¬ 𝑘 ∈ ( bits ‘ 𝐴 ) ) → 𝐵 ∈ ℂ )
100 99 mul01d ( ( ( 𝜑𝑘 ∈ ℕ0 ) ∧ ¬ 𝑘 ∈ ( bits ‘ 𝐴 ) ) → ( 𝐵 · 0 ) = 0 )
101 100 fveq2d ( ( ( 𝜑𝑘 ∈ ℕ0 ) ∧ ¬ 𝑘 ∈ ( bits ‘ 𝐴 ) ) → ( bits ‘ ( 𝐵 · 0 ) ) = ( bits ‘ 0 ) )
102 simpr ( ( ( 𝜑𝑘 ∈ ℕ0 ) ∧ ¬ 𝑘 ∈ ( bits ‘ 𝐴 ) ) → ¬ 𝑘 ∈ ( bits ‘ 𝐴 ) )
103 102 intnanrd ( ( ( 𝜑𝑘 ∈ ℕ0 ) ∧ ¬ 𝑘 ∈ ( bits ‘ 𝐴 ) ) → ¬ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) )
104 103 ralrimivw ( ( ( 𝜑𝑘 ∈ ℕ0 ) ∧ ¬ 𝑘 ∈ ( bits ‘ 𝐴 ) ) → ∀ 𝑛 ∈ ℕ0 ¬ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) )
105 rabeq0 ( { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } = ∅ ↔ ∀ 𝑛 ∈ ℕ0 ¬ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) )
106 104 105 sylibr ( ( ( 𝜑𝑘 ∈ ℕ0 ) ∧ ¬ 𝑘 ∈ ( bits ‘ 𝐴 ) ) → { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } = ∅ )
107 55 101 106 3eqtr4a ( ( ( 𝜑𝑘 ∈ ℕ0 ) ∧ ¬ 𝑘 ∈ ( bits ‘ 𝐴 ) ) → ( bits ‘ ( 𝐵 · 0 ) ) = { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } )
108 91 93 98 107 ifbothda ( ( 𝜑𝑘 ∈ ℕ0 ) → ( bits ‘ ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ) = { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } )
109 108 oveq2d ( ( 𝜑𝑘 ∈ ℕ0 ) → ( ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) sadd ( bits ‘ ( 𝐵 · if ( 𝑘 ∈ ( bits ‘ 𝐴 ) , ( 2 ↑ 𝑘 ) , 0 ) ) ) ) = ( ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) sadd { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } ) )
110 82 89 109 3eqtr2d ( ( 𝜑𝑘 ∈ ℕ0 ) → ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) = ( ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) sadd { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } ) )
111 62 110 eqeq12d ( ( 𝜑𝑘 ∈ ℕ0 ) → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) ↔ ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑘 ) ) smul ( bits ‘ 𝐵 ) ) sadd { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } ) = ( ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) sadd { 𝑛 ∈ ℕ0 ∣ ( 𝑘 ∈ ( bits ‘ 𝐴 ) ∧ ( 𝑛𝑘 ) ∈ ( bits ‘ 𝐵 ) ) } ) ) )
112 57 111 syl5ibr ( ( 𝜑𝑘 ∈ ℕ0 ) → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑘 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) ) )
113 112 expcom ( 𝑘 ∈ ℕ0 → ( 𝜑 → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑘 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) ) ) )
114 113 a2d ( 𝑘 ∈ ℕ0 → ( ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑘 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑘 ) ) · 𝐵 ) ) ) → ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) ) ) )
115 23 31 39 47 56 114 nn0ind ( 𝑁 ∈ ℕ0 → ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑁 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑁 ) ) · 𝐵 ) ) ) )
116 3 115 mpcom ( 𝜑 → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ 𝑁 ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ 𝑁 ) ) · 𝐵 ) ) )