:: NAT_3 semantic presentation

Lemma1: for b1 being natural number
for b2 being set st b2 in Seg b1 holds
b2 is Nat
;

registration
let c1 be empty set ;
cluster Card a1 -> empty ;
coherence
card c1 is empty
by CARD_1:47;
end;

registration
cluster natural-yielding -> real-yielding set ;
coherence
for b1 being Relation st b1 is natural-yielding holds
b1 is real-yielding
proof end;
end;

registration
cluster real-yielding natural-yielding set ;
existence
ex b1 being FinSequence st b1 is natural-yielding
proof end;
end;

registration
let c1 be non empty natural number ;
let c2 be natural number ;
cluster a1 |^ a2 -> non empty ;
coherence
not c1 |^ c2 is empty
proof end;
end;

registration
cluster -> non empty Element of NAT ;
coherence
for b1 being Prime holds not b1 is empty
proof end;
end;

theorem Th1: :: NAT_3:1
for b1, b2, b3, b4 being natural number st b1 divides b3 & b2 divides b4 holds
b1 * b2 divides b3 * b4
proof end;

theorem Th2: :: NAT_3:2
for b1, b2 being natural number st 1 < b1 holds
b2 <= b1 |^ b2
proof end;

theorem Th3: :: NAT_3:3
for b1, b2 being natural number st b1 <> 0 holds
b2 divides b2 |^ b1
proof end;

theorem Th4: :: NAT_3:4
for b1, b2, b3, b4 being natural number st b1 < b2 & b3 |^ b2 divides b4 holds
b3 |^ (b1 + 1) divides b4
proof end;

theorem Th5: :: NAT_3:5
for b1, b2 being natural number
for b3 being Prime st b3 divides b1 |^ b2 holds
b3 divides b1
proof end;

theorem Th6: :: NAT_3:6
for b1 being natural number
for b2, b3 being Prime st b3 divides b2 |^ b1 holds
b3 = b2
proof end;

theorem Th7: :: NAT_3:7
for b1 being natural number
for b2 being FinSequence of NAT st b1 in rng b2 holds
b1 divides Product b2
proof end;

theorem Th8: :: NAT_3:8
for b1 being Prime
for b2 being FinSequence of SetPrimes st b1 divides Product b2 holds
b1 in rng b2
proof end;

definition
let c1 be real-yielding FinSequence;
let c2 be natural number ;
func c1 |^ c2 -> FinSequence means :Def1: :: NAT_3:def 1
( len a3 = len a1 & ( for b1 being set st b1 in dom a3 holds
a3 . b1 = (a1 . b1) |^ a2 ) );
existence
ex b1 being FinSequence st
( len b1 = len c1 & ( for b2 being set st b2 in dom b1 holds
b1 . b2 = (c1 . b2) |^ c2 ) )
proof end;
uniqueness
for b1, b2 being FinSequence st len b1 = len c1 & ( for b3 being set st b3 in dom b1 holds
b1 . b3 = (c1 . b3) |^ c2 ) & len b2 = len c1 & ( for b3 being set st b3 in dom b2 holds
b2 . b3 = (c1 . b3) |^ c2 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def1 defines |^ NAT_3:def 1 :
for b1 being real-yielding FinSequence
for b2 being natural number
for b3 being FinSequence holds
( b3 = b1 |^ b2 iff ( len b3 = len b1 & ( for b4 being set st b4 in dom b3 holds
b3 . b4 = (b1 . b4) |^ b2 ) ) );

registration
let c1 be real-yielding FinSequence;
let c2 be natural number ;
cluster a1 |^ a2 -> real-yielding ;
coherence
c1 |^ c2 is real-yielding
proof end;
end;

registration
let c1 be natural-yielding FinSequence;
let c2 be natural number ;
cluster a1 |^ a2 -> real-yielding natural-yielding ;
coherence
c1 |^ c2 is natural-yielding
proof end;
end;

definition
let c1 be FinSequence of REAL ;
let c2 be natural number ;
redefine func |^ as c1 |^ c2 -> FinSequence of REAL ;
coherence
c1 |^ c2 is FinSequence of REAL
proof end;
end;

definition
let c1 be FinSequence of NAT ;
let c2 be natural number ;
redefine func |^ as c1 |^ c2 -> FinSequence of NAT ;
coherence
c1 |^ c2 is FinSequence of NAT
proof end;
end;

theorem Th9: :: NAT_3:9
for b1 being FinSequence of REAL holds b1 |^ 0 = (len b1) |-> 1
proof end;

theorem Th10: :: NAT_3:10
for b1 being FinSequence of REAL holds b1 |^ 1 = b1
proof end;

theorem Th11: :: NAT_3:11
for b1 being natural number holds (<*> REAL ) |^ b1 = <*> REAL
proof end;

theorem Th12: :: NAT_3:12
for b1 being natural number
for b2 being Real holds <*b2*> |^ b1 = <*(b2 |^ b1)*>
proof end;

theorem Th13: :: NAT_3:13
for b1 being natural number
for b2 being Real
for b3 being FinSequence of REAL holds (b3 ^ <*b2*>) |^ b1 = (b3 |^ b1) ^ (<*b2*> |^ b1)
proof end;

theorem Th14: :: NAT_3:14
for b1 being natural number
for b2 being FinSequence of REAL holds Product (b2 |^ (b1 + 1)) = (Product (b2 |^ b1)) * (Product b2)
proof end;

theorem Th15: :: NAT_3:15
for b1 being natural number
for b2 being FinSequence of REAL holds Product (b2 |^ b1) = (Product b2) |^ b1
proof end;

registration
let c1 be set ;
cluster real-yielding natural-yielding finite-support ManySortedSet of a1;
existence
ex b1 being ManySortedSet of c1 st
( b1 is natural-yielding & b1 is finite-support )
proof end;
end;

definition
let c1 be set ;
let c2 be real-yielding ManySortedSet of c1;
let c3 be natural number ;
func c3 * c2 -> ManySortedSet of a1 means :Def2: :: NAT_3:def 2
for b1 being set holds a4 . b1 = a3 * (a2 . b1);
existence
ex b1 being ManySortedSet of c1 st
for b2 being set holds b1 . b2 = c3 * (c2 . b2)
proof end;
uniqueness
for b1, b2 being ManySortedSet of c1 st ( for b3 being set holds b1 . b3 = c3 * (c2 . b3) ) & ( for b3 being set holds b2 . b3 = c3 * (c2 . b3) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines * NAT_3:def 2 :
for b1 being set
for b2 being real-yielding ManySortedSet of b1
for b3 being natural number
for b4 being ManySortedSet of b1 holds
( b4 = b3 * b2 iff for b5 being set holds b4 . b5 = b3 * (b2 . b5) );

registration
let c1 be set ;
let c2 be real-yielding ManySortedSet of c1;
let c3 be natural number ;
cluster a3 * a2 -> real-yielding ;
coherence
c3 * c2 is real-yielding
proof end;
end;

registration
let c1 be set ;
let c2 be natural-yielding ManySortedSet of c1;
let c3 be natural number ;
cluster a3 * a2 -> real-yielding natural-yielding ;
coherence
c3 * c2 is natural-yielding
proof end;
end;

registration
let c1 be set ;
let c2 be real-yielding ManySortedSet of c1;
cluster support (0 * a2) -> empty ;
coherence
support (0 * c2) is empty
proof end;
end;

theorem Th16: :: NAT_3:16
for b1 being natural number
for b2 being set
for b3 being real-yielding ManySortedSet of b2 st b1 <> 0 holds
support b3 = support (b1 * b3)
proof end;

registration
let c1 be set ;
let c2 be real-yielding finite-support ManySortedSet of c1;
let c3 be natural number ;
cluster a3 * a2 -> real-yielding finite-support ;
coherence
c3 * c2 is finite-support
proof end;
end;

definition
let c1 be set ;
let c2, c3 be real-yielding ManySortedSet of c1;
func min c2,c3 -> ManySortedSet of a1 means :Def3: :: NAT_3:def 3
for b1 being set holds
( ( a2 . b1 <= a3 . b1 implies a4 . b1 = a2 . b1 ) & ( a2 . b1 > a3 . b1 implies a4 . b1 = a3 . b1 ) );
existence
ex b1 being ManySortedSet of c1 st
for b2 being set holds
( ( c2 . b2 <= c3 . b2 implies b1 . b2 = c2 . b2 ) & ( c2 . b2 > c3 . b2 implies b1 . b2 = c3 . b2 ) )
proof end;
uniqueness
for b1, b2 being ManySortedSet of c1 st ( for b3 being set holds
( ( c2 . b3 <= c3 . b3 implies b1 . b3 = c2 . b3 ) & ( c2 . b3 > c3 . b3 implies b1 . b3 = c3 . b3 ) ) ) & ( for b3 being set holds
( ( c2 . b3 <= c3 . b3 implies b2 . b3 = c2 . b3 ) & ( c2 . b3 > c3 . b3 implies b2 . b3 = c3 . b3 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def3 defines min NAT_3:def 3 :
for b1 being set
for b2, b3 being real-yielding ManySortedSet of b1
for b4 being ManySortedSet of b1 holds
( b4 = min b2,b3 iff for b5 being set holds
( ( b2 . b5 <= b3 . b5 implies b4 . b5 = b2 . b5 ) & ( b2 . b5 > b3 . b5 implies b4 . b5 = b3 . b5 ) ) );

registration
let c1 be set ;
let c2, c3 be real-yielding ManySortedSet of c1;
cluster min a2,a3 -> real-yielding ;
coherence
min c2,c3 is real-yielding
proof end;
end;

registration
let c1 be set ;
let c2, c3 be natural-yielding ManySortedSet of c1;
cluster min a2,a3 -> real-yielding natural-yielding ;
coherence
min c2,c3 is natural-yielding
proof end;
end;

theorem Th17: :: NAT_3:17
for b1 being set
for b2, b3 being real-yielding finite-support ManySortedSet of b1 holds support (min b2,b3) c= (support b2) \/ (support b3)
proof end;

registration
let c1 be set ;
let c2, c3 be real-yielding finite-support ManySortedSet of c1;
cluster min a2,a3 -> real-yielding finite-support ;
coherence
min c2,c3 is finite-support
proof end;
end;

definition
let c1 be set ;
let c2, c3 be real-yielding ManySortedSet of c1;
func max c2,c3 -> ManySortedSet of a1 means :Def4: :: NAT_3:def 4
for b1 being set holds
( ( a2 . b1 <= a3 . b1 implies a4 . b1 = a3 . b1 ) & ( a2 . b1 > a3 . b1 implies a4 . b1 = a2 . b1 ) );
existence
ex b1 being ManySortedSet of c1 st
for b2 being set holds
( ( c2 . b2 <= c3 . b2 implies b1 . b2 = c3 . b2 ) & ( c2 . b2 > c3 . b2 implies b1 . b2 = c2 . b2 ) )
proof end;
uniqueness
for b1, b2 being ManySortedSet of c1 st ( for b3 being set holds
( ( c2 . b3 <= c3 . b3 implies b1 . b3 = c3 . b3 ) & ( c2 . b3 > c3 . b3 implies b1 . b3 = c2 . b3 ) ) ) & ( for b3 being set holds
( ( c2 . b3 <= c3 . b3 implies b2 . b3 = c3 . b3 ) & ( c2 . b3 > c3 . b3 implies b2 . b3 = c2 . b3 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def4 defines max NAT_3:def 4 :
for b1 being set
for b2, b3 being real-yielding ManySortedSet of b1
for b4 being ManySortedSet of b1 holds
( b4 = max b2,b3 iff for b5 being set holds
( ( b2 . b5 <= b3 . b5 implies b4 . b5 = b3 . b5 ) & ( b2 . b5 > b3 . b5 implies b4 . b5 = b2 . b5 ) ) );

registration
let c1 be set ;
let c2, c3 be real-yielding ManySortedSet of c1;
cluster max a2,a3 -> real-yielding ;
coherence
max c2,c3 is real-yielding
proof end;
end;

registration
let c1 be set ;
let c2, c3 be natural-yielding ManySortedSet of c1;
cluster max a2,a3 -> real-yielding natural-yielding ;
coherence
max c2,c3 is natural-yielding
proof end;
end;

theorem Th18: :: NAT_3:18
for b1 being set
for b2, b3 being real-yielding finite-support ManySortedSet of b1 holds support (max b2,b3) c= (support b2) \/ (support b3)
proof end;

registration
let c1 be set ;
let c2, c3 be real-yielding finite-support ManySortedSet of c1;
cluster max a2,a3 -> real-yielding finite-support ;
coherence
max c2,c3 is finite-support
proof end;
end;

definition
let c1 be set ;
let c2 be bag of c1;
func Product c2 -> natural number means :Def5: :: NAT_3:def 5
ex b1 being FinSequence of NAT st
( a3 = Product b1 & b1 = a2 * (canFS (support a2)) );
existence
ex b1 being natural number ex b2 being FinSequence of NAT st
( b1 = Product b2 & b2 = c2 * (canFS (support c2)) )
proof end;
uniqueness
for b1, b2 being natural number st ex b3 being FinSequence of NAT st
( b1 = Product b3 & b3 = c2 * (canFS (support c2)) ) & ex b3 being FinSequence of NAT st
( b2 = Product b3 & b3 = c2 * (canFS (support c2)) ) holds
b1 = b2
;
end;

:: deftheorem Def5 defines Product NAT_3:def 5 :
for b1 being set
for b2 being bag of b1
for b3 being natural number holds
( b3 = Product b2 iff ex b4 being FinSequence of NAT st
( b3 = Product b4 & b4 = b2 * (canFS (support b2)) ) );

definition
let c1 be set ;
let c2 be bag of c1;
redefine func Product as Product c2 -> Nat;
coherence
Product c2 is Nat
by ORDINAL2:def 21;
end;

theorem Th19: :: NAT_3:19
for b1 being set
for b2, b3 being bag of b1 st support b2 misses support b3 holds
Product (b2 + b3) = (Product b2) * (Product b3)
proof end;

definition
let c1 be set ;
let c2 be real-yielding ManySortedSet of c1;
let c3 be non empty natural number ;
func c2 |^ c3 -> ManySortedSet of a1 means :Def6: :: NAT_3:def 6
( support a4 = support a2 & ( for b1 being set holds a4 . b1 = (a2 . b1) |^ a3 ) );
existence
ex b1 being ManySortedSet of c1 st
( support b1 = support c2 & ( for b2 being set holds b1 . b2 = (c2 . b2) |^ c3 ) )
proof end;
uniqueness
for b1, b2 being ManySortedSet of c1 st support b1 = support c2 & ( for b3 being set holds b1 . b3 = (c2 . b3) |^ c3 ) & support b2 = support c2 & ( for b3 being set holds b2 . b3 = (c2 . b3) |^ c3 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def6 defines |^ NAT_3:def 6 :
for b1 being set
for b2 being real-yielding ManySortedSet of b1
for b3 being non empty natural number
for b4 being ManySortedSet of b1 holds
( b4 = b2 |^ b3 iff ( support b4 = support b2 & ( for b5 being set holds b4 . b5 = (b2 . b5) |^ b3 ) ) );

registration
let c1 be set ;
let c2 be natural-yielding ManySortedSet of c1;
let c3 be non empty natural number ;
cluster a2 |^ a3 -> real-yielding natural-yielding ;
coherence
c2 |^ c3 is natural-yielding
proof end;
end;

registration
let c1 be set ;
let c2 be real-yielding finite-support ManySortedSet of c1;
let c3 be non empty natural number ;
cluster a2 |^ a3 -> finite-support ;
coherence
c2 |^ c3 is finite-support
proof end;
end;

theorem Th20: :: NAT_3:20
for b1 being set holds Product (EmptyBag b1) = 1
proof end;

definition
let c1, c2 be natural number ;
assume that
E24: c2 <> 1 and
E25: c1 <> 0 ;
func c2 |-count c1 -> Nat means :Def7: :: NAT_3:def 7
( a2 |^ a3 divides a1 & not a2 |^ (a3 + 1) divides a1 );
existence
ex b1 being Nat st
( c2 |^ b1 divides c1 & not c2 |^ (b1 + 1) divides c1 )
proof end;
uniqueness
for b1, b2 being Nat st c2 |^ b1 divides c1 & not c2 |^ (b1 + 1) divides c1 & c2 |^ b2 divides c1 & not c2 |^ (b2 + 1) divides c1 holds
b1 = b2
proof end;
end;

:: deftheorem Def7 defines |-count NAT_3:def 7 :
for b1, b2 being natural number st b2 <> 1 & b1 <> 0 holds
for b3 being Nat holds
( b3 = b2 |-count b1 iff ( b2 |^ b3 divides b1 & not b2 |^ (b3 + 1) divides b1 ) );

theorem Th21: :: NAT_3:21
for b1 being natural number st b1 <> 1 holds
b1 |-count 1 = 0
proof end;

theorem Th22: :: NAT_3:22
for b1 being natural number st 1 < b1 holds
b1 |-count b1 = 1
proof end;

theorem Th23: :: NAT_3:23
for b1, b2 being natural number st b1 <> 0 & b1 < b2 & b2 <> 1 holds
b2 |-count b1 = 0
proof end;

theorem Th24: :: NAT_3:24
for b1 being natural number
for b2 being Prime st b1 <> 1 & b1 <> b2 holds
b1 |-count b2 = 0
proof end;

theorem Th25: :: NAT_3:25
for b1, b2 being natural number st 1 < b1 holds
b1 |-count (b1 |^ b2) = b2
proof end;

theorem Th26: :: NAT_3:26
for b1, b2 being natural number st b1 <> 1 & b2 <> 0 & b1 divides b1 |^ (b1 |-count b2) holds
b1 divides b2
proof end;

theorem Th27: :: NAT_3:27
for b1, b2 being natural number st b1 <> 1 holds
( ( b2 <> 0 & b1 |-count b2 = 0 ) iff not b1 divides b2 )
proof end;

theorem Th28: :: NAT_3:28
for b1 being Prime
for b2, b3 being non empty natural number holds b1 |-count (b2 * b3) = (b1 |-count b2) + (b1 |-count b3)
proof end;

theorem Th29: :: NAT_3:29
for b1 being Prime
for b2, b3 being non empty natural number holds b1 |^ (b1 |-count (b2 * b3)) = (b1 |^ (b1 |-count b2)) * (b1 |^ (b1 |-count b3))
proof end;

theorem Th30: :: NAT_3:30
for b1 being Prime
for b2, b3 being non empty natural number st b3 divides b2 holds
b1 |-count b3 <= b1 |-count b2
proof end;

theorem Th31: :: NAT_3:31
for b1 being Prime
for b2, b3 being non empty natural number st b3 divides b2 holds
b1 |-count (b2 div b3) = (b1 |-count b2) -' (b1 |-count b3)
proof end;

theorem Th32: :: NAT_3:32
for b1 being natural number
for b2 being Prime
for b3 being non empty natural number holds b2 |-count (b3 |^ b1) = b1 * (b2 |-count b3)
proof end;

definition
let c1 be natural number ;
func prime_exponents c1 -> ManySortedSet of SetPrimes means :Def8: :: NAT_3:def 8
for b1 being Prime holds a2 . b1 = b1 |-count a1;
existence
ex b1 being ManySortedSet of SetPrimes st
for b2 being Prime holds b1 . b2 = b2 |-count c1
proof end;
uniqueness
for b1, b2 being ManySortedSet of SetPrimes st ( for b3 being Prime holds b1 . b3 = b3 |-count c1 ) & ( for b3 being Prime holds b2 . b3 = b3 |-count c1 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def8 defines prime_exponents NAT_3:def 8 :
for b1 being natural number
for b2 being ManySortedSet of SetPrimes holds
( b2 = prime_exponents b1 iff for b3 being Prime holds b2 . b3 = b3 |-count b1 );

notation
let c1 be natural number ;
synonym pfexp c1 for prime_exponents c1;
end;

theorem Th33: :: NAT_3:33
for b1 being natural number
for b2 being set st b2 in dom (pfexp b1) holds
b2 is Prime
proof end;

theorem Th34: :: NAT_3:34
for b1 being natural number
for b2 being set st b2 in support (pfexp b1) holds
b2 is Prime
proof end;

theorem Th35: :: NAT_3:35
for b1, b2 being natural number st b1 > b2 & b2 <> 0 holds
(pfexp b2) . b1 = 0
proof end;

registration
let c1 be natural number ;
cluster prime_exponents a1 -> real-yielding natural-yielding ;
coherence
pfexp c1 is natural-yielding
proof end;
end;

theorem Th36: :: NAT_3:36
for b1, b2 being natural number st b1 in support (pfexp b2) holds
b1 divides b2
proof end;

theorem Th37: :: NAT_3:37
for b1, b2 being natural number st not b1 is empty & b2 is Prime & b2 divides b1 holds
b2 in support (pfexp b1)
proof end;

registration
let c1 be non empty natural number ;
cluster prime_exponents a1 -> real-yielding natural-yielding finite-support ;
coherence
pfexp c1 is finite-support
proof end;
end;

theorem Th38: :: NAT_3:38
for b1 being Prime
for b2 being non empty natural number st b1 divides b2 holds
(pfexp b2) . b1 <> 0
proof end;

theorem Th39: :: NAT_3:39
pfexp 1 = EmptyBag SetPrimes
proof end;

registration
cluster support (pfexp 1) -> empty ;
coherence
support (pfexp 1) is empty
proof end;
end;

theorem Th40: :: NAT_3:40
for b1 being natural number
for b2 being Prime holds (pfexp (b2 |^ b1)) . b2 = b1
proof end;

theorem Th41: :: NAT_3:41
for b1 being Prime holds (pfexp b1) . b1 = 1
proof end;

theorem Th42: :: NAT_3:42
for b1 being natural number
for b2 being Prime st b1 <> 0 holds
support (pfexp (b2 |^ b1)) = {b2}
proof end;

theorem Th43: :: NAT_3:43
for b1 being Prime holds support (pfexp b1) = {b1}
proof end;

registration
let c1 be Prime;
let c2 be non empty natural number ;
cluster support (pfexp (a1 |^ a2)) -> non empty trivial ;
coherence
( not support (pfexp (c1 |^ c2)) is empty & support (pfexp (c1 |^ c2)) is trivial )
proof end;
end;

registration
let c1 be Prime;
cluster support (pfexp a1) -> non empty trivial ;
coherence
( not support (pfexp c1) is empty & support (pfexp c1) is trivial )
proof end;
end;

theorem Th44: :: NAT_3:44
for b1, b2 being non empty Nat st b1,b2 are_relative_prime holds
support (pfexp b1) misses support (pfexp b2)
proof end;

theorem Th45: :: NAT_3:45
for b1, b2 being non empty natural number holds support (pfexp b1) c= support (pfexp (b1 * b2))
proof end;

theorem Th46: :: NAT_3:46
for b1, b2 being non empty Nat holds support (pfexp (b1 * b2)) = (support (pfexp b1)) \/ (support (pfexp b2))
proof end;

theorem Th47: :: NAT_3:47
for b1, b2 being non empty Nat st b1,b2 are_relative_prime holds
card (support (pfexp (b1 * b2))) = (card (support (pfexp b1))) + (card (support (pfexp b2)))
proof end;

theorem Th48: :: NAT_3:48
for b1, b2 being non empty natural number holds support (pfexp b1) = support (pfexp (b1 |^ b2))
proof end;

theorem Th49: :: NAT_3:49
for b1, b2 being non empty natural number holds pfexp (b1 * b2) = (pfexp b1) + (pfexp b2)
proof end;

theorem Th50: :: NAT_3:50
for b1, b2 being non empty natural number st b1 divides b2 holds
pfexp (b2 div b1) = (pfexp b2) -' (pfexp b1)
proof end;

theorem Th51: :: NAT_3:51
for b1 being natural number
for b2 being non empty natural number holds pfexp (b2 |^ b1) = b1 * (pfexp b2)
proof end;

theorem Th52: :: NAT_3:52
for b1 being non empty natural number st support (pfexp b1) = {} holds
b1 = 1
proof end;

theorem Th53: :: NAT_3:53
for b1, b2 being non empty Nat holds pfexp (b2 hcf b1) = min (pfexp b2),(pfexp b1)
proof end;

theorem Th54: :: NAT_3:54
for b1, b2 being non empty Nat holds pfexp (b2 lcm b1) = max (pfexp b2),(pfexp b1)
proof end;

definition
let c1 be non empty natural number ;
func prime_factorization c1 -> ManySortedSet of SetPrimes means :Def9: :: NAT_3:def 9
( support a2 = support (pfexp a1) & ( for b1 being natural number st b1 in support (pfexp a1) holds
a2 . b1 = b1 |^ (b1 |-count a1) ) );
existence
ex b1 being ManySortedSet of SetPrimes st
( support b1 = support (pfexp c1) & ( for b2 being natural number st b2 in support (pfexp c1) holds
b1 . b2 = b2 |^ (b2 |-count c1) ) )
proof end;
uniqueness
for b1, b2 being ManySortedSet of SetPrimes st support b1 = support (pfexp c1) & ( for b3 being natural number st b3 in support (pfexp c1) holds
b1 . b3 = b3 |^ (b3 |-count c1) ) & support b2 = support (pfexp c1) & ( for b3 being natural number st b3 in support (pfexp c1) holds
b2 . b3 = b3 |^ (b3 |-count c1) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def9 defines prime_factorization NAT_3:def 9 :
for b1 being non empty natural number
for b2 being ManySortedSet of SetPrimes holds
( b2 = prime_factorization b1 iff ( support b2 = support (pfexp b1) & ( for b3 being natural number st b3 in support (pfexp b1) holds
b2 . b3 = b3 |^ (b3 |-count b1) ) ) );

notation
let c1 be non empty natural number ;
synonym ppf c1 for prime_factorization c1;
end;

registration
let c1 be non empty natural number ;
cluster prime_factorization a1 -> real-yielding natural-yielding finite-support ;
coherence
( ppf c1 is natural-yielding & ppf c1 is finite-support )
proof end;
end;

theorem Th55: :: NAT_3:55
for b1 being Prime
for b2 being non empty natural number st b1 |-count b2 = 0 holds
(ppf b2) . b1 = 0
proof end;

theorem Th56: :: NAT_3:56
for b1 being Prime
for b2 being non empty natural number st b1 |-count b2 <> 0 holds
(ppf b2) . b1 = b1 |^ (b1 |-count b2)
proof end;

theorem Th57: :: NAT_3:57
for b1 being non empty natural number st support (ppf b1) = {} holds
b1 = 1
proof end;

theorem Th58: :: NAT_3:58
for b1, b2 being non empty Nat st b1,b2 are_relative_prime holds
ppf (b1 * b2) = (ppf b1) + (ppf b2)
proof end;

theorem Th59: :: NAT_3:59
for b1 being Prime
for b2 being non empty natural number holds (ppf (b1 |^ b2)) . b1 = b1 |^ b2
proof end;

theorem Th60: :: NAT_3:60
for b1, b2 being non empty natural number holds ppf (b1 |^ b2) = (ppf b1) |^ b2
proof end;

theorem Th61: :: NAT_3:61
for b1 being non empty natural number holds Product (ppf b1) = b1
proof end;