divisibility
:
THEORY
BEGIN
divides(mm,
i):
bool
=
EXISTS
(k:int)
:
i
=
(mm
*
k);
divides
lt:
LEMMA
(i
/=
0)
IMPLIES
divides(mm,
i)
IMPLIES
(mm
<
=
abs(i))
divides
lt
abs:
LEMMA
divides(mm,
ii)
IMPLIES
(abs(mm)
<
=
abs(ii))
divides
mod:
LEMMA
divides(m,
i)
=
(mod(i,
m)
=
0)
divides
sym:
LEMMA
divides(mm,
ii)
=
divides(mm,
-ii)
divides
plus
1:
LEMMA
(mm
>
1)
IMPLIES
divides(mm,
ii)
IMPLIES
(NOT
divides(mm,
ii
+
1))
%%(TCC)
lcm_TCC1:
OBLIGATION
lcm(m1,
m2):
int
=
min({(k:posnat)
|
divides(m1,
k)
AND
divides(m2,
k)});
gcd
noem:
LEMMA
nonempty?({(k:posnat)
|
divides(k,
i)
AND
divides(k,
j)})
gcd
prep:
LEMMA
FORALL
(i:int),
(j:{(jj:int)
|
(i
=
0)
=
>
(jj
/=
0)}
)
:
EXISTS
(UB:posnat)
:
FORALL
(y:({(k:posnat)
|
divides(k,
i)
AND
divides(k,
j)})
)
:
y
<
=
UB
END
divisibility