MPE Home Metamath Proof Explorer < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >  sadadd Structured version   Visualization version   GIF version

Theorem sadadd 16521
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 1621 and df-cad 1634.

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.)

Assertion
Ref Expression
sadadd ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → ((bits‘𝐴) sadd (bits‘𝐵)) = (bits‘(𝐴 + 𝐵)))

Proof of Theorem sadadd
Dummy variables 𝑘 𝑐 𝑚 𝑛 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 bitsss 16480 . . . . . 6 (bits‘𝐴) ⊆ ℕ0
2 bitsss 16480 . . . . . 6 (bits‘𝐵) ⊆ ℕ0
3 sadcl 16516 . . . . . 6 (((bits‘𝐴) ⊆ ℕ0 ∧ (bits‘𝐵) ⊆ ℕ0) → ((bits‘𝐴) sadd (bits‘𝐵)) ⊆ ℕ0)
41, 2, 3mp2an 704 . . . . 5 ((bits‘𝐴) sadd (bits‘𝐵)) ⊆ ℕ0
54sseli 3941 . . . 4 (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) → 𝑘 ∈ ℕ0)
65a1i 11 . . 3 ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) → 𝑘 ∈ ℕ0))
7 bitsss 16480 . . . . 5 (bits‘(𝐴 + 𝐵)) ⊆ ℕ0
87sseli 3941 . . . 4 (𝑘 ∈ (bits‘(𝐴 + 𝐵)) → 𝑘 ∈ ℕ0)
98a1i 11 . . 3 ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → (𝑘 ∈ (bits‘(𝐴 + 𝐵)) → 𝑘 ∈ ℕ0))
10 eqid 2769 . . . . . . . . 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 2769 . . . . . . . . 9 (bits ↾ ℕ0) = (bits ↾ ℕ0)
12 simpll 778 . . . . . . . . 9 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝐴 ∈ ℤ)
13 simplr 780 . . . . . . . . 9 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝐵 ∈ ℤ)
14 simpr 489 . . . . . . . . . 10 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝑘 ∈ ℕ0)
15 1nn0 12516 . . . . . . . . . . 11 1 ∈ ℕ0
1615a1i 11 . . . . . . . . . 10 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 1 ∈ ℕ0)
1714, 16nn0addcld 12565 . . . . . . . . 9 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝑘 + 1) ∈ ℕ0)
1810, 11, 12, 13, 17sadaddlem 16520 . . . . . . . 8 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (((bits‘𝐴) sadd (bits‘𝐵)) ∩ (0..^(𝑘 + 1))) = (bits‘((𝐴 + 𝐵) mod (2↑(𝑘 + 1)))))
1912, 13zaddcld 12700 . . . . . . . . 9 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝐴 + 𝐵) ∈ ℤ)
20 bitsmod 16490 . . . . . . . . 9 (((𝐴 + 𝐵) ∈ ℤ ∧ (𝑘 + 1) ∈ ℕ0) → (bits‘((𝐴 + 𝐵) mod (2↑(𝑘 + 1)))) = ((bits‘(𝐴 + 𝐵)) ∩ (0..^(𝑘 + 1))))
2119, 17, 20syl2anc 595 . . . . . . . 8 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (bits‘((𝐴 + 𝐵) mod (2↑(𝑘 + 1)))) = ((bits‘(𝐴 + 𝐵)) ∩ (0..^(𝑘 + 1))))
2218, 21eqtrd 2804 . . . . . . 7 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (((bits‘𝐴) sadd (bits‘𝐵)) ∩ (0..^(𝑘 + 1))) = ((bits‘(𝐴 + 𝐵)) ∩ (0..^(𝑘 + 1))))
2322eleq2d 2855 . . . . . 6 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝑘 ∈ (((bits‘𝐴) sadd (bits‘𝐵)) ∩ (0..^(𝑘 + 1))) ↔ 𝑘 ∈ ((bits‘(𝐴 + 𝐵)) ∩ (0..^(𝑘 + 1)))))
24 elin 3929 . . . . . 6 (𝑘 ∈ (((bits‘𝐴) sadd (bits‘𝐵)) ∩ (0..^(𝑘 + 1))) ↔ (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1))))
25 elin 3929 . . . . . 6 (𝑘 ∈ ((bits‘(𝐴 + 𝐵)) ∩ (0..^(𝑘 + 1))) ↔ (𝑘 ∈ (bits‘(𝐴 + 𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1))))
2623, 24, 253bitr3g 316 . . . . 5 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → ((𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1))) ↔ (𝑘 ∈ (bits‘(𝐴 + 𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1)))))
27 nn0uz 12896 . . . . . . . . 9 0 = (ℤ‘0)
2814, 27eleqtrdi 2879 . . . . . . . 8 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝑘 ∈ (ℤ‘0))
29 eluzfz2 13556 . . . . . . . 8 (𝑘 ∈ (ℤ‘0) → 𝑘 ∈ (0...𝑘))
3028, 29syl 18 . . . . . . 7 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝑘 ∈ (0...𝑘))
3114nn0zd 12612 . . . . . . . 8 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝑘 ∈ ℤ)
32 fzval3 13759 . . . . . . . 8 (𝑘 ∈ ℤ → (0...𝑘) = (0..^(𝑘 + 1)))
3331, 32syl 18 . . . . . . 7 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (0...𝑘) = (0..^(𝑘 + 1)))
3430, 33eleqtrd 2871 . . . . . 6 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → 𝑘 ∈ (0..^(𝑘 + 1)))
3534biantrud 540 . . . . 5 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ↔ (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1)))))
3634biantrud 540 . . . . 5 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝑘 ∈ (bits‘(𝐴 + 𝐵)) ↔ (𝑘 ∈ (bits‘(𝐴 + 𝐵)) ∧ 𝑘 ∈ (0..^(𝑘 + 1)))))
3726, 35, 363bitr4d 314 . . . 4 (((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) ∧ 𝑘 ∈ ℕ0) → (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ↔ 𝑘 ∈ (bits‘(𝐴 + 𝐵))))
3837ex 417 . . 3 ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → (𝑘 ∈ ℕ0 → (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ↔ 𝑘 ∈ (bits‘(𝐴 + 𝐵)))))
396, 9, 38pm5.21ndd 382 . 2 ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → (𝑘 ∈ ((bits‘𝐴) sadd (bits‘𝐵)) ↔ 𝑘 ∈ (bits‘(𝐴 + 𝐵))))
4039eqrdv 2767 1 ((𝐴 ∈ ℤ ∧ 𝐵 ∈ ℤ) → ((bits‘𝐴) sadd (bits‘𝐵)) = (bits‘(𝐴 + 𝐵)))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 209  wa 400   = wceq 1567  caddwcad 1633  wcel 2149  cin 3912  wss 3913  c0 4294  ifcif 4489  cmpt 5193  ccnv 5658  cres 5661  cfv 6533  (class class class)co 7408  cmpo 7410  1oc1o 8442  2oc2o 8443  0cc0 11096  1c1 11097   + caddc 11099  cmin 11437  2c2 12291  0cn0 12500  cz 12587  cuz 12858  ...cfz 13531  ..^cfzo 13678   mod cmo 13898  seqcseq 14033  cexp 14093  bitscbits 16473   sadd csad 16474
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1822  ax-4 1836  ax-5 1937  ax-6 1994  ax-7 2035  ax-8 2151  ax-9 2159  ax-10 2182  ax-11 2198  ax-12 2219  ax-ext 2741  ax-rep 5239  ax-sep 5258  ax-nul 5268  ax-pow 5334  ax-pr 5402  ax-un 7730  ax-inf2 9606  ax-cnex 11152  ax-resscn 11153  ax-1cn 11154  ax-icn 11155  ax-addcl 11156  ax-addrcl 11157  ax-mulcl 11158  ax-mulrcl 11159  ax-mulcom 11160  ax-addass 11161  ax-mulass 11162  ax-distr 11163  ax-i2m1 11164  ax-1ne0 11165  ax-1rid 11166  ax-rnegex 11167  ax-rrecex 11168  ax-cnre 11169  ax-pre-lttri 11170  ax-pre-lttrn 11171  ax-pre-ltadd 11172  ax-pre-mulgt0 11173  ax-pre-sup 11174
This theorem depends on definitions:  df-bi 210  df-an 401  df-or 861  df-3or 1102  df-3an 1103  df-xor 1539  df-tru 1570  df-fal 1580  df-had 1621  df-cad 1634  df-ex 1807  df-nf 1811  df-sb 2098  df-mo 2573  df-eu 2603  df-clab 2748  df-cleq 2761  df-clel 2844  df-nfc 2918  df-ne 2965  df-nel 3071  df-ral 3086  df-rex 3096  df-rmo 3376  df-reu 3377  df-rab 3424  df-v 3465  df-sbc 3754  df-csb 3862  df-dif 3916  df-un 3918  df-in 3920  df-ss 3930  df-pss 3933  df-nul 4295  df-if 4490  df-pw 4566  df-sn 4592  df-pr 4594  df-op 4598  df-uni 4874  df-int 4914  df-iun 4959  df-disj 5078  df-br 5111  df-opab 5175  df-mpt 5194  df-tr 5220  df-id 5554  df-eprel 5559  df-po 5567  df-so 5568  df-fr 5612  df-se 5613  df-we 5614  df-xp 5665  df-rel 5666  df-cnv 5667  df-co 5668  df-dm 5669  df-rn 5670  df-res 5671  df-ima 5672  df-pred 6299  df-ord 6360  df-on 6361  df-lim 6362  df-suc 6363  df-iota 6489  df-fun 6535  df-fn 6536  df-f 6537  df-f1 6538  df-fo 6539  df-f1o 6540  df-fv 6541  df-isom 6542  df-riota 7365  df-ov 7411  df-oprab 7412  df-mpo 7413  df-om 7859  df-1st 7982  df-2nd 7983  df-frecs 8274  df-wrecs 8305  df-recs 8354  df-rdg 8393  df-1o 8449  df-2o 8450  df-oadd 8453  df-er 8690  df-map 8822  df-pm 8823  df-en 8940  df-dom 8941  df-sdom 8942  df-fin 8943  df-sup 9398  df-inf 9399  df-oi 9468  df-dju 9883  df-card 9921  df-pnf 11241  df-mnf 11242  df-xr 11243  df-ltxr 11244  df-le 11245  df-sub 11439  df-neg 11440  df-div 11868  df-nn 12230  df-2 12299  df-3 12300  df-n0 12501  df-xnn0 12574  df-z 12588  df-uz 12859  df-rp 13013  df-fz 13532  df-fzo 13679  df-fl 13821  df-mod 13899  df-seq 14034  df-exp 14094  df-hash 14363  df-cj 15146  df-re 15147  df-im 15148  df-sqrt 15282  df-abs 15283  df-clim 15535  df-sum 15734  df-dvds 16307  df-bits 16476  df-sad 16505
This theorem is referenced by:  bitsres  16527  smumullem  16546
  Copyright terms: Public domain W3C validator