gcd = x y + res ->                               gcd = x y ->                            gcd = x y ->
  a = x ..; b = y ..                               gcd x (y * (-1))                        0
                                                 _                                       _
  do ->                                            x > 0 && y < 0                          x = 0
    if (a > b) ->                                ;                                       ;
      a -= b; iterate
    else                                         gcd = x y ->                            gcd = x y ->
      if (b > a) ->                                gcd (x * (-1)) y                        exit ERR_DIVISION_BY_ZERO
        b -= a; iterate                          _                                       _
      else                                         x < 0 && y > 0                          y = 0
        leave                                    ;                                       ;
    ;
  ;                                              gcd = x y ->
                                                   gcd (x * (-1)) (y * (-1))
  res = a                                        _
_                                                  x < 0 && y < 0
  x, y : integer                                 ;
_
  x > 0 && y > 0
;
