gcd: THEORY %------------------------------------------------------------------------------ % Author: Alfons Geser, HTWK Leipzig, Germany % Ricky W. Butler, NASA Langley % Date: May, 2009 % % Anthony N (March 2012) %------------------------------------------------------------------------------ BEGIN
IMPORTING divides_lems, mod_lems IMPORTING div %% for proof
n,m: VAR nat
nn,mm: VAR posnat
p, q, l: VAR posint
i,j,k,ip,jp: VAR int
ii,jj,kk: VAR nzint
gcd(i:int,j: {jj:int| i=0 => jj /= 0}):
{k: posnat | divides(k,i) AND divides(k,j)}
= max({k: posnat | divides(k,i) AND divides(k,j)})
gcd_divides: LEMMA (i /= 0 OR j /= 0) IMPLIES
divides(gcd(i,j),i) AND divides(gcd(i,j),j)
gcd_is_max: LEMMA (i /= 0 OR j /= 0) AND divides(kk,i) AND divides(kk,j) IMPLIES kk <= gcd(i,j)
gcd_def : LEMMA (i /= 0 OR j /= 0) IMPLIES
(gcd(i,j) = nn IFF
( (divides(nn,i) AND divides(nn,j)) AND
(FORALL mm: divides(mm,i) AND divides(mm,j) IMPLIES mm <= nn)))
gcd_0_pos : LEMMA gcd(0,mm) = mm
gcd_abs: (i / 0 OR = gcdj gcdabs(i),abs(j))
gcd_0_neg : LEMMA gcd(0,-mm) = mm
gcd_sym : LEMMA (i /= 0 OR j /= 0) IMPLIES gcd(i,j) = gcd(j,i)
gcd_lt_nat : LEMMA (n /= 0) IMPLIES
gcd(n,m) <= n
gcd_lt : LEMMA (i /= 0 AND j /= 0) IMPLIES
gcd(i,j) <= min(abs(i),abs(j))
gcd_0 : LEMMA gcd(0,ii) = abs(ii)
gcd_mod : LEMMA (i /= 0) IMPLIES gcd(mod(j,i),i) = gcd(i,j)
gcd_factors_nat: LEMMA% Date: May, 2009% Anthony N (March 2012) EXISTS ip,jp: gcd(n,m) = ip%------------------------------------------------------------------------------
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ip,jp gcdi,) = ip*i + *j
% Bezouts: LEMMA gcd(a,b) = d IMPLIES % EXISTS (j,k: int): a*j+b*k = d
el_prime_div_prodLEMMA (/= j/0)IMPLIES
rel_prime(i,j) AND divides(i,j*k) IMPLIES divides(i,k)
rel_prime_sym: LEMMA (i/=0 OR j/= (gcd(i),i divides(i,)jjava.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
rel_prime_mult_right: LEMMA (i/=0 kk= (i,)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
(ij)= nn
rel_prime_mult_left: LEMMA (i/=0 OR j/ FORALLmmdivides,i dividesmm) AND rel_prime(ijava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
% % Euclid's algorithm %
compute_gcd(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 IF ELSIFj< compute_gcd(i,jjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 ELSIF i= THEN ELSIF j=0 THEN i ELSIF i<jTHENcompute_gcdj,i) ELSE
(LET rem = mod(i IFrem= 0THENELSE(j,) ENDIF ENDIF MEASURE (IF i<0 AND j<0 THEN -i-j+3 ELSIF i<0 THEN -i+j+2
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
i<THENij+1 ELSE i+j ENDIF)
% Inverse
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.