reserve i,n,m,k,x for Nat,
  i1,i2 for Integer;
reserve a for Tuple of n,k-SD;
reserve aSub for Tuple of n,k-SD_Sub;

theorem
  2 <= k & i1 in k-SD & i2 in k-SD_Sub implies SDSub_Add_Data(i1+i2,k)
  in k-SD_Sub_S
proof
  assume that
A1: 2 <= k and
A2: i1 in k-SD & i2 in k-SD_Sub;
  set z = i1+i2;
  i1 <= Radix(k) - 1 & i2 <= Radix(k-'1) by A2,Th1,RADIX_1:13;
  then
A3: z <= Radix(k) - 1 + Radix(k-'1) by XREAL_1:7;
  -Radix(k) + 1 <= i1 & -Radix(k-'1) - 1 <= i2 by A2,Th1,RADIX_1:13;
  then
A4: -Radix(k) + 1 + ( -Radix(k-'1) - 1 ) <= z by XREAL_1:7;
A5: SDSub_Add_Data(z,k) >= -Radix(k-'1) & SDSub_Add_Data(z,k) <= Radix(k-'1)
  - 1
  proof
    now
      per cases;
      case
A6:     z < -Radix(k -' 1);
        then z + 1 <= -Radix(k-'1) by INT_1:7;
        then z <= -Radix(k-'1) - 1 by XREAL_1:19;
        then z <= -Radix(k-'1) + -1;
        then z <= -Radix(k) + Radix(k-'1) + -1 by A1,Lm3,XXREAL_0:2;
        then
A7:     z <= -Radix(k) + (Radix(k-'1) + -1);
        -Radix(k-'1) + -Radix(k) <= z + 0 by A4;
        then
A8:     -Radix(k-'1) - 0 <= z - (-Radix(k)) by XREAL_1:21;
        SDSub_Add_Carry(z,k) = -1 by A6,Def3;
        hence thesis by A8,A7,XREAL_1:20;
      end;
      case
A9:     -Radix(k -' 1) <= z & z < Radix(k -' 1);
        then SDSub_Add_Carry(z,k) = 0 & z + 1 <= Radix(k -' 1) by Def3,INT_1:7;
        hence thesis by A9,XREAL_1:19;
      end;
      case
A10:    Radix(k -' 1) <= z;
        then Radix(k) - Radix(k-'1) <= z by A1,Lm2,XXREAL_0:2;
        then
A11:    Radix(k) + -Radix(k-'1) <= z;
A12:    z <= Radix(k) + (Radix(k-'1) - 1) by A3;
        SDSub_Add_Carry(z,k) = 1 by A10,Def3;
        hence thesis by A11,A12,XREAL_1:19,20;
      end;
    end;
    hence thesis;
  end;
  SDSub_Add_Data(z,k) is Element of INT by INT_1:def 2;
  hence thesis by A5;
end;
