Article PRGCOR_1, MML version 4.99.1005
:: PRGCOR_1:th 1
theorem
for b1, b2, b3 being Element of NAT holds
(b1 + b3) -' (b2 + b3) = b1 -' b2;
:: PRGCOR_1:th 2
theorem
for b1, b2 being Element of NAT
st 0 < b2 & b2 <= b1 mod (2 * b2)
holds (b1 mod (2 * b2)) - b2 = b1 mod b2 &
(b1 mod b2) + b2 = b1 mod (2 * b2);
:: PRGCOR_1:th 3
theorem
for b1, b2 being Element of NAT
st 0 < b2 & b2 <= b1 mod (2 * b2)
holds b1 div b2 = ((b1 div (2 * b2)) * 2) + 1;
:: PRGCOR_1:th 4
theorem
for b1, b2 being Element of NAT
st 0 < b2 & b1 mod (2 * b2) < b2
holds b1 mod (2 * b2) = b1 mod b2;
:: PRGCOR_1:th 5
theorem
for b1, b2 being Element of NAT
st 0 < b2 & b1 mod (2 * b2) < b2
holds b1 div b2 = (b1 div (2 * b2)) * 2;
:: PRGCOR_1:funcreg 1
registration
let a1 be set;
let a2 be Function-like Relation of a1,INT;
let a3 be set;
cluster a2 . a3 -> integer;
end;
:: PRGCOR_1:th 6
theorem
for b1, b2 being Element of NAT
st 0 < b1
holds ex b3 being Element of NAT st
(for b4 being Element of NAT
st b4 < b3
holds b1 * (2 |^ b4) <= b2) &
b2 < b1 * (2 |^ b3);
:: PRGCOR_1:th 7
theorem
for b1 being integer set
for b2 being Relation-like Function-like FinSequence-like set
st 1 <= b1 & b1 <= len b2
holds b1 in dom b2;
:: PRGCOR_1:funcnot 1 => PRGCOR_1:func 1
definition
let a1, a2 be integer set;
assume 0 <= a1 & 0 < a2;
func idiv1_prg(A1,A2) -> integer set means
ex b1, b2, b3 being FinSequence of INT st
len b1 = a1 + 1 &
len b2 = a1 + 1 &
len b3 = a1 + 1 &
(a2 <= a1 or it = 0) &
(a2 <= a1 implies b1 . 1 = a2 &
(ex b4 being integer set st
1 <= b4 &
b4 <= a1 &
(for b5 being integer set
st 1 <= b5 & b5 < b4
holds b1 . (b5 + 1) = (b1 . b5) * 2 &
b1 . (b5 + 1) <= a1) &
b1 . (b4 + 1) = (b1 . b4) * 2 &
a1 < b1 . (b4 + 1) &
b3 . (b4 + 1) = 0 &
b2 . (b4 + 1) = a1 &
(for b5 being integer set
st 1 <= b5 & b5 <= b4
holds (b1 . ((b4 + 1) - b5) <= b2 . ((b4 + 1) - (b5 - 1)) implies b2 . ((b4 + 1) - b5) = (b2 . ((b4 + 1) - (b5 - 1))) - (b1 . ((b4 + 1) - b5)) &
b3 . ((b4 + 1) - b5) = ((b3 . ((b4 + 1) - (b5 - 1))) * 2) + 1) &
(b1 . ((b4 + 1) - b5) <= b2 . ((b4 + 1) - (b5 - 1)) or b2 . ((b4 + 1) - b5) = b2 . ((b4 + 1) - (b5 - 1)) &
b3 . ((b4 + 1) - b5) = (b3 . ((b4 + 1) - (b5 - 1))) * 2)) &
it = b3 . 1));
end;
:: PRGCOR_1:def 1
theorem
for b1, b2 being integer set
st 0 <= b1 & 0 < b2
for b3 being integer set holds
b3 = idiv1_prg(b1,b2)
iff
ex b4, b5, b6 being FinSequence of INT st
len b4 = b1 + 1 &
len b5 = b1 + 1 &
len b6 = b1 + 1 &
(b2 <= b1 or b3 = 0) &
(b2 <= b1 implies b4 . 1 = b2 &
(ex b7 being integer set st
1 <= b7 &
b7 <= b1 &
(for b8 being integer set
st 1 <= b8 & b8 < b7
holds b4 . (b8 + 1) = (b4 . b8) * 2 &
b4 . (b8 + 1) <= b1) &
b4 . (b7 + 1) = (b4 . b7) * 2 &
b1 < b4 . (b7 + 1) &
b6 . (b7 + 1) = 0 &
b5 . (b7 + 1) = b1 &
(for b8 being integer set
st 1 <= b8 & b8 <= b7
holds (b4 . ((b7 + 1) - b8) <= b5 . ((b7 + 1) - (b8 - 1)) implies b5 . ((b7 + 1) - b8) = (b5 . ((b7 + 1) - (b8 - 1))) - (b4 . ((b7 + 1) - b8)) &
b6 . ((b7 + 1) - b8) = ((b6 . ((b7 + 1) - (b8 - 1))) * 2) + 1) &
(b4 . ((b7 + 1) - b8) <= b5 . ((b7 + 1) - (b8 - 1)) or b5 . ((b7 + 1) - b8) = b5 . ((b7 + 1) - (b8 - 1)) &
b6 . ((b7 + 1) - b8) = (b6 . ((b7 + 1) - (b8 - 1))) * 2)) &
b3 = b6 . 1));
:: PRGCOR_1:th 8
theorem
for b1, b2 being integer set
st 0 <= b1 & 0 < b2
for b3, b4, b5 being FinSequence of INT
for b6 being integer set
st len b3 = b1 + 1 &
len b4 = b1 + 1 &
len b5 = b1 + 1 &
(b2 <= b1 implies b3 . 1 = b2 &
1 <= b6 &
b6 <= b1 &
(for b7 being integer set
st 1 <= b7 & b7 < b6
holds b3 . (b7 + 1) = (b3 . b7) * 2 &
b3 . (b7 + 1) <= b1) &
b3 . (b6 + 1) = (b3 . b6) * 2 &
b1 < b3 . (b6 + 1) &
b5 . (b6 + 1) = 0 &
b4 . (b6 + 1) = b1 &
(for b7 being integer set
st 1 <= b7 & b7 <= b6
holds (b3 . ((b6 + 1) - b7) <= b4 . ((b6 + 1) - (b7 - 1)) implies b4 . ((b6 + 1) - b7) = (b4 . ((b6 + 1) - (b7 - 1))) - (b3 . ((b6 + 1) - b7)) &
b5 . ((b6 + 1) - b7) = ((b5 . ((b6 + 1) - (b7 - 1))) * 2) + 1) &
(b3 . ((b6 + 1) - b7) <= b4 . ((b6 + 1) - (b7 - 1)) or b4 . ((b6 + 1) - b7) = b4 . ((b6 + 1) - (b7 - 1)) &
b5 . ((b6 + 1) - b7) = (b5 . ((b6 + 1) - (b7 - 1))) * 2)) &
idiv1_prg(b1,b2) = b5 . 1)
holds len b3 = b1 + 1 &
len b4 = b1 + 1 &
len b5 = b1 + 1 &
(b2 <= b1 or idiv1_prg(b1,b2) = 0) &
(b2 <= b1 implies 1 in dom b3 &
b3 . 1 = b2 &
1 <= b6 &
b6 <= b1 &
(for b7 being integer set
st 1 <= b7 & b7 < b6
holds b7 + 1 in dom b3 &
b7 in dom b3 &
b3 . (b7 + 1) = (b3 . b7) * 2 &
b3 . (b7 + 1) <= b1) &
b6 + 1 in dom b3 &
b6 in dom b3 &
b3 . (b6 + 1) = (b3 . b6) * 2 &
b1 < b3 . (b6 + 1) &
b6 + 1 in dom b5 &
b5 . (b6 + 1) = 0 &
b6 + 1 in dom b4 &
b4 . (b6 + 1) = b1 &
(for b7 being integer set
st 1 <= b7 & b7 <= b6
holds (b6 + 1) - (b7 - 1) in dom b4 &
(b6 + 1) - b7 in dom b3 &
(b3 . ((b6 + 1) - b7) <= b4 . ((b6 + 1) - (b7 - 1)) implies (b6 + 1) - b7 in dom b4 &
(b6 + 1) - b7 in dom b3 &
b4 . ((b6 + 1) - b7) = (b4 . ((b6 + 1) - (b7 - 1))) - (b3 . ((b6 + 1) - b7)) &
(b6 + 1) - b7 in dom b5 &
(b6 + 1) - (b7 - 1) in dom b5 &
b5 . ((b6 + 1) - b7) = ((b5 . ((b6 + 1) - (b7 - 1))) * 2) + 1) &
(b3 . ((b6 + 1) - b7) <= b4 . ((b6 + 1) - (b7 - 1)) or (b6 + 1) - b7 in dom b4 &
(b6 + 1) - (b7 - 1) in dom b4 &
b4 . ((b6 + 1) - b7) = b4 . ((b6 + 1) - (b7 - 1)) &
(b6 + 1) - b7 in dom b5 &
(b6 + 1) - (b7 - 1) in dom b5 &
b5 . ((b6 + 1) - b7) = (b5 . ((b6 + 1) - (b7 - 1))) * 2)) &
1 in dom b5 &
idiv1_prg(b1,b2) = b5 . 1);
:: PRGCOR_1:th 9
theorem
for b1, b2 being Element of NAT
st 0 < b2
holds idiv1_prg(b1,b2) = b1 div b2;
:: PRGCOR_1:th 10
theorem
for b1, b2 being integer set
st 0 <= b1 & 0 < b2
holds idiv1_prg(b1,b2) = b1 div b2;
:: PRGCOR_1:th 11
theorem
for b1, b2 being integer set
for b3, b4 being Element of NAT holds
(b2 = 0 & b3 = b1 & b4 = b2 implies b1 div b2 = 0 & b3 div b4 = 0) &
(0 <= b1 & 0 < b2 & b3 = b1 & b4 = b2 implies b1 div b2 = b3 div b4) &
(0 <= b1 & b2 < 0 & b3 = b1 & b4 = - b2 implies (b4 * (b3 div b4) = b3 implies b1 div b2 = - (b3 div b4)) &
(b4 * (b3 div b4) = b3 or b1 div b2 = (- (b3 div b4)) - 1)) &
(b1 < 0 & 0 < b2 & b3 = - b1 & b4 = b2 implies (b4 * (b3 div b4) = b3 implies b1 div b2 = - (b3 div b4)) &
(b4 * (b3 div b4) = b3 or b1 div b2 = (- (b3 div b4)) - 1)) &
(b1 < 0 & b2 < 0 & b3 = - b1 & b4 = - b2 implies b1 div b2 = b3 div b4);
:: PRGCOR_1:funcnot 2 => PRGCOR_1:func 2
definition
let a1, a2 be integer set;
func idiv_prg(A1,A2) -> integer set means
ex b1 being integer set st
(a2 = 0 implies it = 0) &
(a2 = 0 or (0 <= a1 & 0 < a2 implies it = idiv1_prg(a1,a2)) &
(0 <= a1 & 0 < a2 or (0 <= a1 & a2 < 0 implies b1 = idiv1_prg(a1,- a2) &
((- a2) * b1 = a1 implies it = - b1) &
((- a2) * b1 = a1 or it = (- b1) - 1)) &
(0 <= a1 & a2 < 0 or (a1 < 0 & 0 < a2 implies b1 = idiv1_prg(- a1,a2) &
(a2 * b1 = - a1 implies it = - b1) &
(a2 * b1 = - a1 or it = (- b1) - 1)) &
(a1 < 0 & 0 < a2 or it = idiv1_prg(- a1,- a2)))));
end;
:: PRGCOR_1:def 2
theorem
for b1, b2, b3 being integer set holds
b3 = idiv_prg(b1,b2)
iff
ex b4 being integer set st
(b2 = 0 implies b3 = 0) &
(b2 = 0 or (0 <= b1 & 0 < b2 implies b3 = idiv1_prg(b1,b2)) &
(0 <= b1 & 0 < b2 or (0 <= b1 & b2 < 0 implies b4 = idiv1_prg(b1,- b2) &
((- b2) * b4 = b1 implies b3 = - b4) &
((- b2) * b4 = b1 or b3 = (- b4) - 1)) &
(0 <= b1 & b2 < 0 or (b1 < 0 & 0 < b2 implies b4 = idiv1_prg(- b1,b2) &
(b2 * b4 = - b1 implies b3 = - b4) &
(b2 * b4 = - b1 or b3 = (- b4) - 1)) &
(b1 < 0 & 0 < b2 or b3 = idiv1_prg(- b1,- b2)))));
:: PRGCOR_1:th 12
theorem
for b1, b2 being integer set holds
idiv_prg(b1,b2) = b1 div b2;