:: PRGCOR_1 semantic presentation
theorem Th1: :: PRGCOR_1:1
for b
1, b
2, b
3 being
Nat holds
(b1 + b3) -' (b2 + b3) = b
1 -' b
2
theorem Th2: :: PRGCOR_1:2
for b
1, b
2 being
Nat holds
( b
2 > 0 & b
1 mod (2 * b2) >= b
2 implies (
(b1 mod (2 * b2)) - b
2 = b
1 mod b
2 &
(b1 mod b2) + b
2 = b
1 mod (2 * b2) ) )
theorem Th3: :: PRGCOR_1:3
for b
1, b
2 being
Nat holds
( b
2 > 0 & b
1 mod (2 * b2) >= b
2 implies b
1 div b
2 = ((b1 div (2 * b2)) * 2) + 1 )
theorem Th4: :: PRGCOR_1:4
for b
1, b
2 being
Nat holds
( b
2 > 0 & b
1 mod (2 * b2) < b
2 implies b
1 mod (2 * b2) = b
1 mod b
2 )
theorem Th5: :: PRGCOR_1:5
for b
1, b
2 being
Nat holds
( b
2 > 0 & b
1 mod (2 * b2) < b
2 implies b
1 div b
2 = (b1 div (2 * b2)) * 2 )
theorem Th6: :: PRGCOR_1:6
for b
1, b
2 being
Nat holds
not ( b
1 > 0 & ( for b
3 being
Nat holds
not ( ( for b
4 being
Nat holds
( b
4 < b
3 implies b
1 * (2 |^ b4) <= b
2 ) ) & b
1 * (2 |^ b3) > b
2 ) ) )
theorem Th7: :: PRGCOR_1:7
definition
let c
1, c
2 be
Integer;
assume E8:
( c
1 >= 0 & c
2 > 0 )
;
func idiv1_prg c
1,c
2 -> Integer means :
Def1:
:: PRGCOR_1:def 1
ex b
1, b
2, b
3 being
FinSequence of
INT st
(
len b
1 = a
1 + 1 &
len b
2 = a
1 + 1 &
len b
3 = a
1 + 1 & ( a
1 < a
2 implies a
3 = 0 ) & ( not a
1 < a
2 implies ( b
1 . 1
= a
2 & ex b
4 being
Integer st
( 1
<= b
4 & b
4 <= a
1 & ( for b
5 being
Integer holds
( 1
<= b
5 & b
5 < b
4 implies ( b
1 . (b5 + 1) = (b1 . b5) * 2 & not b
1 . (b5 + 1) > a
1 ) ) ) & b
1 . (b4 + 1) = (b1 . b4) * 2 & b
1 . (b4 + 1) > a
1 & b
3 . (b4 + 1) = 0 & b
2 . (b4 + 1) = a
1 & ( for b
5 being
Integer holds
( 1
<= b
5 & b
5 <= b
4 implies ( ( b
2 . ((b4 + 1) - (b5 - 1)) >= b
1 . ((b4 + 1) - b5) implies ( b
2 . ((b4 + 1) - b5) = (b2 . ((b4 + 1) - (b5 - 1))) - (b1 . ((b4 + 1) - b5)) & b
3 . ((b4 + 1) - b5) = ((b3 . ((b4 + 1) - (b5 - 1))) * 2) + 1 ) ) & ( not b
2 . ((b4 + 1) - (b5 - 1)) >= b
1 . ((b4 + 1) - b5) implies ( b
2 . ((b4 + 1) - b5) = b
2 . ((b4 + 1) - (b5 - 1)) & b
3 . ((b4 + 1) - b5) = (b3 . ((b4 + 1) - (b5 - 1))) * 2 ) ) ) ) ) & a
3 = b
3 . 1 ) ) ) );
existence
ex b1 being Integerex b2, b3, b4 being FinSequence of INT st
( len b2 = c1 + 1 & len b3 = c1 + 1 & len b4 = c1 + 1 & ( c1 < c2 implies b1 = 0 ) & ( not c1 < c2 implies ( b2 . 1 = c2 & ex b5 being Integer st
( 1 <= b5 & b5 <= c1 & ( for b6 being Integer holds
( 1 <= b6 & b6 < b5 implies ( b2 . (b6 + 1) = (b2 . b6) * 2 & not b2 . (b6 + 1) > c1 ) ) ) & b2 . (b5 + 1) = (b2 . b5) * 2 & b2 . (b5 + 1) > c1 & b4 . (b5 + 1) = 0 & b3 . (b5 + 1) = c1 & ( for b6 being Integer holds
( 1 <= b6 & b6 <= b5 implies ( ( b3 . ((b5 + 1) - (b6 - 1)) >= b2 . ((b5 + 1) - b6) implies ( b3 . ((b5 + 1) - b6) = (b3 . ((b5 + 1) - (b6 - 1))) - (b2 . ((b5 + 1) - b6)) & b4 . ((b5 + 1) - b6) = ((b4 . ((b5 + 1) - (b6 - 1))) * 2) + 1 ) ) & ( not b3 . ((b5 + 1) - (b6 - 1)) >= b2 . ((b5 + 1) - b6) implies ( b3 . ((b5 + 1) - b6) = b3 . ((b5 + 1) - (b6 - 1)) & b4 . ((b5 + 1) - b6) = (b4 . ((b5 + 1) - (b6 - 1))) * 2 ) ) ) ) ) & b1 = b4 . 1 ) ) ) )
uniqueness
for b1, b2 being Integer holds
( ex b3, b4, b5 being FinSequence of INT st
( len b3 = c1 + 1 & len b4 = c1 + 1 & len b5 = c1 + 1 & ( c1 < c2 implies b1 = 0 ) & ( not c1 < c2 implies ( b3 . 1 = c2 & ex b6 being Integer st
( 1 <= b6 & b6 <= c1 & ( for b7 being Integer holds
( 1 <= b7 & b7 < b6 implies ( b3 . (b7 + 1) = (b3 . b7) * 2 & not b3 . (b7 + 1) > c1 ) ) ) & b3 . (b6 + 1) = (b3 . b6) * 2 & b3 . (b6 + 1) > c1 & b5 . (b6 + 1) = 0 & b4 . (b6 + 1) = c1 & ( for b7 being Integer holds
( 1 <= b7 & b7 <= b6 implies ( ( b4 . ((b6 + 1) - (b7 - 1)) >= b3 . ((b6 + 1) - b7) 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 ) ) & ( not b4 . ((b6 + 1) - (b7 - 1)) >= b3 . ((b6 + 1) - b7) implies ( b4 . ((b6 + 1) - b7) = b4 . ((b6 + 1) - (b7 - 1)) & b5 . ((b6 + 1) - b7) = (b5 . ((b6 + 1) - (b7 - 1))) * 2 ) ) ) ) ) & b1 = b5 . 1 ) ) ) ) & ex b3, b4, b5 being FinSequence of INT st
( len b3 = c1 + 1 & len b4 = c1 + 1 & len b5 = c1 + 1 & ( c1 < c2 implies b2 = 0 ) & ( not c1 < c2 implies ( b3 . 1 = c2 & ex b6 being Integer st
( 1 <= b6 & b6 <= c1 & ( for b7 being Integer holds
( 1 <= b7 & b7 < b6 implies ( b3 . (b7 + 1) = (b3 . b7) * 2 & not b3 . (b7 + 1) > c1 ) ) ) & b3 . (b6 + 1) = (b3 . b6) * 2 & b3 . (b6 + 1) > c1 & b5 . (b6 + 1) = 0 & b4 . (b6 + 1) = c1 & ( for b7 being Integer holds
( 1 <= b7 & b7 <= b6 implies ( ( b4 . ((b6 + 1) - (b7 - 1)) >= b3 . ((b6 + 1) - b7) 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 ) ) & ( not b4 . ((b6 + 1) - (b7 - 1)) >= b3 . ((b6 + 1) - b7) implies ( b4 . ((b6 + 1) - b7) = b4 . ((b6 + 1) - (b7 - 1)) & b5 . ((b6 + 1) - b7) = (b5 . ((b6 + 1) - (b7 - 1))) * 2 ) ) ) ) ) & b2 = b5 . 1 ) ) ) ) implies b1 = b2 )
end;
:: deftheorem Def1 defines idiv1_prg PRGCOR_1:def 1 :
for b
1, b
2 being
Integer holds
( b
1 >= 0 & b
2 > 0 implies for b
3 being
Integer holds
( b
3 = idiv1_prg b
1,b
2 iff ex b
4, b
5, b
6 being
FinSequence of
INT st
(
len b
4 = b
1 + 1 &
len b
5 = b
1 + 1 &
len b
6 = b
1 + 1 & ( b
1 < b
2 implies b
3 = 0 ) & ( not b
1 < b
2 implies ( b
4 . 1
= b
2 & ex b
7 being
Integer st
( 1
<= b
7 & b
7 <= b
1 & ( for b
8 being
Integer holds
( 1
<= b
8 & b
8 < b
7 implies ( b
4 . (b8 + 1) = (b4 . b8) * 2 & not b
4 . (b8 + 1) > b
1 ) ) ) & b
4 . (b7 + 1) = (b4 . b7) * 2 & b
4 . (b7 + 1) > b
1 & b
6 . (b7 + 1) = 0 & b
5 . (b7 + 1) = b
1 & ( for b
8 being
Integer holds
( 1
<= b
8 & b
8 <= b
7 implies ( ( b
5 . ((b7 + 1) - (b8 - 1)) >= b
4 . ((b7 + 1) - b8) implies ( b
5 . ((b7 + 1) - b8) = (b5 . ((b7 + 1) - (b8 - 1))) - (b4 . ((b7 + 1) - b8)) & b
6 . ((b7 + 1) - b8) = ((b6 . ((b7 + 1) - (b8 - 1))) * 2) + 1 ) ) & ( not b
5 . ((b7 + 1) - (b8 - 1)) >= b
4 . ((b7 + 1) - b8) implies ( b
5 . ((b7 + 1) - b8) = b
5 . ((b7 + 1) - (b8 - 1)) & b
6 . ((b7 + 1) - b8) = (b6 . ((b7 + 1) - (b8 - 1))) * 2 ) ) ) ) ) & b
3 = b
6 . 1 ) ) ) ) ) );
theorem Th8: :: PRGCOR_1:8
for b
1, b
2 being
Integer holds
( b
1 >= 0 & b
2 > 0 implies for b
3, b
4, b
5 being
FinSequence of
INT for b
6 being
Integer holds
(
len b
3 = b
1 + 1 &
len b
4 = b
1 + 1 &
len b
5 = b
1 + 1 & ( not b
1 < b
2 implies ( b
3 . 1
= b
2 & 1
<= b
6 & b
6 <= b
1 & ( for b
7 being
Integer holds
( 1
<= b
7 & b
7 < b
6 implies ( b
3 . (b7 + 1) = (b3 . b7) * 2 & not b
3 . (b7 + 1) > b
1 ) ) ) & b
3 . (b6 + 1) = (b3 . b6) * 2 & b
3 . (b6 + 1) > b
1 & b
5 . (b6 + 1) = 0 & b
4 . (b6 + 1) = b
1 & ( for b
7 being
Integer holds
( 1
<= b
7 & b
7 <= b
6 implies ( ( b
4 . ((b6 + 1) - (b7 - 1)) >= b
3 . ((b6 + 1) - b7) implies ( b
4 . ((b6 + 1) - b7) = (b4 . ((b6 + 1) - (b7 - 1))) - (b3 . ((b6 + 1) - b7)) & b
5 . ((b6 + 1) - b7) = ((b5 . ((b6 + 1) - (b7 - 1))) * 2) + 1 ) ) & ( not b
4 . ((b6 + 1) - (b7 - 1)) >= b
3 . ((b6 + 1) - b7) implies ( b
4 . ((b6 + 1) - b7) = b
4 . ((b6 + 1) - (b7 - 1)) & b
5 . ((b6 + 1) - b7) = (b5 . ((b6 + 1) - (b7 - 1))) * 2 ) ) ) ) ) &
idiv1_prg b
1,b
2 = b
5 . 1 ) ) implies (
len b
3 = b
1 + 1 &
len b
4 = b
1 + 1 &
len b
5 = b
1 + 1 & ( b
1 < b
2 implies
idiv1_prg b
1,b
2 = 0 ) & ( not b
1 < b
2 implies ( 1
in dom b
3 & b
3 . 1
= b
2 & 1
<= b
6 & b
6 <= b
1 & ( for b
7 being
Integer holds
( 1
<= b
7 & b
7 < b
6 implies ( b
7 + 1
in dom b
3 & b
7 in dom b
3 & b
3 . (b7 + 1) = (b3 . b7) * 2 & not b
3 . (b7 + 1) > b
1 ) ) ) & b
6 + 1
in dom b
3 & b
6 in dom b
3 & b
3 . (b6 + 1) = (b3 . b6) * 2 & b
3 . (b6 + 1) > b
1 & b
6 + 1
in dom b
5 & b
5 . (b6 + 1) = 0 & b
6 + 1
in dom b
4 & b
4 . (b6 + 1) = b
1 & ( for b
7 being
Integer holds
( 1
<= b
7 & b
7 <= b
6 implies (
(b6 + 1) - (b7 - 1) in dom b
4 &
(b6 + 1) - b
7 in dom b
3 & ( b
4 . ((b6 + 1) - (b7 - 1)) >= b
3 . ((b6 + 1) - b7) implies (
(b6 + 1) - b
7 in dom b
4 &
(b6 + 1) - b
7 in dom b
3 & b
4 . ((b6 + 1) - b7) = (b4 . ((b6 + 1) - (b7 - 1))) - (b3 . ((b6 + 1) - b7)) &
(b6 + 1) - b
7 in dom b
5 &
(b6 + 1) - (b7 - 1) in dom b
5 & b
5 . ((b6 + 1) - b7) = ((b5 . ((b6 + 1) - (b7 - 1))) * 2) + 1 ) ) & ( not b
4 . ((b6 + 1) - (b7 - 1)) >= b
3 . ((b6 + 1) - b7) implies (
(b6 + 1) - b
7 in dom b
4 &
(b6 + 1) - (b7 - 1) in dom b
4 & b
4 . ((b6 + 1) - b7) = b
4 . ((b6 + 1) - (b7 - 1)) &
(b6 + 1) - b
7 in dom b
5 &
(b6 + 1) - (b7 - 1) in dom b
5 & b
5 . ((b6 + 1) - b7) = (b5 . ((b6 + 1) - (b7 - 1))) * 2 ) ) ) ) ) & 1
in dom b
5 &
idiv1_prg b
1,b
2 = b
5 . 1 ) ) ) ) )
theorem Th9: :: PRGCOR_1:9
theorem Th10: :: PRGCOR_1:10
theorem Th11: :: PRGCOR_1:11
for b
1, b
2 being
Integerfor b
3, b
4 being
Nat holds
( ( b
2 = 0 & b
3 = b
1 & b
4 = b
2 implies ( b
1 div b
2 = 0 & b
3 div b
4 = 0 ) ) & ( b
1 >= 0 & b
2 > 0 & b
3 = b
1 & b
4 = b
2 implies b
1 div b
2 = b
3 div b
4 ) & ( b
1 >= 0 & b
2 < 0 & b
3 = b
1 & b
4 = - b
2 implies ( ( b
4 * (b3 div b4) = b
3 implies b
1 div b
2 = - (b3 div b4) ) & ( b
4 * (b3 div b4) <> b
3 implies b
1 div b
2 = (- (b3 div b4)) - 1 ) ) ) & ( b
1 < 0 & b
2 > 0 & b
3 = - b
1 & b
4 = b
2 implies ( ( b
4 * (b3 div b4) = b
3 implies b
1 div b
2 = - (b3 div b4) ) & ( b
4 * (b3 div b4) <> b
3 implies b
1 div b
2 = (- (b3 div b4)) - 1 ) ) ) & ( b
1 < 0 & b
2 < 0 & b
3 = - b
1 & b
4 = - b
2 implies b
1 div b
2 = b
3 div b
4 ) )
definition
let c
1, c
2 be
Integer;
func idiv_prg c
1,c
2 -> Integer means :
Def2:
:: PRGCOR_1:def 2
ex b
1 being
Integer st
( ( a
2 = 0 implies a
3 = 0 ) & ( not a
2 = 0 implies ( ( a
1 >= 0 & a
2 > 0 implies a
3 = idiv1_prg a
1,a
2 ) & ( not ( a
1 >= 0 & a
2 > 0 ) implies ( ( a
1 >= 0 & a
2 < 0 implies ( b
1 = idiv1_prg a
1,
(- a2) & (
(- a2) * b
1 = a
1 implies a
3 = - b
1 ) & (
(- a2) * b
1 <> a
1 implies a
3 = (- b1) - 1 ) ) ) & ( not ( a
1 >= 0 & a
2 < 0 ) implies ( ( a
1 < 0 & a
2 > 0 implies ( b
1 = idiv1_prg (- a1),a
2 & ( a
2 * b
1 = - a
1 implies a
3 = - b
1 ) & ( a
2 * b
1 <> - a
1 implies a
3 = (- b1) - 1 ) ) ) & ( not ( a
1 < 0 & a
2 > 0 ) implies a
3 = idiv1_prg (- a1),
(- a2) ) ) ) ) ) ) ) );
existence
ex b1, b2 being Integer st
( ( c2 = 0 implies b1 = 0 ) & ( not c2 = 0 implies ( ( c1 >= 0 & c2 > 0 implies b1 = idiv1_prg c1,c2 ) & ( not ( c1 >= 0 & c2 > 0 ) implies ( ( c1 >= 0 & c2 < 0 implies ( b2 = idiv1_prg c1,(- c2) & ( (- c2) * b2 = c1 implies b1 = - b2 ) & ( (- c2) * b2 <> c1 implies b1 = (- b2) - 1 ) ) ) & ( not ( c1 >= 0 & c2 < 0 ) implies ( ( c1 < 0 & c2 > 0 implies ( b2 = idiv1_prg (- c1),c2 & ( c2 * b2 = - c1 implies b1 = - b2 ) & ( c2 * b2 <> - c1 implies b1 = (- b2) - 1 ) ) ) & ( not ( c1 < 0 & c2 > 0 ) implies b1 = idiv1_prg (- c1),(- c2) ) ) ) ) ) ) ) )
uniqueness
for b1, b2 being Integer holds
( ex b3 being Integer st
( ( c2 = 0 implies b1 = 0 ) & ( not c2 = 0 implies ( ( c1 >= 0 & c2 > 0 implies b1 = idiv1_prg c1,c2 ) & ( not ( c1 >= 0 & c2 > 0 ) implies ( ( c1 >= 0 & c2 < 0 implies ( b3 = idiv1_prg c1,(- c2) & ( (- c2) * b3 = c1 implies b1 = - b3 ) & ( (- c2) * b3 <> c1 implies b1 = (- b3) - 1 ) ) ) & ( not ( c1 >= 0 & c2 < 0 ) implies ( ( c1 < 0 & c2 > 0 implies ( b3 = idiv1_prg (- c1),c2 & ( c2 * b3 = - c1 implies b1 = - b3 ) & ( c2 * b3 <> - c1 implies b1 = (- b3) - 1 ) ) ) & ( not ( c1 < 0 & c2 > 0 ) implies b1 = idiv1_prg (- c1),(- c2) ) ) ) ) ) ) ) ) & ex b3 being Integer st
( ( c2 = 0 implies b2 = 0 ) & ( not c2 = 0 implies ( ( c1 >= 0 & c2 > 0 implies b2 = idiv1_prg c1,c2 ) & ( not ( c1 >= 0 & c2 > 0 ) implies ( ( c1 >= 0 & c2 < 0 implies ( b3 = idiv1_prg c1,(- c2) & ( (- c2) * b3 = c1 implies b2 = - b3 ) & ( (- c2) * b3 <> c1 implies b2 = (- b3) - 1 ) ) ) & ( not ( c1 >= 0 & c2 < 0 ) implies ( ( c1 < 0 & c2 > 0 implies ( b3 = idiv1_prg (- c1),c2 & ( c2 * b3 = - c1 implies b2 = - b3 ) & ( c2 * b3 <> - c1 implies b2 = (- b3) - 1 ) ) ) & ( not ( c1 < 0 & c2 > 0 ) implies b2 = idiv1_prg (- c1),(- c2) ) ) ) ) ) ) ) ) implies b1 = b2 )
;
end;
:: deftheorem Def2 defines idiv_prg PRGCOR_1:def 2 :
for b
1, b
2, b
3 being
Integer holds
( b
3 = idiv_prg b
1,b
2 iff ex b
4 being
Integer st
( ( b
2 = 0 implies b
3 = 0 ) & ( not b
2 = 0 implies ( ( b
1 >= 0 & b
2 > 0 implies b
3 = idiv1_prg b
1,b
2 ) & ( not ( b
1 >= 0 & b
2 > 0 ) implies ( ( b
1 >= 0 & b
2 < 0 implies ( b
4 = idiv1_prg b
1,
(- b2) & (
(- b2) * b
4 = b
1 implies b
3 = - b
4 ) & (
(- b2) * b
4 <> b
1 implies b
3 = (- b4) - 1 ) ) ) & ( not ( b
1 >= 0 & b
2 < 0 ) implies ( ( b
1 < 0 & b
2 > 0 implies ( b
4 = idiv1_prg (- b1),b
2 & ( b
2 * b
4 = - b
1 implies b
3 = - b
4 ) & ( b
2 * b
4 <> - b
1 implies b
3 = (- b4) - 1 ) ) ) & ( not ( b
1 < 0 & b
2 > 0 ) implies b
3 = idiv1_prg (- b1),
(- b2) ) ) ) ) ) ) ) ) );
theorem Th12: :: PRGCOR_1:12