[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 rational
enrich
   int-gcd

with
   

   sorts rationals;
   constants  0r : rationals;
              1r : rationals;
   functions  rational : int × int → rationals;
              . .num : rationals → int;
             comment: the numerator (i in i/j) carries the sign.;
              . .denom : rationals → int;
             comment: denumerator (j in i/j), always > 0.;
              . + . : rationals × rationals → rationals;
              . - . : rationals × rationals → rationals prio 8 left;
              . * . : rationals × rationals → rationals prio 10 right;
              . / . : rationals × rationals → rationals prio 11 right;
              ~ . : rationals → rationals;
              abs : rationals → rationals;
   predicates  . < . : rationals × rationals;
               . ≤ . : rationals × rationals;
               . > . : rationals × rationals;
               . ≥ . : rationals × rationals;
   
   variables  ri : rationals;
              rj : rationals;
              ri0 : rationals;
              ri1 : rationals;
              rj0 : rationals;
              rj1 : rationals;
   
   

   induction rationals generated by rational;

   axioms Equality :  ⊦ ri = rj ↔ ri.num = rj.num ∧ ri.denom = rj.denom;
          numerator-zero :  ⊦ rational(0, j).num = 0;
          used for: ls;
          numerator-pos :  ⊦ i ≠ 0 ∧ 0 < j → rational(i, j).num = i / gcd(i, j);
          used for: ls;
          comment: gcd is always positive.;
          numerator-neg1 :  ⊦ 0 < i ∧ j < 0 → rational(i, j).num = ~(i / gcd(i, j));
          used for: ls;
          numerator-neg2 :  ⊦ i < 0 ∧ j < 0 → rational(i, j).num = abs(i) / gcd(i, j);
          used for: ls;
          numerator-zero-den :  ⊦ i ≠ 0 → rational(i, 0).num = i;
          used for: ls;
          denominator-zero :  ⊦ rational(0, j).denom = 1;
          used for: ls;
          denominator-pos :  ⊦ i ≠ 0 ∧ j ≠ 0 → rational(i, j).denom = abs(j) / gcd(i, j);
          used for: ls;
          denominator-zero-den :  ⊦ i ≠ 0 → rational(i, 0).denom = 1;
          used for: ls;
          zero-def :  ⊦ 0r = rational(0, 1);
          used for: ls;
          one-def :  ⊦ 1r = rational(1, 1);
          used for: ls;
          add-def :  ⊦ ri + rj = rational(ri.num * rj.denom + ri.denom * rj.num, ri.denom * rj.denom);
          used for: ls;
          sub-def :  ⊦ ri - rj = rational(ri.num * rj.denom - ri.denom * rj.num, ri.denom * rj.denom);
          used for: ls;
          mult-def :  ⊦ ri * rj = rational(ri.num * rj.num, ri.denom * rj.denom);
          used for: ls;
          div-def :  ⊦ ri / rj = rational(ri.num * rj.denom, ri.denom * rj.num);
          used for: ls;
          neg-def :  ⊦ ~ ri = 0r - ri;
          used for: ls;
          abs-def :  ⊦ abs(ri) = rational(abs(ri.num), ri.denom);
          used for: ls;
          Ls-def :  ⊦ ri < rj ↔ (ri - rj).num < 0;
          used for: ls;
          Le-def :  ⊦ ri ≤ rj ↔ ¬ rj < ri;
          used for: ls;
          Gr-def :  ⊦ ri > rj ↔ rj < ri;
          used for: s, ls;
          Ge-def :  ⊦ ri ≥ rj ↔ ¬ ri < rj;
          used for: s, ls;

   

   
end enrich