
theorem LM240:
  for x,y be Element of BOOLEAN*
  holds BL2Nat.(x+y) = BL2Nat.x + BL2Nat.y
  proof
    let x,y be Element of BOOLEAN*;
    XP1: BL2Nat.x = ExAbsval(x) by Def110;
    XP2: BL2Nat.y = ExAbsval(y) by Def110;
    set ENx = ExtBit(x,LenMax(x,y));
    set ENy = ExtBit(y,LenMax(x,y));
    set ENx1 = ExtBit(x,LenMax(x,y)+1);
    set ENy1 = ExtBit(y,LenMax(x,y)+1);
    per cases;
    suppose C1: len x = 0;
      hence BL2Nat.(x+y) =0 + BL2Nat.y by Def3
      .=BL2Nat.x + BL2Nat.y by XP1,C1,D100;
    end;
    suppose C2: len y = 0;
      hence BL2Nat.(x+y) =BL2Nat.x + 0 by Def3
      .=BL2Nat.x + BL2Nat.y by XP2,C2,D100;
    end;
    suppose C3:ENx,ENy are_summable & len x <> 0 & len y <> 0;
      then
      C4: x+y=ENx +ENy by Def3;
      PXP3:LenMax(x,y) = max(len x,len y) by Def15,C3;
      XP7: BL2Nat.x = ExAbsval(x) by Def110
      .=Absval(ENx) by PXP3,C3,LM230,XXREAL_0:25;
      XP8: BL2Nat.y = ExAbsval(y) by Def110
      .=Absval(ENy) by PXP3,C3,LM230,XXREAL_0:25;
      XP15: ExAbsval(x+y) = Absval(ENx+ENy) by C4,Def100;
      thus BL2Nat.(x+y) =ExAbsval(x +y ) by Def110
      .= BL2Nat.x + BL2Nat.y by XP7,XP8,C3,BINARITH:22,XP15;
    end;
    suppose C3:(not ENx,ENy are_summable) & len x <> 0 & len y <> 0; then
      C4: x+y=ENx1 +ENy1 by Def3;
      PXP3:LenMax(x,y) = max(len x,len y) by Def15,C3; then
      len x <= LenMax(x,y) & len y <= LenMax(x,y) by XXREAL_0:25; then
      XP5: len x + 0 <= LenMax(x,y) + 1 &
      len y + 0 <= LenMax(x,y) + 1 by XREAL_1:7;
      XP9: BL2Nat.x = ExAbsval(x) by Def110
      .=Absval(ENx1) by XP5,C3,LM230;
      XP10: BL2Nat.y = ExAbsval(y) by Def110
      .=Absval(ENy1) by XP5,C3,LM230;
      XX1: ENx1 = ExtBit(x,LenMax(x,y)) ^ <* 0 *>
        by PXP3,LMExtBit1,XXREAL_0:25;
      XX2: ENy1 = ExtBit(y,LenMax(x,y)) ^ <* 0 *>
        by PXP3,LMExtBit1,XXREAL_0:25;
      XP15: ExAbsval(x+y) = Absval(ENx1+ENy1) by C4,Def100;
      thus BL2Nat.(x+y) =ExAbsval(x + y) by Def110
      .= BL2Nat.x + BL2Nat.y
      by XP9,XP10,BINARITH:22,XP15,XX1,XX2,LMExtBit2;
    end;
  end;
