![]() |
Metamath Proof Explorer |
< Previous
Next >
Nearby theorems |
|
Mirrors > Home > MPE Home > Th. List > sadadd | Structured version Visualization version GIF version |
Description: For sequences that
correspond to valid integers, the adder sequence
function produces the sequence for the sum. This is effectively a proof
of the correctness of the ripple carry adder, implemented with logic
gates corresponding to df-had 1596 and df-cad 1609.
It is interesting to consider in what sense the sadd function can be said to be "adding" things outside the range of the bits function, that is, when adding sequences that are not eventually constant and so do not denote any integer. The correct interpretation is that the sequences are representations of 2-adic integers, which have a natural ring structure. (Contributed by Mario Carneiro, 9-Sep-2016.) |
Ref | Expression |
---|---|
sadadd | ⊢ ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → ((bits‘𝐴) sadd (bits‘𝐵)) = (bits‘(𝐴 + 𝐵))) |
Step | Hyp | Ref | Expression |
---|---|---|---|
1 | bitsss 16363 | . . . . . 6 ⊢ (bits‘𝐴) ⊆ ℕ0 | |
2 | bitsss 16363 | . . . . . 6 ⊢ (bits‘𝐵) ⊆ ℕ0 | |
3 | sadcl 16399 | . . . . . 6 ⊢ (((bits‘𝐴) ⊆ ℕ0 ∧ (bits‘𝐵) ⊆ ℕ0) → ((bits‘𝐴) sadd (bits‘𝐵)) ⊆ ℕ0) | |
4 | 1, 2, 3 | mp2an 691 | . . . . 5 ⊢ ((bits‘𝐴) sadd (bits‘𝐵)) ⊆ ℕ0 |
5 | 4 | sseli 3977 | . . . 4 ⊢ (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) → 𝑘 ∈ ℕ0) |
6 | 5 | a1i 11 | . . 3 ⊢ ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) → 𝑘 ∈ ℕ0)) |
7 | bitsss 16363 | . . . . 5 ⊢ (bits‘(𝐴 + 𝐵)) ⊆ ℕ0 | |
8 | 7 | sseli 3977 | . . . 4 ⊢ (𝑘 ∈ (bits‘(𝐴 + 𝐵)) → 𝑘 ∈ ℕ0) |
9 | 8 | a1i 11 | . . 3 ⊢ ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → (𝑘 ∈ (bits‘(𝐴 + 𝐵)) → 𝑘 ∈ ℕ0)) |
10 | eqid 2733 | . . . . . . . . 9 ⊢ seq0((𝑐 ∈ 2o, 𝑚 ∈ ℕ0 ↦ if(cadd(𝑚 ∈ (bits‘𝐴), 𝑚 ∈ (bits‘𝐵), ∅ ∈ 𝑐), 1o, ∅)), (𝑛 ∈ ℕ0 ↦ if(𝑛 = 0, ∅, (𝑛 − 1)))) = seq0((𝑐 ∈ 2o, 𝑚 ∈ ℕ0 ↦ if(cadd(𝑚 ∈ (bits‘𝐴), 𝑚 ∈ (bits‘𝐵), ∅ ∈ 𝑐), 1o, ∅)), (𝑛 ∈ ℕ0 ↦ if(𝑛 = 0, ∅, (𝑛 − 1)))) | |
11 | eqid 2733 | . . . . . . . . 9 ⊢ ◡(bits ↾ ℕ0) = ◡(bits ↾ ℕ0) | |
12 | simpll 766 | . . . . . . . . 9 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝐴 ∈ ℤ) | |
13 | simplr 768 | . . . . . . . . 9 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝐵 ∈ ℤ) | |
14 | simpr 486 | . . . . . . . . . 10 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝑘 ∈ ℕ0) | |
15 | 1nn0 12484 | . . . . . . . . . . 11 ⊢ 1 ∈ ℕ0 | |
16 | 15 | a1i 11 | . . . . . . . . . 10 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 1 ∈ ℕ0) |
17 | 14, 16 | nn0addcld 12532 | . . . . . . . . 9 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝑘 + 1) ∈ ℕ0) |
18 | 10, 11, 12, 13, 17 | sadaddlem 16403 | . . . . . . . 8 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (((bits‘𝐴) sadd (bits‘𝐵)) ∩ (0..^(𝑘 + 1))) = (bits‘((𝐴 + 𝐵) mod (2↑(𝑘 + 1))))) |
19 | 12, 13 | zaddcld 12666 | . . . . . . . . 9 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝐴 + 𝐵) ∈ ℤ) |
20 | bitsmod 16373 | . . . . . . . . 9 ⊢ (((𝐴 + 𝐵) ∈ ℤ ∧ (𝑘 + 1) ∈ ℕ0) → (bits‘((𝐴 + 𝐵) mod (2↑(𝑘 + 1)))) = ((bits‘(𝐴 + 𝐵)) ∩ (0..^(𝑘 + 1)))) | |
21 | 19, 17, 20 | syl2anc 585 | . . . . . . . 8 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (bits‘((𝐴 + 𝐵) mod (2↑(𝑘 + 1)))) = ((bits‘(𝐴 + 𝐵)) ∩ (0..^(𝑘 + 1)))) |
22 | 18, 21 | eqtrd 2773 | . . . . . . 7 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (((bits‘𝐴) sadd (bits‘𝐵)) ∩ (0..^(𝑘 + 1))) = ((bits‘(𝐴 + 𝐵)) ∩ (0..^(𝑘 + 1)))) |
23 | 22 | eleq2d 2820 | . . . . . 6 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝑘 ∈ (((bits‘𝐴) sadd (bits‘𝐵)) ∩ (0..^(𝑘 + 1))) ↔ 𝑘 ∈ ((bits‘(𝐴 + 𝐵)) ∩ (0..^(𝑘 + 1))))) |
24 | elin 3963 | . . . . . 6 ⊢ (𝑘 ∈ (((bits‘𝐴) sadd (bits‘𝐵)) ∩ (0..^(𝑘 + 1))) ↔ (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1)))) | |
25 | elin 3963 | . . . . . 6 ⊢ (𝑘 ∈ ((bits‘(𝐴 + 𝐵)) ∩ (0..^(𝑘 + 1))) ↔ (𝑘 ∈ (bits‘(𝐴 + 𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1)))) | |
26 | 23, 24, 25 | 3bitr3g 313 | . . . . 5 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → ((𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1))) ↔ (𝑘 ∈ (bits‘(𝐴 + 𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1))))) |
27 | nn0uz 12860 | . . . . . . . . 9 ⊢ ℕ0 = (ℤ≥‘0) | |
28 | 14, 27 | eleqtrdi 2844 | . . . . . . . 8 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝑘 ∈ (ℤ≥‘0)) |
29 | eluzfz2 13505 | . . . . . . . 8 ⊢ (𝑘 ∈ (ℤ≥‘0) → 𝑘 ∈ (0...𝑘)) | |
30 | 28, 29 | syl 17 | . . . . . . 7 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝑘 ∈ (0...𝑘)) |
31 | 14 | nn0zd 12580 | . . . . . . . 8 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝑘 ∈ ℤ) |
32 | fzval3 13697 | . . . . . . . 8 ⊢ (𝑘 ∈ ℤ → (0...𝑘) = (0..^(𝑘 + 1))) | |
33 | 31, 32 | syl 17 | . . . . . . 7 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (0...𝑘) = (0..^(𝑘 + 1))) |
34 | 30, 33 | eleqtrd 2836 | . . . . . 6 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝑘 ∈ (0..^(𝑘 + 1))) |
35 | 34 | biantrud 533 | . . . . 5 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ↔ (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1))))) |
36 | 34 | biantrud 533 | . . . . 5 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝑘 ∈ (bits‘(𝐴 + 𝐵)) ↔ (𝑘 ∈ (bits‘(𝐴 + 𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1))))) |
37 | 26, 35, 36 | 3bitr4d 311 | . . . 4 ⊢ (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ↔ 𝑘 ∈ (bits‘(𝐴 + 𝐵)))) |
38 | 37 | ex 414 | . . 3 ⊢ ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → (𝑘 ∈ ℕ0 → (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ↔ 𝑘 ∈ (bits‘(𝐴 + 𝐵))))) |
39 | 6, 9, 38 | pm5.21ndd 381 | . 2 ⊢ ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ↔ 𝑘 ∈ (bits‘(𝐴 + 𝐵)))) |
40 | 39 | eqrdv 2731 | 1 ⊢ ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → ((bits‘𝐴) sadd (bits‘𝐵)) = (bits‘(𝐴 + 𝐵))) |
Colors of variables: wff setvar class |
Syntax hints: → wi 4 ↔ wb 205 ∧ wa 397 = wceq 1542 caddwcad 1608 ∈ wcel 2107 ∩ cin 3946 ⊆ wss 3947 ∅c0 4321 ifcif 4527 ↦ cmpt 5230 ◡ccnv 5674 ↾ cres 5677 ‘cfv 6540 (class class class)co 7404 ∈ cmpo 7406 1oc1o 8454 2oc2o 8455 0cc0 11106 1c1 11107 + caddc 11109 − cmin 11440 2c2 12263 ℕ0cn0 12468 ℤcz 12554 ℤ≥cuz 12818 ...cfz 13480 ..^cfzo 13623 mod cmo 13830 seqcseq 13962 ↑cexp 14023 bitscbits 16356 sadd csad 16357 |
This theorem was proved from axioms: ax-mp 5 ax-1 6 ax-2 7 ax-3 8 ax-gen 1798 ax-4 1812 ax-5 1914 ax-6 1972 ax-7 2012 ax-8 2109 ax-9 2117 ax-10 2138 ax-11 2155 ax-12 2172 ax-ext 2704 ax-rep 5284 ax-sep 5298 ax-nul 5305 ax-pow 5362 ax-pr 5426 ax-un 7720 ax-inf2 9632 ax-cnex 11162 ax-resscn 11163 ax-1cn 11164 ax-icn 11165 ax-addcl 11166 ax-addrcl 11167 ax-mulcl 11168 ax-mulrcl 11169 ax-mulcom 11170 ax-addass 11171 ax-mulass 11172 ax-distr 11173 ax-i2m1 11174 ax-1ne0 11175 ax-1rid 11176 ax-rnegex 11177 ax-rrecex 11178 ax-cnre 11179 ax-pre-lttri 11180 ax-pre-lttrn 11181 ax-pre-ltadd 11182 ax-pre-mulgt0 11183 ax-pre-sup 11184 |
This theorem depends on definitions: df-bi 206 df-an 398 df-or 847 df-3or 1089 df-3an 1090 df-xor 1511 df-tru 1545 df-fal 1555 df-had 1596 df-cad 1609 df-ex 1783 df-nf 1787 df-sb 2069 df-mo 2535 df-eu 2564 df-clab 2711 df-cleq 2725 df-clel 2811 df-nfc 2886 df-ne 2942 df-nel 3048 df-ral 3063 df-rex 3072 df-rmo 3377 df-reu 3378 df-rab 3434 df-v 3477 df-sbc 3777 df-csb 3893 df-dif 3950 df-un 3952 df-in 3954 df-ss 3964 df-pss 3966 df-nul 4322 df-if 4528 df-pw 4603 df-sn 4628 df-pr 4630 df-op 4634 df-uni 4908 df-int 4950 df-iun 4998 df-disj 5113 df-br 5148 df-opab 5210 df-mpt 5231 df-tr 5265 df-id 5573 df-eprel 5579 df-po 5587 df-so 5588 df-fr 5630 df-se 5631 df-we 5632 df-xp 5681 df-rel 5682 df-cnv 5683 df-co 5684 df-dm 5685 df-rn 5686 df-res 5687 df-ima 5688 df-pred 6297 df-ord 6364 df-on 6365 df-lim 6366 df-suc 6367 df-iota 6492 df-fun 6542 df-fn 6543 df-f 6544 df-f1 6545 df-fo 6546 df-f1o 6547 df-fv 6548 df-isom 6549 df-riota 7360 df-ov 7407 df-oprab 7408 df-mpo 7409 df-om 7851 df-1st 7970 df-2nd 7971 df-frecs 8261 df-wrecs 8292 df-recs 8366 df-rdg 8405 df-1o 8461 df-2o 8462 df-oadd 8465 df-er 8699 df-map 8818 df-pm 8819 df-en 8936 df-dom 8937 df-sdom 8938 df-fin 8939 df-sup 9433 df-inf 9434 df-oi 9501 df-dju 9892 df-card 9930 df-pnf 11246 df-mnf 11247 df-xr 11248 df-ltxr 11249 df-le 11250 df-sub 11442 df-neg 11443 df-div 11868 df-nn 12209 df-2 12271 df-3 12272 df-n0 12469 df-xnn0 12541 df-z 12555 df-uz 12819 df-rp 12971 df-fz 13481 df-fzo 13624 df-fl 13753 df-mod 13831 df-seq 13963 df-exp 14024 df-hash 14287 df-cj 15042 df-re 15043 df-im 15044 df-sqrt 15178 df-abs 15179 df-clim 15428 df-sum 15629 df-dvds 16194 df-bits 16359 df-sad 16388 |
This theorem is referenced by: bitsres 16410 smumullem 16429 |
Copyright terms: Public domain | W3C validator |