:: INT_1 semantic presentation

Lemma1: for b1 being set st b1 in [:{0},NAT :] \ {[0,0]} holds
ex b2 being Element of NAT st b1 = - b2
proof end;

Lemma2: for b1 being set
for b2 being Element of NAT st b1 = - b2 & b2 <> b1 holds
b1 in [:{0},NAT :] \ {[0,0]}
proof end;

definition
redefine func INT -> set means :Def1: :: INT_1:def 1
for b1 being set holds
( b1 in a1 iff ex b2 being Element of NAT st
( b1 = b2 or b1 = - b2 ) );
compatibility
for b1 being set holds
( b1 = INT iff for b2 being set holds
( b2 in b1 iff ex b3 being Element of NAT st
( b2 = b3 or b2 = - b3 ) ) )
proof end;
end;

:: deftheorem Def1 defines INT INT_1:def 1 :
for b1 being set holds
( b1 = INT iff for b2 being set holds
( b2 in b1 iff ex b3 being Element of NAT st
( b2 = b3 or b2 = - b3 ) ) );

definition
let c1 be number ;
attr a1 is integer means :Def2: :: INT_1:def 2
a1 in INT ;
end;

:: deftheorem Def2 defines integer INT_1:def 2 :
for b1 being number holds
( b1 is integer iff b1 in INT );

registration
cluster integer Element of REAL ;
existence
ex b1 being Real st b1 is integer
proof end;
cluster integer set ;
existence
ex b1 being number st b1 is integer
proof end;
cluster -> integer Element of INT ;
coherence
for b1 being Element of INT holds b1 is integer
by Def2;
end;

definition
mode Integer is integer number ;
end;

theorem Th1: :: INT_1:1
canceled;

theorem Th2: :: INT_1:2
canceled;

theorem Th3: :: INT_1:3
canceled;

theorem Th4: :: INT_1:4
canceled;

theorem Th5: :: INT_1:5
canceled;

theorem Th6: :: INT_1:6
canceled;

theorem Th7: :: INT_1:7
for b1 being real number
for b2 being natural number st ( b1 = b2 or b1 = - b2 ) holds
b1 is Integer
proof end;

theorem Th8: :: INT_1:8
for b1 being real number st b1 is Integer holds
ex b2 being Element of NAT st
( b1 = b2 or b1 = - b2 )
proof end;

registration
cluster -> integer Element of NAT ;
coherence
for b1 being Element of NAT holds b1 is integer
by Th7;
cluster natural -> integer set ;
coherence
for b1 being number st b1 is natural holds
b1 is integer
proof end;
end;

Lemma7: for b1 being set st b1 in INT holds
b1 in REAL
by NUMBERS:15;

registration
cluster integer -> real set ;
coherence
for b1 being number st b1 is integer holds
b1 is real
proof end;
end;

registration
let c1, c2 be Integer;
cluster a1 + a2 -> integer ;
coherence
c1 + c2 is integer
proof end;
cluster a1 * a2 -> integer ;
coherence
c1 * c2 is integer
proof end;
end;

registration
let c1 be Integer;
cluster - a1 -> integer ;
coherence
- c1 is integer
proof end;
end;

registration
let c1, c2 be Integer;
cluster a1 - a2 -> integer ;
coherence
c1 - c2 is integer
proof end;
end;

registration
let c1 be Element of NAT ;
cluster - a1 -> integer ;
coherence
- c1 is integer
;
let c2 be Integer;
cluster a2 + a1 -> integer ;
coherence
c2 + c1 is integer
;
cluster a2 * a1 -> integer ;
coherence
c2 * c1 is integer
;
cluster a2 - a1 -> integer ;
coherence
c2 - c1 is integer
;
end;

registration
let c1, c2 be Element of NAT ;
cluster a1 - a2 -> integer ;
coherence
c1 - c2 is integer
;
end;

theorem Th9: :: INT_1:9
canceled;

theorem Th10: :: INT_1:10
canceled;

theorem Th11: :: INT_1:11
canceled;

theorem Th12: :: INT_1:12
canceled;

theorem Th13: :: INT_1:13
canceled;

theorem Th14: :: INT_1:14
canceled;

theorem Th15: :: INT_1:15
canceled;

theorem Th16: :: INT_1:16
for b1 being Integer st 0 <= b1 holds
b1 in NAT
proof end;

theorem Th17: :: INT_1:17
for b1 being real number st b1 is Integer holds
( b1 + 1 is Integer & b1 - 1 is Integer )
proof end;

theorem Th18: :: INT_1:18
for b1, b2 being Integer st b1 <= b2 holds
b2 - b1 in NAT
proof end;

theorem Th19: :: INT_1:19
for b1 being Element of NAT
for b2, b3 being Integer st b2 + b1 = b3 holds
b2 <= b3
proof end;

Lemma11: for b1 being Element of NAT st b1 < 1 holds
b1 = 0
proof end;

Lemma12: for b1 being Integer st 0 < b1 holds
1 <= b1
proof end;

theorem Th20: :: INT_1:20
for b1, b2 being Integer st b1 < b2 holds
b1 + 1 <= b2
proof end;

theorem Th21: :: INT_1:21
for b1 being Integer st b1 < 0 holds
b1 <= - 1
proof end;

theorem Th22: :: INT_1:22
for b1, b2 being Integer holds
( b1 * b2 = 1 iff ( ( b1 = 1 & b2 = 1 ) or ( b1 = - 1 & b2 = - 1 ) ) )
proof end;

theorem Th23: :: INT_1:23
for b1, b2 being Integer holds
( b1 * b2 = - 1 iff ( ( b1 = - 1 & b2 = 1 ) or ( b1 = 1 & b2 = - 1 ) ) )
proof end;

Lemma16: for b1, b2 being Integer st b1 <= b2 holds
ex b3 being Element of NAT st b1 + b3 = b2
proof end;

Lemma17: for b1, b2 being Integer st b1 <= b2 holds
ex b3 being Element of NAT st b2 - b3 = b1
proof end;

Lemma18: for b1 being real number holds b1 - 1 < b1
by XREAL_1:148;

scheme :: INT_1:sch 1
s1{ P1[ Integer] } :
ex b1 being Subset of INT st
for b2 being Integer holds
( b2 in b1 iff P1[b2] )
proof end;

scheme :: INT_1:sch 2
s2{ F1() -> Integer, P1[ Integer] } :
for b1 being Integer st F1() <= b1 holds
P1[b1]
provided
E19: P1[F1()] and
E20: for b1 being Integer st F1() <= b1 & P1[b1] holds
P1[b1 + 1]
proof end;

scheme :: INT_1:sch 3
s3{ F1() -> Integer, P1[ Integer] } :
for b1 being Integer st b1 <= F1() holds
P1[b1]
provided
E19: P1[F1()] and
E20: for b1 being Integer st b1 <= F1() & P1[b1] holds
P1[b1 - 1]
proof end;

scheme :: INT_1:sch 4
s4{ F1() -> Integer, P1[ Integer] } :
for b1 being Integer holds P1[b1]
provided
E19: P1[F1()] and
E20: for b1 being Integer st P1[b1] holds
( P1[b1 - 1] & P1[b1 + 1] )
proof end;

scheme :: INT_1:sch 5
s5{ F1() -> Integer, P1[ Integer] } :
ex b1 being Integer st
( P1[b1] & ( for b2 being Integer st P1[b2] holds
b1 <= b2 ) )
provided
E19: for b1 being Integer st P1[b1] holds
F1() <= b1 and
E20: ex b1 being Integer st P1[b1]
proof end;

scheme :: INT_1:sch 6
s6{ F1() -> Integer, P1[ Integer] } :
ex b1 being Integer st
( P1[b1] & ( for b2 being Integer st P1[b2] holds
b2 <= b1 ) )
provided
E19: for b1 being Integer st P1[b1] holds
b1 <= F1() and
E20: ex b1 being Integer st P1[b1]
proof end;

definition
let c1, c2, c3 be Integer;
pred c1,c2 are_congruent_mod c3 means :Def3: :: INT_1:def 3
ex b1 being Integer st a3 * b1 = a1 - a2;
end;

:: deftheorem Def3 defines are_congruent_mod INT_1:def 3 :
for b1, b2, b3 being Integer holds
( b1,b2 are_congruent_mod b3 iff ex b4 being Integer st b3 * b4 = b1 - b2 );

theorem Th24: :: INT_1:24
canceled;

theorem Th25: :: INT_1:25
canceled;

theorem Th26: :: INT_1:26
canceled;

theorem Th27: :: INT_1:27
canceled;

theorem Th28: :: INT_1:28
canceled;

theorem Th29: :: INT_1:29
canceled;

theorem Th30: :: INT_1:30
canceled;

theorem Th31: :: INT_1:31
canceled;

theorem Th32: :: INT_1:32
for b1, b2 being Integer holds b1,b1 are_congruent_mod b2
proof end;

theorem Th33: :: INT_1:33
for b1 being Integer holds
( b1,0 are_congruent_mod b1 & 0,b1 are_congruent_mod b1 )
proof end;

theorem Th34: :: INT_1:34
for b1, b2 being Integer holds b1,b2 are_congruent_mod 1
proof end;

theorem Th35: :: INT_1:35
for b1, b2, b3 being Integer st b1,b2 are_congruent_mod b3 holds
b2,b1 are_congruent_mod b3
proof end;

theorem Th36: :: INT_1:36
for b1, b2, b3, b4 being Integer st b1,b2 are_congruent_mod b3 & b2,b4 are_congruent_mod b3 holds
b1,b4 are_congruent_mod b3
proof end;

theorem Th37: :: INT_1:37
for b1, b2, b3, b4, b5 being Integer st b1,b2 are_congruent_mod b3 & b4,b5 are_congruent_mod b3 holds
b1 + b4,b2 + b5 are_congruent_mod b3
proof end;

theorem Th38: :: INT_1:38
for b1, b2, b3, b4, b5 being Integer st b1,b2 are_congruent_mod b3 & b4,b5 are_congruent_mod b3 holds
b1 - b4,b2 - b5 are_congruent_mod b3
proof end;

theorem Th39: :: INT_1:39
for b1, b2, b3, b4, b5 being Integer st b1,b2 are_congruent_mod b3 & b4,b5 are_congruent_mod b3 holds
b1 * b4,b2 * b5 are_congruent_mod b3
proof end;

theorem Th40: :: INT_1:40
for b1, b2, b3, b4 being Integer holds
( b1 + b2,b3 are_congruent_mod b4 iff b1,b3 - b2 are_congruent_mod b4 )
proof end;

theorem Th41: :: INT_1:41
for b1, b2, b3, b4, b5 being Integer st b1 * b2 = b3 & b4,b5 are_congruent_mod b3 holds
b4,b5 are_congruent_mod b1
proof end;

theorem Th42: :: INT_1:42
for b1, b2, b3 being Integer holds
( b1,b2 are_congruent_mod b3 iff b1 + b3,b2 are_congruent_mod b3 )
proof end;

theorem Th43: :: INT_1:43
for b1, b2, b3 being Integer holds
( b1,b2 are_congruent_mod b3 iff b1 - b3,b2 are_congruent_mod b3 )
proof end;

theorem Th44: :: INT_1:44
for b1 being real number
for b2, b3 being Integer st b2 <= b1 & b1 - 1 < b2 & b3 <= b1 & b1 - 1 < b3 holds
b2 = b3
proof end;

theorem Th45: :: INT_1:45
for b1 being real number
for b2, b3 being Integer st b1 <= b2 & b2 < b1 + 1 & b1 <= b3 & b3 < b1 + 1 holds
b2 = b3
proof end;

Lemma22: for b1 being real number ex b2 being Element of NAT st b1 < b2
proof end;

definition
let c1 be real number ;
func [\c1/] -> Integer means :Def4: :: INT_1:def 4
( a2 <= a1 & a1 - 1 < a2 );
existence
ex b1 being Integer st
( b1 <= c1 & c1 - 1 < b1 )
proof end;
uniqueness
for b1, b2 being Integer st b1 <= c1 & c1 - 1 < b1 & b2 <= c1 & c1 - 1 < b2 holds
b1 = b2
by Th44;
end;

:: deftheorem Def4 defines [\ INT_1:def 4 :
for b1 being real number
for b2 being Integer holds
( b2 = [\b1/] iff ( b2 <= b1 & b1 - 1 < b2 ) );

theorem Th46: :: INT_1:46
canceled;

theorem Th47: :: INT_1:47
for b1 being real number holds
( [\b1/] = b1 iff b1 is integer )
proof end;

theorem Th48: :: INT_1:48
for b1 being real number holds
( [\b1/] < b1 iff not b1 is integer )
proof end;

theorem Th49: :: INT_1:49
canceled;

theorem Th50: :: INT_1:50
for b1 being real number holds
( [\b1/] - 1 < b1 & [\b1/] < b1 + 1 )
proof end;

theorem Th51: :: INT_1:51
for b1 being real number
for b2 being Integer holds [\b1/] + b2 = [\(b1 + b2)/]
proof end;

theorem Th52: :: INT_1:52
for b1 being real number holds b1 < [\b1/] + 1
proof end;

definition
let c1 be real number ;
func [/c1\] -> Integer means :Def5: :: INT_1:def 5
( a1 <= a2 & a2 < a1 + 1 );
existence
ex b1 being Integer st
( c1 <= b1 & b1 < c1 + 1 )
proof end;
uniqueness
for b1, b2 being Integer st c1 <= b1 & b1 < c1 + 1 & c1 <= b2 & b2 < c1 + 1 holds
b1 = b2
by Th45;
end;

:: deftheorem Def5 defines [/ INT_1:def 5 :
for b1 being real number
for b2 being Integer holds
( b2 = [/b1\] iff ( b1 <= b2 & b2 < b1 + 1 ) );

theorem Th53: :: INT_1:53
canceled;

theorem Th54: :: INT_1:54
for b1 being real number holds
( [/b1\] = b1 iff b1 is integer )
proof end;

theorem Th55: :: INT_1:55
for b1 being real number holds
( b1 < [/b1\] iff not b1 is integer )
proof end;

theorem Th56: :: INT_1:56
canceled;

theorem Th57: :: INT_1:57
for b1 being real number holds
( b1 - 1 < [/b1\] & b1 < [/b1\] + 1 )
proof end;

theorem Th58: :: INT_1:58
for b1 being real number
for b2 being Integer holds [/b1\] + b2 = [/(b1 + b2)\]
proof end;

theorem Th59: :: INT_1:59
for b1 being real number holds
( [\b1/] = [/b1\] iff b1 is integer )
proof end;

theorem Th60: :: INT_1:60
for b1 being real number holds
( [\b1/] < [/b1\] iff not b1 is integer )
proof end;

theorem Th61: :: INT_1:61
for b1 being real number holds [\b1/] <= [/b1\]
proof end;

theorem Th62: :: INT_1:62
for b1 being real number holds [\[/b1\]/] = [/b1\] by Th47;

theorem Th63: :: INT_1:63
for b1 being real number holds [\[\b1/]/] = [\b1/] by Th47;

theorem Th64: :: INT_1:64
for b1 being real number holds [/[/b1\]\] = [/b1\] by Th54;

theorem Th65: :: INT_1:65
for b1 being real number holds [/[\b1/]\] = [\b1/] by Th54;

theorem Th66: :: INT_1:66
for b1 being real number holds
( [\b1/] = [/b1\] iff not [\b1/] + 1 = [/b1\] )
proof end;

definition
let c1 be real number ;
func frac c1 -> set equals :: INT_1:def 6
a1 - [\a1/];
coherence
c1 - [\c1/] is set
;
end;

:: deftheorem Def6 defines frac INT_1:def 6 :
for b1 being real number holds frac b1 = b1 - [\b1/];

registration
let c1 be real number ;
cluster frac a1 -> real ;
coherence
frac c1 is real
;
end;

definition
let c1 be real number ;
redefine func frac as frac c1 -> Real;
coherence
frac c1 is Real
by XREAL_0:def 1;
end;

theorem Th67: :: INT_1:67
canceled;

theorem Th68: :: INT_1:68
for b1 being real number holds b1 = [\b1/] + (frac b1) ;

theorem Th69: :: INT_1:69
for b1 being real number holds
( frac b1 < 1 & 0 <= frac b1 )
proof end;

theorem Th70: :: INT_1:70
for b1 being real number holds [\(frac b1)/] = 0
proof end;

theorem Th71: :: INT_1:71
for b1 being real number holds
( frac b1 = 0 iff b1 is integer )
proof end;

theorem Th72: :: INT_1:72
for b1 being real number holds
( 0 < frac b1 iff not b1 is integer )
proof end;

definition
let c1, c2 be Integer;
func c1 div c2 -> Integer equals :Def7: :: INT_1:def 7
[\(a1 / a2)/];
correctness
coherence
[\(c1 / c2)/] is Integer
;
;
end;

:: deftheorem Def7 defines div INT_1:def 7 :
for b1, b2 being Integer holds b1 div b2 = [\(b1 / b2)/];

definition
let c1, c2 be Integer;
func c1 mod c2 -> Integer equals :Def8: :: INT_1:def 8
a1 - ((a1 div a2) * a2) if a2 <> 0
otherwise 0;
correctness
coherence
( ( c2 <> 0 implies c1 - ((c1 div c2) * c2) is Integer ) & ( not c2 <> 0 implies 0 is Integer ) )
;
consistency
for b1 being Integer holds verum
;
;
end;

:: deftheorem Def8 defines mod INT_1:def 8 :
for b1, b2 being Integer holds
( ( b2 <> 0 implies b1 mod b2 = b1 - ((b1 div b2) * b2) ) & ( not b2 <> 0 implies b1 mod b2 = 0 ) );

definition
let c1, c2 be Integer;
pred c1 divides c2 means :: INT_1:def 9
ex b1 being Integer st a2 = a1 * b1;
reflexivity
for b1 being Integer ex b2 being Integer st b1 = b1 * b2
proof end;
end;

:: deftheorem Def9 defines divides INT_1:def 9 :
for b1, b2 being Integer holds
( b1 divides b2 iff ex b3 being Integer st b2 = b1 * b3 );

theorem Th73: :: INT_1:73
canceled;

theorem Th74: :: INT_1:74
for b1 being real number st b1 <> 0 holds
[\(b1 / b1)/] = 1
proof end;

theorem Th75: :: INT_1:75
for b1 being Integer holds b1 div 0 = 0
proof end;

theorem Th76: :: INT_1:76
for b1 being Integer st b1 <> 0 holds
b1 div b1 = 1 by Th74;

theorem Th77: :: INT_1:77
for b1 being Integer holds b1 mod b1 = 0
proof end;

theorem Th78: :: INT_1:78
for b1 being Element of NAT
for b2 being Integer st b1 < b2 holds
ex b3 being Element of NAT st
( b3 = b2 - b1 & 1 <= b3 )
proof end;

theorem Th79: :: INT_1:79
for b1, b2 being Integer st b1 < b2 holds
b1 <= b2 - 1
proof end;

theorem Th80: :: INT_1:80
for b1 being real number st b1 >= 0 holds
( [/b1\] >= 0 & [\b1/] >= 0 & [/b1\] is Nat & [\b1/] is Nat )
proof end;

theorem Th81: :: INT_1:81
for b1 being Integer
for b2 being real number st b1 <= b2 holds
b1 <= [\b2/]
proof end;

theorem Th82: :: INT_1:82
for b1, b2 being natural number holds 0 <= b1 div b2
proof end;