[Imprint][Data Privacy Statement][E-Mail]

Back to main index. View the specification. View theorem base summary, View theorem base listing, the used properties by spec, the dependency list, the symbol table,

Specification int-pair
enrich
   nat-pair
with
   functions 
       . × . : int × int → int;
      comment: encode arbitrary pairs of integers (bijective).;
       encode : int → nat;
      comment: encode positive and negative integers (bijective).;
       decode : nat → int;
       encode : nat → int;
      comment: encode nats as all integers (bijective).;
       decode : int → nat;
       . .1 : int → int;
      comment: (i × j).1 = i;
       . .2 : int → int;
      comment: (i × j).2 = j;
   
   variables 
       i : int;
       j : int;
       m : nat;
       n : nat;
   
   
   axioms 
      enc-int-pos: 0 ≤ i → encode(i) = 2 * i→n(i);
      used for: ls;
      
      enc-int-neg: i < 0 → encode(i) = 2 * i→n(i) - 1;
      used for: ls;
      
      enc-nat-pos: n % 2 = 0 → encode(n) = n→i(n / 2);
      used for: ls;
      
      enc-nat-neg: n % 2 ≠ 0 → encode(n) = ~ n→i((n + 1) / 2);
      used for: ls;
      
      encode-pair: i × j = encode(encode(encode(i), encode(j)));
      used for: ls;
      
      dec-int-pos: n % 2 = 0 → decode(n) = n→i(n / 2);
      used for: ls;
      
      dec-int-neg: n % 2 ≠ 0 → decode(n) = ~ n→i((n + 1) / 2);
      used for: ls;
      
      dec-nat-pos: 0 ≤ i → decode(i) = 2 * i→n(i);
      used for: ls;
      
      dec-nat-neg: i < 0 → decode(i) = 2 * i→n(i) - 1;
      used for: ls;
      
      dec-fst: i.1 = decode(decode(i).1);
      used for: ls;
      
      dec-snd: i.2 = decode(decode(i).2);
      used for: ls;
   
   
end enrich