:: INT_3 semantic presentation

definition
redefine func multint -> M6(K17(INT ,INT ), INT ) means :Def1: :: INT_3:def 1
for b1, b2 being Element of INT holds a1 . b1,b2 = multreal . b1,b2;
compatibility
for b1 being M6(K17(INT ,INT ), INT ) holds
( b1 = multint iff for b2, b3 being Element of INT holds b1 . b2,b3 = multreal . b2,b3 )
proof end;
end;

:: deftheorem Def1 defines multint INT_3:def 1 :
for b1 being M6(K17(INT ,INT ), INT ) holds
( b1 = multint iff for b2, b3 being Element of INT holds b1 . b2,b3 = multreal . b2,b3 );

definition
redefine func compint -> M6( INT , INT ) means :: INT_3:def 2
for b1 being Element of INT holds a1 . b1 = compreal . b1;
compatibility
for b1 being M6( INT , INT ) holds
( b1 = compint iff for b2 being Element of INT holds b1 . b2 = compreal . b2 )
proof end;
end;

:: deftheorem Def2 defines compint INT_3:def 2 :
for b1 being M6( INT , INT ) holds
( b1 = compint iff for b2 being Element of INT holds b1 . b2 = compreal . b2 );

definition
func INT.Ring -> doubleLoopStr equals :: INT_3:def 3
doubleLoopStr(# INT ,addint ,multint ,(In 1,INT ),(In 0,INT ) #);
coherence
doubleLoopStr(# INT ,addint ,multint ,(In 1,INT ),(In 0,INT ) #) is doubleLoopStr
;
end;

:: deftheorem Def3 defines INT.Ring INT_3:def 3 :
INT.Ring = doubleLoopStr(# INT ,addint ,multint ,(In 1,INT ),(In 0,INT ) #);

Lemma2: for b1 being Element of INT.Ring holds b1 in REAL
proof end;

registration
cluster INT.Ring -> non empty strict ;
coherence
( INT.Ring is strict & not INT.Ring is empty )
proof end;
end;

set c1 = INT.Ring ;

Lemma3: 0 = 0. INT.Ring
proof end;

Lemma4: for b1, b2 being Element of INT.Ring
for b3, b4 being Integer st b3 = b1 & b4 = b2 holds
b1 * b2 = b3 * b4
proof end;

Lemma5: for b1, b2 being Element of INT.Ring st b1 = 1 holds
( b2 * b1 = b2 & b1 * b2 = b2 )
proof end;

registration
cluster INT.Ring -> non empty unital strict ;
coherence
INT.Ring is unital
proof end;
end;

Lemma6: 1. INT.Ring = 1
proof end;

registration
cluster INT.Ring -> non empty unital associative commutative Abelian add-associative right_zeroed right_complementable strict distributive non degenerated domRing-like ;
coherence
( INT.Ring is Abelian & INT.Ring is add-associative & INT.Ring is right_zeroed & INT.Ring is right_complementable & INT.Ring is distributive & INT.Ring is commutative & INT.Ring is associative & INT.Ring is domRing-like & not INT.Ring is degenerated )
proof end;
end;

Lemma7: for b1 being Element of INT.Ring
for b2 being Integer st b2 = b1 holds
- b2 = - b1
proof end;

definition
let c2, c3 be Element of INT.Ring ;
pred c1 <= c2 means :Def4: :: INT_3:def 4
ex b1, b2 being Integer st
( b1 = a1 & b2 = a2 & b1 <= b2 );
reflexivity
for b1 being Element of INT.Ring ex b2, b3 being Integer st
( b2 = b1 & b3 = b1 & b2 <= b3 )
proof end;
connectedness
for b1, b2 being Element of INT.Ring st ( for b3, b4 being Integer holds
( not b3 = b1 or not b4 = b2 or not b3 <= b4 ) ) holds
ex b3, b4 being Integer st
( b3 = b2 & b4 = b1 & b3 <= b4 )
proof end;
end;

:: deftheorem Def4 defines <= INT_3:def 4 :
for b1, b2 being Element of INT.Ring holds
( b1 <= b2 iff ex b3, b4 being Integer st
( b3 = b1 & b4 = b2 & b3 <= b4 ) );

notation
let c2, c3 be Element of INT.Ring ;
synonym c2 >= c1 for c1 <= c2;
antonym c2 < c1 for c1 <= c2;
antonym c1 > c2 for c1 <= c2;
end;

Lemma9: for b1, b2 being Element of INT.Ring holds
( b1 < b2 iff ( b1 <= b2 & b1 <> b2 ) )
proof end;

definition
let c2 be Element of INT.Ring ;
func abs c1 -> Element of INT.Ring equals :Def5: :: INT_3:def 5
a1 if a1 >= 0. INT.Ring
otherwise - a1;
correctness
coherence
( ( c2 >= 0. INT.Ring implies c2 is Element of INT.Ring ) & ( not c2 >= 0. INT.Ring implies - c2 is Element of INT.Ring ) )
;
consistency
for b1 being Element of INT.Ring holds verum
;
;
end;

:: deftheorem Def5 defines abs INT_3:def 5 :
for b1 being Element of INT.Ring holds
( ( b1 >= 0. INT.Ring implies abs b1 = b1 ) & ( not b1 >= 0. INT.Ring implies abs b1 = - b1 ) );

definition
func absint -> Function of the carrier of INT.Ring , NAT means :Def6: :: INT_3:def 6
for b1 being Element of INT.Ring holds a1 . b1 = absreal . b1;
existence
ex b1 being Function of the carrier of INT.Ring , NAT st
for b2 being Element of INT.Ring holds b1 . b2 = absreal . b2
proof end;
uniqueness
for b1, b2 being Function of the carrier of INT.Ring , NAT st ( for b3 being Element of INT.Ring holds b1 . b3 = absreal . b3 ) & ( for b3 being Element of INT.Ring holds b2 . b3 = absreal . b3 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def6 defines absint INT_3:def 6 :
for b1 being Function of the carrier of INT.Ring , NAT holds
( b1 = absint iff for b2 being Element of INT.Ring holds b1 . b2 = absreal . b2 );

theorem Th1: :: INT_3:1
for b1 being Element of INT.Ring holds absint . b1 = abs b1
proof end;

Lemma13: for b1 being Integer holds
( b1 = 0 or absreal . b1 >= 1 )
proof end;

Lemma14: for b1, b2 being Element of INT.Ring
for b3, b4 being Integer st b3 = b1 & b4 = b2 holds
b1 + b2 = b3 + b4
proof end;

Lemma15: for b1, b2 being Element of INT.Ring st b2 <> 0. INT.Ring holds
for b3 being Integer st b3 = b2 & 0 <= b3 holds
ex b4, b5 being Element of INT.Ring st
( b1 = (b4 * b2) + b5 & ( b5 = 0. INT.Ring or absint . b5 < absint . b2 ) )
proof end;

Lemma16: for b1, b2 being Element of INT.Ring st b2 <> 0. INT.Ring holds
for b3 being Integer st b3 = b2 & 0 <= b3 holds
ex b4, b5 being Element of INT.Ring st
( b1 = (b4 * b2) + b5 & 0. INT.Ring <= b5 & b5 < abs b2 )
proof end;

theorem Th2: :: INT_3:2
for b1, b2, b3, b4, b5, b6 being Element of INT.Ring st b2 <> 0. INT.Ring & b1 = (b3 * b2) + b5 & 0. INT.Ring <= b5 & b5 < abs b2 & b1 = (b4 * b2) + b6 & 0. INT.Ring <= b6 & b6 < abs b2 holds
( b3 = b4 & b5 = b6 )
proof end;

definition
let c2, c3 be Element of INT.Ring ;
assume E18: c3 <> 0. INT.Ring ;
func c1 div c2 -> Element of INT.Ring means :Def7: :: INT_3:def 7
ex b1 being Element of INT.Ring st
( a1 = (a3 * a2) + b1 & 0. INT.Ring <= b1 & b1 < abs a2 );
existence
ex b1, b2 being Element of INT.Ring st
( c2 = (b1 * c3) + b2 & 0. INT.Ring <= b2 & b2 < abs c3 )
proof end;
uniqueness
for b1, b2 being Element of INT.Ring st ex b3 being Element of INT.Ring st
( c2 = (b1 * c3) + b3 & 0. INT.Ring <= b3 & b3 < abs c3 ) & ex b3 being Element of INT.Ring st
( c2 = (b2 * c3) + b3 & 0. INT.Ring <= b3 & b3 < abs c3 ) holds
b1 = b2
by E18, Th2;
end;

:: deftheorem Def7 defines div INT_3:def 7 :
for b1, b2 being Element of INT.Ring st b2 <> 0. INT.Ring holds
for b3 being Element of INT.Ring holds
( b3 = b1 div b2 iff ex b4 being Element of INT.Ring st
( b1 = (b3 * b2) + b4 & 0. INT.Ring <= b4 & b4 < abs b2 ) );

definition
let c2, c3 be Element of INT.Ring ;
assume E19: c3 <> 0. INT.Ring ;
func c1 mod c2 -> Element of INT.Ring means :Def8: :: INT_3:def 8
ex b1 being Element of INT.Ring st
( a1 = (b1 * a2) + a3 & 0. INT.Ring <= a3 & a3 < abs a2 );
existence
ex b1, b2 being Element of INT.Ring st
( c2 = (b2 * c3) + b1 & 0. INT.Ring <= b1 & b1 < abs c3 )
proof end;
uniqueness
for b1, b2 being Element of INT.Ring st ex b3 being Element of INT.Ring st
( c2 = (b3 * c3) + b1 & 0. INT.Ring <= b1 & b1 < abs c3 ) & ex b3 being Element of INT.Ring st
( c2 = (b3 * c3) + b2 & 0. INT.Ring <= b2 & b2 < abs c3 ) holds
b1 = b2
by E19, Th2;
end;

:: deftheorem Def8 defines mod INT_3:def 8 :
for b1, b2 being Element of INT.Ring st b2 <> 0. INT.Ring holds
for b3 being Element of INT.Ring holds
( b3 = b1 mod b2 iff ex b4 being Element of INT.Ring st
( b1 = (b4 * b2) + b3 & 0. INT.Ring <= b3 & b3 < abs b2 ) );

theorem Th3: :: INT_3:3
for b1, b2 being Element of INT.Ring st b2 <> 0. INT.Ring holds
b1 = ((b1 div b2) * b2) + (b1 mod b2)
proof end;

definition
let c2 be non empty doubleLoopStr ;
attr a1 is Euclidian means :Def9: :: INT_3:def 9
ex b1 being Function of the carrier of a1, NAT st
for b2, b3 being Element of a1 st b3 <> 0. a1 holds
ex b4, b5 being Element of a1 st
( b2 = (b4 * b3) + b5 & ( b5 = 0. a1 or b1 . b5 < b1 . b3 ) );
end;

:: deftheorem Def9 defines Euclidian INT_3:def 9 :
for b1 being non empty doubleLoopStr holds
( b1 is Euclidian iff ex b2 being Function of the carrier of b1, NAT st
for b3, b4 being Element of b1 st b4 <> 0. b1 holds
ex b5, b6 being Element of b1 st
( b3 = (b5 * b4) + b6 & ( b6 = 0. b1 or b2 . b6 < b2 . b4 ) ) );

registration
cluster INT.Ring -> non empty unital associative commutative Abelian add-associative right_zeroed right_complementable strict distributive non degenerated domRing-like Euclidian ;
coherence
INT.Ring is Euclidian
proof end;
end;

Lemma21: for b1 being non empty associative commutative right_zeroed left_unital Field-like doubleLoopStr
for b2 being Function of the carrier of b1, NAT
for b3, b4 being Element of b1 st b4 <> 0. b1 holds
ex b5, b6 being Element of b1 st
( b3 = (b5 * b4) + b6 & ( b6 = 0. b1 or b2 . b6 < b2 . b4 ) )
proof end;

registration
cluster commutative strict non degenerated domRing-like Euclidian doubleLoopStr ;
existence
ex b1 being Ring st
( b1 is strict & b1 is Euclidian & b1 is domRing-like & not b1 is degenerated & b1 is distributive & b1 is commutative )
proof end;
end;

definition
mode EuclidianRing is commutative distributive non degenerated domRing-like Euclidian Ring;
end;

registration
cluster strict doubleLoopStr ;
existence
ex b1 being EuclidianRing st b1 is strict
proof end;
end;

definition
let c2 be non empty Euclidian doubleLoopStr ;
mode DegreeFunction of c1 -> Function of the carrier of a1, NAT means :Def10: :: INT_3:def 10
for b1, b2 being Element of a1 st b2 <> 0. a1 holds
ex b3, b4 being Element of a1 st
( b1 = (b3 * b2) + b4 & ( b4 = 0. a1 or a2 . b4 < a2 . b2 ) );
existence
ex b1 being Function of the carrier of c2, NAT st
for b2, b3 being Element of c2 st b3 <> 0. c2 holds
ex b4, b5 being Element of c2 st
( b2 = (b4 * b3) + b5 & ( b5 = 0. c2 or b1 . b5 < b1 . b3 ) )
by Def9;
end;

:: deftheorem Def10 defines DegreeFunction INT_3:def 10 :
for b1 being non empty Euclidian doubleLoopStr
for b2 being Function of the carrier of b1, NAT holds
( b2 is DegreeFunction of b1 iff for b3, b4 being Element of b1 st b4 <> 0. b1 holds
ex b5, b6 being Element of b1 st
( b3 = (b5 * b4) + b6 & ( b6 = 0. b1 or b2 . b6 < b2 . b4 ) ) );

theorem Th4: :: INT_3:4
for b1 being EuclidianRing holds b1 is gcdDomain
proof end;

registration
cluster non empty associative commutative Abelian add-associative right_zeroed right_complementable right-distributive right_unital non degenerated domRing-like Euclidian -> non empty associative commutative Abelian add-associative right_zeroed right_complementable right-distributive right_unital non degenerated domRing-like gcd-like doubleLoopStr ;
coherence
for b1 being non empty associative commutative Abelian add-associative right_zeroed right_complementable right-distributive right_unital non degenerated domRing-like doubleLoopStr st b1 is Euclidian holds
b1 is gcd-like
by Th4;
end;

definition
redefine func absint as absint -> DegreeFunction of INT.Ring ;
coherence
absint is DegreeFunction of INT.Ring
proof end;
end;

theorem Th5: :: INT_3:5
for b1 being non empty associative commutative right_zeroed left_unital Field-like doubleLoopStr holds b1 is Euclidian
proof end;

registration
cluster non empty associative commutative right_zeroed left_unital Field-like -> non empty Euclidian doubleLoopStr ;
coherence
for b1 being non empty doubleLoopStr st b1 is commutative & b1 is associative & b1 is left_unital & b1 is Field-like & b1 is right_zeroed & b1 is Field-like holds
b1 is Euclidian
by Th5;
end;

theorem Th6: :: INT_3:6
for b1 being non empty associative commutative right_zeroed left_unital Field-like doubleLoopStr
for b2 being Function of the carrier of b1, NAT holds b2 is DegreeFunction of b1
proof end;

theorem Th7: :: INT_3:7
canceled;

theorem Th8: :: INT_3:8
for b1, b2, b3 being Integer holds
( ( b1 <> 0 implies (b2 + (b1 * b3)) div b1 = (b2 div b1) + b3 ) & (b2 + (b1 * b3)) mod b1 = b2 mod b1 )
proof end;

theorem Th9: :: INT_3:9
for b1 being natural number st b1 > 0 holds
for b2 being Integer holds
( b2 mod b1 >= 0 & b2 mod b1 < b1 )
proof end;

theorem Th10: :: INT_3:10
for b1, b2 being Integer holds
( ( 0 <= b2 & b2 < b1 implies b2 mod b1 = b2 ) & ( 0 > b2 & b2 >= - b1 implies b2 mod b1 = b1 + b2 ) )
proof end;

theorem Th11: :: INT_3:11
for b1 being natural number st b1 > 0 holds
for b2 being Integer holds
( b2 mod b1 = 0 iff b1 divides b2 )
proof end;

theorem Th12: :: INT_3:12
for b1, b2, b3 being Integer holds
( ( b1 <> 0 & b2 mod b1 = b3 mod b1 implies b2,b3 are_congruent_mod b1 ) & ( b2,b3 are_congruent_mod b1 implies b2 mod b1 = b3 mod b1 ) )
proof end;

theorem Th13: :: INT_3:13
for b1 being natural number
for b2 being Integer holds (b2 mod b1) mod b1 = b2 mod b1
proof end;

theorem Th14: :: INT_3:14
for b1, b2, b3 being Integer holds (b2 + b3) mod b1 = ((b2 mod b1) + (b3 mod b1)) mod b1
proof end;

theorem Th15: :: INT_3:15
for b1, b2, b3 being Integer holds (b2 * b3) mod b1 = ((b2 mod b1) * (b3 mod b1)) mod b1
proof end;

theorem Th16: :: INT_3:16
for b1, b2 being Integer ex b3, b4 being Integer st b1 gcd b2 = (b3 * b1) + (b4 * b2)
proof end;

definition
let c2 be natural number ;
assume E34: c2 > 0 ;
func multint c1 -> BinOp of Segm a1 means :Def11: :: INT_3:def 11
for b1, b2 being Element of Segm a1 holds a2 . b1,b2 = (b1 * b2) mod a1;
existence
ex b1 being BinOp of Segm c2 st
for b2, b3 being Element of Segm c2 holds b1 . b2,b3 = (b2 * b3) mod c2
proof end;
uniqueness
for b1, b2 being BinOp of Segm c2 st ( for b3, b4 being Element of Segm c2 holds b1 . b3,b4 = (b3 * b4) mod c2 ) & ( for b3, b4 being Element of Segm c2 holds b2 . b3,b4 = (b3 * b4) mod c2 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def11 defines multint INT_3:def 11 :
for b1 being natural number st b1 > 0 holds
for b2 being BinOp of Segm b1 holds
( b2 = multint b1 iff for b3, b4 being Element of Segm b1 holds b2 . b3,b4 = (b3 * b4) mod b1 );

definition
let c2 be natural number ;
assume E35: c2 > 0 ;
func compint c1 -> UnOp of Segm a1 means :Def12: :: INT_3:def 12
for b1 being Element of Segm a1 holds a2 . b1 = (a1 - b1) mod a1;
existence
ex b1 being UnOp of Segm c2 st
for b2 being Element of Segm c2 holds b1 . b2 = (c2 - b2) mod c2
proof end;
uniqueness
for b1, b2 being UnOp of Segm c2 st ( for b3 being Element of Segm c2 holds b1 . b3 = (c2 - b3) mod c2 ) & ( for b3 being Element of Segm c2 holds b2 . b3 = (c2 - b3) mod c2 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def12 defines compint INT_3:def 12 :
for b1 being natural number st b1 > 0 holds
for b2 being UnOp of Segm b1 holds
( b2 = compint b1 iff for b3 being Element of Segm b1 holds b2 . b3 = (b1 - b3) mod b1 );

Lemma36: for b1 being natural number st b1 > 0 holds
for b2 being natural number st b2 < b1 holds
for b3 being natural number st b3 = b1 - b2 holds
(b1 - b2) mod b1 = b3 mod b1
proof end;

theorem Th17: :: INT_3:17
for b1 being natural number st b1 > 0 holds
for b2, b3 being Element of Segm b1 holds
( ( b2 + b3 < b1 implies (addint b1) . b2,b3 = b2 + b3 ) & ( (addint b1) . b2,b3 = b2 + b3 implies b2 + b3 < b1 ) & ( b2 + b3 >= b1 implies (addint b1) . b2,b3 = (b2 + b3) - b1 ) & ( (addint b1) . b2,b3 = (b2 + b3) - b1 implies b2 + b3 >= b1 ) )
proof end;

Lemma38: for b1, b2 being natural number st b2 <> 0 holds
ex b3 being Nat st
( b3 * b2 <= b1 & b1 < (b3 + 1) * b2 )
proof end;

theorem Th18: :: INT_3:18
for b1 being natural number st b1 > 0 holds
for b2, b3 being Element of Segm b1
for b4 being natural number holds
( ( b4 * b1 <= b2 * b3 & b2 * b3 < (b4 + 1) * b1 ) iff (multint b1) . b2,b3 = (b2 * b3) - (b4 * b1) )
proof end;

theorem Th19: :: INT_3:19
for b1 being natural number st b1 > 0 holds
for b2 being Element of Segm b1 holds
( ( b2 = 0 implies (compint b1) . b2 = 0 ) & ( (compint b1) . b2 = 0 implies b2 = 0 ) & ( b2 <> 0 implies (compint b1) . b2 = b1 - b2 ) & ( (compint b1) . b2 = b1 - b2 implies b2 <> 0 ) )
proof end;

definition
let c2 be natural number ;
func INT.Ring c1 -> doubleLoopStr equals :: INT_3:def 13
doubleLoopStr(# (Segm a1),(addint a1),(multint a1),(In 1,(Segm a1)),(In 0,(Segm a1)) #);
coherence
doubleLoopStr(# (Segm c2),(addint c2),(multint c2),(In 1,(Segm c2)),(In 0,(Segm c2)) #) is doubleLoopStr
;
end;

:: deftheorem Def13 defines INT.Ring INT_3:def 13 :
for b1 being natural number holds INT.Ring b1 = doubleLoopStr(# (Segm b1),(addint b1),(multint b1),(In 1,(Segm b1)),(In 0,(Segm b1)) #);

registration
let c2 be natural number ;
cluster INT.Ring a1 -> non empty strict ;
coherence
( INT.Ring c2 is strict & not INT.Ring c2 is empty )
proof end;
end;

theorem Th20: :: INT_3:20
( INT.Ring 1 is degenerated & INT.Ring 1 is Ring & INT.Ring 1 is Field-like & INT.Ring 1 is unital & INT.Ring 1 is distributive & INT.Ring 1 is commutative )
proof end;

registration
cluster unital commutative strict Field-like degenerated Euclidian doubleLoopStr ;
existence
ex b1 being Ring st
( b1 is strict & b1 is degenerated & b1 is unital & b1 is distributive & b1 is Field-like & b1 is commutative )
by Th20;
end;

E41: now
let c2, c3 be natural number ;
assume E42: c3 > 0 ;
assume c2 in Segm c3 ;
then c2 < c3 by E42, GR_CY_1:10;
then E43: c3 - c2 is Nat by INT_1:18;
assume c2 > 0 ;
then c3 - c2 < c3 - 0 by REAL_1:92;
hence c3 - c2 in Segm c3 by E43, GR_CY_1:10;
end;

Lemma42: for b1 being natural number st 0 < b1 holds
for b2, b3 being Element of (INT.Ring b1) st b2 = 1 holds
( b3 * b2 = b3 & b2 * b3 = b3 )
proof end;

E43: now
let c2 be natural number ;
assume E44: 1 < c2 ;
thus INT.Ring c2 is unital
proof
set c3 = INT.Ring c2;
reconsider c4 = 1 as Element of (INT.Ring c2) by E44, GR_CY_1:10;
take c4 ; :: according to GROUP_1:def 2
thus for b1 being Element of the carrier of (INT.Ring c2) holds
( b1 * c4 = b1 & c4 * b1 = b1 ) by E44, Lemma42;
end;
end;

Lemma44: for b1 being natural number st 1 < b1 holds
1. (INT.Ring b1) = 1
proof end;

theorem Th21: :: INT_3:21
for b1 being natural number st b1 > 1 holds
( not INT.Ring b1 is degenerated & INT.Ring b1 is unital commutative distributive Ring )
proof end;

Lemma46: for b1 being natural number st b1 > 0 holds
0. (INT.Ring b1) = 0
proof end;

theorem Th22: :: INT_3:22
for b1 being natural number st b1 > 1 holds
( INT.Ring b1 is non empty associative commutative Abelian add-associative right_zeroed right_complementable distributive left_unital Field-like non degenerated doubleLoopStr iff b1 is Prime )
proof end;

registration
let c2 be Prime;
cluster INT.Ring a1 -> non empty associative commutative Abelian add-associative right_zeroed right_complementable strict distributive left_unital Field-like non degenerated Euclidian ;
coherence
( INT.Ring c2 is add-associative & INT.Ring c2 is right_zeroed & INT.Ring c2 is right_complementable & INT.Ring c2 is Abelian & INT.Ring c2 is commutative & INT.Ring c2 is associative & INT.Ring c2 is left_unital & INT.Ring c2 is distributive & INT.Ring c2 is Field-like & not INT.Ring c2 is degenerated )
proof end;
end;

theorem Th23: :: INT_3:23
1. INT.Ring = 1 by Lemma6;

theorem Th24: :: INT_3:24
for b1 being natural number st 1 < b1 holds
1. (INT.Ring b1) = 1 by Lemma44;