Metamath Proof Explorer


Theorem smumul

Description: For sequences that correspond to valid integers, the sequence multiplication function produces the sequence for the product. This is effectively a proof of the correctness of the multiplication process, implemented in terms of logic gates for df-sad , whose correctness is verified in sadadd .

Outside this range, the sequences cannot be representing integers, but the smul function still "works". This extended function is best interpreted in terms of the ring structure of the 2-adic integers. (Contributed by Mario Carneiro, 22-Sep-2016)

Ref Expression
Assertion smumul ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) → ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( 𝐴 · 𝐵 ) ) )

Proof

Step Hyp Ref Expression
1 bitsss ( bits ‘ 𝐴 ) ⊆ ℕ0
2 bitsss ( bits ‘ 𝐵 ) ⊆ ℕ0
3 smucl ( ( ( bits ‘ 𝐴 ) ⊆ ℕ0 ∧ ( bits ‘ 𝐵 ) ⊆ ℕ0 ) → ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ⊆ ℕ0 )
4 1 2 3 mp2an ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ⊆ ℕ0
5 4 sseli ( 𝑘 ∈ ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) → 𝑘 ∈ ℕ0 )
6 5 a1i ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) → ( 𝑘 ∈ ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) → 𝑘 ∈ ℕ0 ) )
7 bitsss ( bits ‘ ( 𝐴 · 𝐵 ) ) ⊆ ℕ0
8 7 sseli ( 𝑘 ∈ ( bits ‘ ( 𝐴 · 𝐵 ) ) → 𝑘 ∈ ℕ0 )
9 8 a1i ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) → ( 𝑘 ∈ ( bits ‘ ( 𝐴 · 𝐵 ) ) → 𝑘 ∈ ℕ0 ) )
10 simpll ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → 𝐴 ∈ ℤ )
11 simplr ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → 𝐵 ∈ ℤ )
12 simpr ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → 𝑘 ∈ ℕ0 )
13 1nn0 1 ∈ ℕ0
14 13 a1i ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → 1 ∈ ℕ0 )
15 12 14 nn0addcld ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 𝑘 + 1 ) ∈ ℕ0 )
16 10 11 15 smumullem ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) )
17 16 ineq1d ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) = ( ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
18 2nn 2 ∈ ℕ
19 18 a1i ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → 2 ∈ ℕ )
20 19 15 nnexpcld ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 2 ↑ ( 𝑘 + 1 ) ) ∈ ℕ )
21 10 20 zmodcld ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) ∈ ℕ0 )
22 21 nn0zd ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) ∈ ℤ )
23 22 11 zmulcld ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ∈ ℤ )
24 bitsmod ( ( ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ∈ ℤ ∧ ( 𝑘 + 1 ) ∈ ℕ0 ) → ( bits ‘ ( ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) ) = ( ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
25 23 15 24 syl2anc ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( bits ‘ ( ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) ) = ( ( bits ‘ ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
26 17 25 eqtr4d ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) = ( bits ‘ ( ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) ) )
27 inass ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) = ( ( bits ‘ 𝐴 ) ∩ ( ( 0 ..^ ( 𝑘 + 1 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
28 inidm ( ( 0 ..^ ( 𝑘 + 1 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) = ( 0 ..^ ( 𝑘 + 1 ) )
29 28 ineq2i ( ( bits ‘ 𝐴 ) ∩ ( ( 0 ..^ ( 𝑘 + 1 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ) = ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) )
30 27 29 eqtri ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) = ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) )
31 30 oveq1i ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( ( bits ‘ 𝐵 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ) = ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( ( bits ‘ 𝐵 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
32 31 ineq1i ( ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( ( bits ‘ 𝐵 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) = ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( ( bits ‘ 𝐵 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) )
33 inss1 ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ⊆ ( bits ‘ 𝐴 )
34 1 a1i ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( bits ‘ 𝐴 ) ⊆ ℕ0 )
35 33 34 sstrid ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ⊆ ℕ0 )
36 2 a1i ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( bits ‘ 𝐵 ) ⊆ ℕ0 )
37 35 36 15 smueq ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) = ( ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( ( bits ‘ 𝐵 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
38 34 36 15 smueq ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) = ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( ( bits ‘ 𝐵 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
39 32 37 38 3eqtr4a ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( ( ( bits ‘ 𝐴 ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) smul ( bits ‘ 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) = ( ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
40 20 nnrpd ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 2 ↑ ( 𝑘 + 1 ) ) ∈ ℝ+ )
41 10 zred ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → 𝐴 ∈ ℝ )
42 modabs2 ( ( 𝐴 ∈ ℝ ∧ ( 2 ↑ ( 𝑘 + 1 ) ) ∈ ℝ+ ) → ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) = ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) )
43 41 40 42 syl2anc ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) = ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) )
44 eqidd ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 𝐵 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) = ( 𝐵 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) )
45 22 10 11 11 40 43 44 modmul12d ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) = ( ( 𝐴 · 𝐵 ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) )
46 45 fveq2d ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( bits ‘ ( ( ( 𝐴 mod ( 2 ↑ ( 𝑘 + 1 ) ) ) · 𝐵 ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) ) = ( bits ‘ ( ( 𝐴 · 𝐵 ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) ) )
47 26 39 46 3eqtr3d ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) = ( bits ‘ ( ( 𝐴 · 𝐵 ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) ) )
48 10 11 zmulcld ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 𝐴 · 𝐵 ) ∈ ℤ )
49 bitsmod ( ( ( 𝐴 · 𝐵 ) ∈ ℤ ∧ ( 𝑘 + 1 ) ∈ ℕ0 ) → ( bits ‘ ( ( 𝐴 · 𝐵 ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) ) = ( ( bits ‘ ( 𝐴 · 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
50 48 15 49 syl2anc ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( bits ‘ ( ( 𝐴 · 𝐵 ) mod ( 2 ↑ ( 𝑘 + 1 ) ) ) ) = ( ( bits ‘ ( 𝐴 · 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
51 47 50 eqtrd ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) = ( ( bits ‘ ( 𝐴 · 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
52 51 eleq2d ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 𝑘 ∈ ( ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ↔ 𝑘 ∈ ( ( bits ‘ ( 𝐴 · 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ) )
53 elin ( 𝑘 ∈ ( ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ↔ ( 𝑘 ∈ ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ∧ 𝑘 ∈ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
54 elin ( 𝑘 ∈ ( ( bits ‘ ( 𝐴 · 𝐵 ) ) ∩ ( 0 ..^ ( 𝑘 + 1 ) ) ) ↔ ( 𝑘 ∈ ( bits ‘ ( 𝐴 · 𝐵 ) ) ∧ 𝑘 ∈ ( 0 ..^ ( 𝑘 + 1 ) ) ) )
55 52 53 54 3bitr3g ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( ( 𝑘 ∈ ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ∧ 𝑘 ∈ ( 0 ..^ ( 𝑘 + 1 ) ) ) ↔ ( 𝑘 ∈ ( bits ‘ ( 𝐴 · 𝐵 ) ) ∧ 𝑘 ∈ ( 0 ..^ ( 𝑘 + 1 ) ) ) ) )
56 nn0uz 0 = ( ℤ ‘ 0 )
57 12 56 eleqtrdi ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → 𝑘 ∈ ( ℤ ‘ 0 ) )
58 eluzfz2b ( 𝑘 ∈ ( ℤ ‘ 0 ) ↔ 𝑘 ∈ ( 0 ... 𝑘 ) )
59 57 58 sylib ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → 𝑘 ∈ ( 0 ... 𝑘 ) )
60 12 nn0zd ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → 𝑘 ∈ ℤ )
61 fzval3 ( 𝑘 ∈ ℤ → ( 0 ... 𝑘 ) = ( 0 ..^ ( 𝑘 + 1 ) ) )
62 60 61 syl ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 0 ... 𝑘 ) = ( 0 ..^ ( 𝑘 + 1 ) ) )
63 59 62 eleqtrd ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → 𝑘 ∈ ( 0 ..^ ( 𝑘 + 1 ) ) )
64 63 biantrud ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 𝑘 ∈ ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ↔ ( 𝑘 ∈ ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ∧ 𝑘 ∈ ( 0 ..^ ( 𝑘 + 1 ) ) ) ) )
65 63 biantrud ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 𝑘 ∈ ( bits ‘ ( 𝐴 · 𝐵 ) ) ↔ ( 𝑘 ∈ ( bits ‘ ( 𝐴 · 𝐵 ) ) ∧ 𝑘 ∈ ( 0 ..^ ( 𝑘 + 1 ) ) ) ) )
66 55 64 65 3bitr4d ( ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) ∧ 𝑘 ∈ ℕ0 ) → ( 𝑘 ∈ ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ↔ 𝑘 ∈ ( bits ‘ ( 𝐴 · 𝐵 ) ) ) )
67 66 ex ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) → ( 𝑘 ∈ ℕ0 → ( 𝑘 ∈ ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ↔ 𝑘 ∈ ( bits ‘ ( 𝐴 · 𝐵 ) ) ) ) )
68 6 9 67 pm5.21ndd ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) → ( 𝑘 ∈ ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) ↔ 𝑘 ∈ ( bits ‘ ( 𝐴 · 𝐵 ) ) ) )
69 68 eqrdv ( ( 𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ ) → ( ( bits ‘ 𝐴 ) smul ( bits ‘ 𝐵 ) ) = ( bits ‘ ( 𝐴 · 𝐵 ) ) )