:: RADIX_4 semantic presentation

theorem Th1: :: RADIX_4:1
for b1 being Nat st 2 <= b1 holds
2 < Radix b1
proof end;

Lemma2: for b1 being Nat
for b2 being Integer st b2 in b1 -SD_Sub_S holds
( b2 >= - (Radix (b1 -' 1)) & b2 <= (Radix (b1 -' 1)) - 1 )
proof end;

Lemma3: for b1, b2, b3, b4 being Nat st b4 in Seg b1 holds
DigA (DecSD b2,(b1 + 1),b3),b4 = DigA (DecSD b2,b1,b3),b4
proof end;

Lemma4: for b1, b2, b3 being Nat st b3 >= 1 & b2 is_represented_by b3 + 1,b1 holds
DigA (DecSD (b2 mod ((Radix b1) |^ b3)),b3,b1),b3 = DigA (DecSD b2,b3,b1),b3
proof end;

theorem Th2: :: RADIX_4:2
for b1, b2 being Integer
for b3 being Nat st 3 <= b3 holds
SDSub_Add_Carry ((SDSub_Add_Carry b1,b3) + (SDSub_Add_Carry b2,b3)),b3 = 0
proof end;

theorem Th3: :: RADIX_4:3
for b1, b2, b3 being Nat st 2 <= b1 holds
DigA_SDSub (SD2SDSub (DecSD b2,b3,b1)),(b3 + 1) = SDSub_Add_Carry (DigA (DecSD b2,b3,b1),b3),b1
proof end;

theorem Th4: :: RADIX_4:4
for b1, b2 being Nat st 2 <= b1 & b2 is_represented_by 1,b1 holds
DigA_SDSub (SD2SDSub (DecSD b2,1,b1)),(1 + 1) = SDSub_Add_Carry b2,b1
proof end;

theorem Th5: :: RADIX_4:5
for b1, b2, b3 being Nat st b3 >= 1 & b1 >= 3 & b2 is_represented_by b3 + 1,b1 holds
DigA_SDSub (SD2SDSub (DecSD (b2 mod ((Radix b1) |^ b3)),b3,b1)),(b3 + 1) = SDSub_Add_Carry (DigA (DecSD b2,b3,b1),b3),b1
proof end;

theorem Th6: :: RADIX_4:6
for b1, b2 being Nat st 2 <= b1 & b2 is_represented_by 1,b1 holds
DigA_SDSub (SD2SDSub (DecSD b2,1,b1)),1 = b2 - ((SDSub_Add_Carry b2,b1) * (Radix b1))
proof end;

theorem Th7: :: RADIX_4:7
for b1, b2, b3 being Nat st b3 >= 1 & b1 >= 2 & b2 is_represented_by b3 + 1,b1 holds
((Radix b1) |^ b3) * (DigA_SDSub (SD2SDSub (DecSD b2,(b3 + 1),b1)),(b3 + 1)) = ((((Radix b1) |^ b3) * (DigA (DecSD b2,(b3 + 1),b1),(b3 + 1))) - (((Radix b1) |^ (b3 + 1)) * (SDSub_Add_Carry (DigA (DecSD b2,(b3 + 1),b1),(b3 + 1)),b1))) + (((Radix b1) |^ b3) * (SDSub_Add_Carry (DigA (DecSD b2,(b3 + 1),b1),b3),b1))
proof end;

definition
let c1, c2, c3 be Nat;
let c4, c5 be Tuple of c2,(c3 -SD_Sub );
assume E11: ( c1 in Seg c2 & c3 >= 2 ) ;
func SDSubAddDigit c4,c5,c1,c3 -> Element of a3 -SD_Sub equals :Def1: :: RADIX_4:def 1
(SDSub_Add_Data ((DigA_SDSub a4,a1) + (DigA_SDSub a5,a1)),a3) + (SDSub_Add_Carry ((DigA_SDSub a4,(a1 -' 1)) + (DigA_SDSub a5,(a1 -' 1))),a3);
coherence
(SDSub_Add_Data ((DigA_SDSub c4,c1) + (DigA_SDSub c5,c1)),c3) + (SDSub_Add_Carry ((DigA_SDSub c4,(c1 -' 1)) + (DigA_SDSub c5,(c1 -' 1))),c3) is Element of c3 -SD_Sub
proof end;
end;

:: deftheorem Def1 defines SDSubAddDigit RADIX_4:def 1 :
for b1, b2, b3 being Nat
for b4, b5 being Tuple of b2,(b3 -SD_Sub ) st b1 in Seg b2 & b3 >= 2 holds
SDSubAddDigit b4,b5,b1,b3 = (SDSub_Add_Data ((DigA_SDSub b4,b1) + (DigA_SDSub b5,b1)),b3) + (SDSub_Add_Carry ((DigA_SDSub b4,(b1 -' 1)) + (DigA_SDSub b5,(b1 -' 1))),b3);

definition
let c1, c2 be Nat;
let c3, c4 be Tuple of c1,(c2 -SD_Sub );
func c3 '+' c4 -> Tuple of a1,(a2 -SD_Sub ) means :Def2: :: RADIX_4:def 2
for b1 being Nat st b1 in Seg a1 holds
DigA_SDSub a5,b1 = SDSubAddDigit a3,a4,b1,a2;
existence
ex b1 being Tuple of c1,(c2 -SD_Sub ) st
for b2 being Nat st b2 in Seg c1 holds
DigA_SDSub b1,b2 = SDSubAddDigit c3,c4,b2,c2
proof end;
uniqueness
for b1, b2 being Tuple of c1,(c2 -SD_Sub ) st ( for b3 being Nat st b3 in Seg c1 holds
DigA_SDSub b1,b3 = SDSubAddDigit c3,c4,b3,c2 ) & ( for b3 being Nat st b3 in Seg c1 holds
DigA_SDSub b2,b3 = SDSubAddDigit c3,c4,b3,c2 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines '+' RADIX_4:def 2 :
for b1, b2 being Nat
for b3, b4, b5 being Tuple of b1,(b2 -SD_Sub ) holds
( b5 = b3 '+' b4 iff for b6 being Nat st b6 in Seg b1 holds
DigA_SDSub b5,b6 = SDSubAddDigit b3,b4,b6,b2 );

theorem Th8: :: RADIX_4:8
for b1, b2, b3, b4, b5 being Nat st b5 in Seg b1 & 2 <= b2 holds
SDSubAddDigit (SD2SDSub (DecSD b3,(b1 + 1),b2)),(SD2SDSub (DecSD b4,(b1 + 1),b2)),b5,b2 = SDSubAddDigit (SD2SDSub (DecSD (b3 mod ((Radix b2) |^ b1)),b1,b2)),(SD2SDSub (DecSD (b4 mod ((Radix b2) |^ b1)),b1,b2)),b5,b2
proof end;

theorem Th9: :: RADIX_4:9
for b1 being Nat st b1 >= 1 holds
for b2, b3, b4 being Nat st b2 >= 3 & b3 is_represented_by b1,b2 & b4 is_represented_by b1,b2 holds
b3 + b4 = SDSub2IntOut ((SD2SDSub (DecSD b3,b1,b2)) '+' (SD2SDSub (DecSD b4,b1,b2)))
proof end;