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

Theorem sadadd 14201
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 1450 and df-cad 1451.

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  |-  ( ( A  e.  ZZ  /\  B  e.  ZZ )  ->  ( (bits `  A
) sadd  (bits `  B )
)  =  (bits `  ( A  +  B
) ) )

Proof of Theorem sadadd
Dummy variables  k 
c  m  n are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 bitsss 14160 . . . . . 6  |-  (bits `  A )  C_  NN0
2 bitsss 14160 . . . . . 6  |-  (bits `  B )  C_  NN0
3 sadcl 14196 . . . . . 6  |-  ( ( (bits `  A )  C_ 
NN0  /\  (bits `  B
)  C_  NN0 )  -> 
( (bits `  A
) sadd  (bits `  B )
)  C_  NN0 )
41, 2, 3mp2an 670 . . . . 5  |-  ( (bits `  A ) sadd  (bits `  B ) )  C_  NN0
54sseli 3485 . . . 4  |-  ( k  e.  ( (bits `  A ) sadd  (bits `  B
) )  ->  k  e.  NN0 )
65a1i 11 . . 3  |-  ( ( A  e.  ZZ  /\  B  e.  ZZ )  ->  ( k  e.  ( (bits `  A ) sadd  (bits `  B ) )  ->  k  e.  NN0 ) )
7 bitsss 14160 . . . . 5  |-  (bits `  ( A  +  B
) )  C_  NN0
87sseli 3485 . . . 4  |-  ( k  e.  (bits `  ( A  +  B )
)  ->  k  e.  NN0 )
98a1i 11 . . 3  |-  ( ( A  e.  ZZ  /\  B  e.  ZZ )  ->  ( k  e.  (bits `  ( A  +  B
) )  ->  k  e.  NN0 ) )
10 eqid 2454 . . . . . . . . 9  |-  seq 0
( ( c  e.  2o ,  m  e. 
NN0  |->  if (cadd ( m  e.  (bits `  A ) ,  m  e.  (bits `  B ) ,  (/)  e.  c ) ,  1o ,  (/) ) ) ,  ( n  e.  NN0  |->  if ( n  =  0 ,  (/) ,  ( n  - 
1 ) ) ) )  =  seq 0
( ( c  e.  2o ,  m  e. 
NN0  |->  if (cadd ( m  e.  (bits `  A ) ,  m  e.  (bits `  B ) ,  (/)  e.  c ) ,  1o ,  (/) ) ) ,  ( n  e.  NN0  |->  if ( n  =  0 ,  (/) ,  ( n  - 
1 ) ) ) )
11 eqid 2454 . . . . . . . . 9  |-  `' (bits  |`  NN0 )  =  `' (bits  |`  NN0 )
12 simpll 751 . . . . . . . . 9  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  A  e.  ZZ )
13 simplr 753 . . . . . . . . 9  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  B  e.  ZZ )
14 simpr 459 . . . . . . . . . 10  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  k  e.  NN0 )
15 1nn0 10807 . . . . . . . . . . 11  |-  1  e.  NN0
1615a1i 11 . . . . . . . . . 10  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  1  e.  NN0 )
1714, 16nn0addcld 10852 . . . . . . . . 9  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  ( k  +  1 )  e.  NN0 )
1810, 11, 12, 13, 17sadaddlem 14200 . . . . . . . 8  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  ( ( (bits `  A ) sadd  (bits `  B ) )  i^i  ( 0..^ ( k  +  1 ) ) )  =  (bits `  ( ( A  +  B )  mod  (
2 ^ ( k  +  1 ) ) ) ) )
1912, 13zaddcld 10969 . . . . . . . . 9  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  ( A  +  B )  e.  ZZ )
20 bitsmod 14170 . . . . . . . . 9  |-  ( ( ( A  +  B
)  e.  ZZ  /\  ( k  +  1 )  e.  NN0 )  ->  (bits `  ( ( A  +  B )  mod  ( 2 ^ (
k  +  1 ) ) ) )  =  ( (bits `  ( A  +  B )
)  i^i  ( 0..^ ( k  +  1 ) ) ) )
2119, 17, 20syl2anc 659 . . . . . . . 8  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  (bits `  (
( A  +  B
)  mod  ( 2 ^ ( k  +  1 ) ) ) )  =  ( (bits `  ( A  +  B
) )  i^i  (
0..^ ( k  +  1 ) ) ) )
2218, 21eqtrd 2495 . . . . . . 7  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  ( ( (bits `  A ) sadd  (bits `  B ) )  i^i  ( 0..^ ( k  +  1 ) ) )  =  ( (bits `  ( A  +  B
) )  i^i  (
0..^ ( k  +  1 ) ) ) )
2322eleq2d 2524 . . . . . 6  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  ( k  e.  ( ( (bits `  A ) sadd  (bits `  B
) )  i^i  (
0..^ ( k  +  1 ) ) )  <-> 
k  e.  ( (bits `  ( A  +  B
) )  i^i  (
0..^ ( k  +  1 ) ) ) ) )
24 elin 3673 . . . . . 6  |-  ( k  e.  ( ( (bits `  A ) sadd  (bits `  B ) )  i^i  ( 0..^ ( k  +  1 ) ) )  <->  ( k  e.  ( (bits `  A
) sadd  (bits `  B )
)  /\  k  e.  ( 0..^ ( k  +  1 ) ) ) )
25 elin 3673 . . . . . 6  |-  ( k  e.  ( (bits `  ( A  +  B
) )  i^i  (
0..^ ( k  +  1 ) ) )  <-> 
( k  e.  (bits `  ( A  +  B
) )  /\  k  e.  ( 0..^ ( k  +  1 ) ) ) )
2623, 24, 253bitr3g 287 . . . . 5  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  ( ( k  e.  ( (bits `  A ) sadd  (bits `  B
) )  /\  k  e.  ( 0..^ ( k  +  1 ) ) )  <->  ( k  e.  (bits `  ( A  +  B ) )  /\  k  e.  ( 0..^ ( k  +  1 ) ) ) ) )
27 nn0uz 11116 . . . . . . . . 9  |-  NN0  =  ( ZZ>= `  0 )
2814, 27syl6eleq 2552 . . . . . . . 8  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  k  e.  (
ZZ>= `  0 ) )
29 eluzfz2 11697 . . . . . . . 8  |-  ( k  e.  ( ZZ>= `  0
)  ->  k  e.  ( 0 ... k
) )
3028, 29syl 16 . . . . . . 7  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  k  e.  ( 0 ... k ) )
3114nn0zd 10963 . . . . . . . 8  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  k  e.  ZZ )
32 fzval3 11866 . . . . . . . 8  |-  ( k  e.  ZZ  ->  (
0 ... k )  =  ( 0..^ ( k  +  1 ) ) )
3331, 32syl 16 . . . . . . 7  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  ( 0 ... k )  =  ( 0..^ ( k  +  1 ) ) )
3430, 33eleqtrd 2544 . . . . . 6  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  k  e.  ( 0..^ ( k  +  1 ) ) )
3534biantrud 505 . . . . 5  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  ( k  e.  ( (bits `  A
) sadd  (bits `  B )
)  <->  ( k  e.  ( (bits `  A
) sadd  (bits `  B )
)  /\  k  e.  ( 0..^ ( k  +  1 ) ) ) ) )
3634biantrud 505 . . . . 5  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  ( k  e.  (bits `  ( A  +  B ) )  <->  ( k  e.  (bits `  ( A  +  B ) )  /\  k  e.  ( 0..^ ( k  +  1 ) ) ) ) )
3726, 35, 363bitr4d 285 . . . 4  |-  ( ( ( A  e.  ZZ  /\  B  e.  ZZ )  /\  k  e.  NN0 )  ->  ( k  e.  ( (bits `  A
) sadd  (bits `  B )
)  <->  k  e.  (bits `  ( A  +  B
) ) ) )
3837ex 432 . . 3  |-  ( ( A  e.  ZZ  /\  B  e.  ZZ )  ->  ( k  e.  NN0  ->  ( k  e.  ( (bits `  A ) sadd  (bits `  B ) )  <-> 
k  e.  (bits `  ( A  +  B
) ) ) ) )
396, 9, 38pm5.21ndd 352 . 2  |-  ( ( A  e.  ZZ  /\  B  e.  ZZ )  ->  ( k  e.  ( (bits `  A ) sadd  (bits `  B ) )  <-> 
k  e.  (bits `  ( A  +  B
) ) ) )
4039eqrdv 2451 1  |-  ( ( A  e.  ZZ  /\  B  e.  ZZ )  ->  ( (bits `  A
) sadd  (bits `  B )
)  =  (bits `  ( A  +  B
) ) )
Colors of variables: wff setvar class
Syntax hints:    -> wi 4    <-> wb 184    /\ wa 367    = wceq 1398  caddwcad 1449    e. wcel 1823    i^i cin 3460    C_ wss 3461   (/)c0 3783   ifcif 3929    |-> cmpt 4497   `'ccnv 4987    |` cres 4990   ` cfv 5570  (class class class)co 6270    |-> cmpt2 6272   1oc1o 7115   2oc2o 7116   0cc0 9481   1c1 9482    + caddc 9484    - cmin 9796   2c2 10581   NN0cn0 10791   ZZcz 10860   ZZ>=cuz 11082   ...cfz 11675  ..^cfzo 11799    mod cmo 11978    seqcseq 12089   ^cexp 12148  bitscbits 14153   sadd csad 14154
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1623  ax-4 1636  ax-5 1709  ax-6 1752  ax-7 1795  ax-8 1825  ax-9 1827  ax-10 1842  ax-11 1847  ax-12 1859  ax-13 2004  ax-ext 2432  ax-rep 4550  ax-sep 4560  ax-nul 4568  ax-pow 4615  ax-pr 4676  ax-un 6565  ax-inf2 8049  ax-cnex 9537  ax-resscn 9538  ax-1cn 9539  ax-icn 9540  ax-addcl 9541  ax-addrcl 9542  ax-mulcl 9543  ax-mulrcl 9544  ax-mulcom 9545  ax-addass 9546  ax-mulass 9547  ax-distr 9548  ax-i2m1 9549  ax-1ne0 9550  ax-1rid 9551  ax-rnegex 9552  ax-rrecex 9553  ax-cnre 9554  ax-pre-lttri 9555  ax-pre-lttrn 9556  ax-pre-ltadd 9557  ax-pre-mulgt0 9558  ax-pre-sup 9559
This theorem depends on definitions:  df-bi 185  df-or 368  df-an 369  df-3or 972  df-3an 973  df-xor 1363  df-tru 1401  df-fal 1404  df-had 1450  df-cad 1451  df-ex 1618  df-nf 1622  df-sb 1745  df-eu 2288  df-mo 2289  df-clab 2440  df-cleq 2446  df-clel 2449  df-nfc 2604  df-ne 2651  df-nel 2652  df-ral 2809  df-rex 2810  df-reu 2811  df-rmo 2812  df-rab 2813  df-v 3108  df-sbc 3325  df-csb 3421  df-dif 3464  df-un 3466  df-in 3468  df-ss 3475  df-pss 3477  df-nul 3784  df-if 3930  df-pw 4001  df-sn 4017  df-pr 4019  df-tp 4021  df-op 4023  df-uni 4236  df-int 4272  df-iun 4317  df-disj 4411  df-br 4440  df-opab 4498  df-mpt 4499  df-tr 4533  df-eprel 4780  df-id 4784  df-po 4789  df-so 4790  df-fr 4827  df-se 4828  df-we 4829  df-ord 4870  df-on 4871  df-lim 4872  df-suc 4873  df-xp 4994  df-rel 4995  df-cnv 4996  df-co 4997  df-dm 4998  df-rn 4999  df-res 5000  df-ima 5001  df-iota 5534  df-fun 5572  df-fn 5573  df-f 5574  df-f1 5575  df-fo 5576  df-f1o 5577  df-fv 5578  df-isom 5579  df-riota 6232  df-ov 6273  df-oprab 6274  df-mpt2 6275  df-om 6674  df-1st 6773  df-2nd 6774  df-recs 7034  df-rdg 7068  df-1o 7122  df-2o 7123  df-oadd 7126  df-er 7303  df-map 7414  df-pm 7415  df-en 7510  df-dom 7511  df-sdom 7512  df-fin 7513  df-sup 7893  df-oi 7927  df-card 8311  df-cda 8539  df-pnf 9619  df-mnf 9620  df-xr 9621  df-ltxr 9622  df-le 9623  df-sub 9798  df-neg 9799  df-div 10203  df-nn 10532  df-2 10590  df-3 10591  df-n0 10792  df-z 10861  df-uz 11083  df-rp 11222  df-fz 11676  df-fzo 11800  df-fl 11910  df-mod 11979  df-seq 12090  df-exp 12149  df-hash 12388  df-cj 13014  df-re 13015  df-im 13016  df-sqrt 13150  df-abs 13151  df-clim 13393  df-sum 13591  df-dvds 14071  df-bits 14156  df-sad 14185
This theorem is referenced by:  bitsres  14207  smumullem  14226
  Copyright terms: Public domain W3C validator