:: O_RING_3 semantic presentation

Lemma1: for b1 being Nat st b1 < 1 holds
b1 = 0
proof end;

Lemma2: for b1 being Nat st b1 <> 0 holds
1 <= b1
proof end;

Lemma3: for b1 being Nat holds
( not b1 <= 1 or b1 = 0 or b1 = 1 )
proof end;

Lemma4: for b1 being non empty doubleLoopStr
for b2, b3, b4 being FinSequence of the carrier of b1 holds
( b2 = b3 ^ b4 iff ( dom b2 = Seg ((len b3) + (len b4)) & ( for b5 being Nat st b5 in dom b3 holds
b2 .: b5 = b3 .: b5 ) & ( for b5 being Nat st b5 in dom b4 holds
b2 .: ((len b3) + b5) = b4 .: b5 ) ) )
proof end;

Lemma5: for b1 being non empty doubleLoopStr
for b2 being Scalar of b1
for b3 being FinSequence of the carrier of b1 holds
( b3 = <*b2*> iff ( len b3 = 1 & b3 .: 1 = b2 ) )
proof end;

Lemma6: for b1 being non empty doubleLoopStr
for b2 being Scalar of b1
for b3 being FinSequence of the carrier of b1 holds (b3 ^ <*b2*>) .: ((len b3) + 1) = b2
proof end;

Lemma7: for b1 being Nat
for b2 being non empty doubleLoopStr
for b3, b4 being FinSequence of the carrier of b2 st b1 <> 0 & b1 <= len b3 holds
(b3 ^ b4) .: b1 = b3 .: b1
proof end;

Lemma8: for b1 being Nat
for b2 being non empty doubleLoopStr
for b3, b4 being FinSequence of the carrier of b2 st b1 <> 0 & b1 <= len b3 holds
(b4 ^ b3) .: ((len b4) + b1) = b3 .: b1
proof end;

Lemma9: for b1 being non empty doubleLoopStr
for b2 being Scalar of b1 st b2 is_a_square holds
<*b2*> is_a_Product_of_squares
proof end;

Lemma10: for b1 being non empty doubleLoopStr
for b2 being Scalar of b1 st b2 is_a_square holds
b2 is_a_product_of_squares
proof end;

Lemma11: for b1 being non empty doubleLoopStr
for b2 being Scalar of b1 st b2 is_a_square holds
<*b2*> is_an_Amalgam_of_squares
proof end;

Lemma12: for b1 being non empty doubleLoopStr
for b2 being Scalar of b1 st b2 is_a_square holds
b2 is_an_amalgam_of_squares
proof end;

Lemma13: for b1 being non empty doubleLoopStr
for b2, b3 being FinSequence of the carrier of b1 st b2 is_an_Amalgam_of_squares & b3 is_an_Amalgam_of_squares holds
b2 ^ b3 is_an_Amalgam_of_squares
proof end;

Lemma14: for b1 being non empty doubleLoopStr
for b2, b3 being FinSequence of the carrier of b1 st b2 is_a_generation_from_squares & b3 is_a_generation_from_squares holds
b2 ^ b3 is_a_generation_from_squares
proof end;

Lemma15: for b1 being non empty doubleLoopStr
for b2 being Scalar of b1
for b3 being FinSequence of the carrier of b1 st b3 is_a_generation_from_squares & b2 is_a_square holds
b3 ^ <*b2*> is_a_generation_from_squares
proof end;

Lemma16: for b1 being non empty doubleLoopStr
for b2 being Scalar of b1
for b3 being FinSequence of the carrier of b1 st b3 is_a_generation_from_squares & b2 is_an_amalgam_of_squares holds
b3 ^ <*b2*> is_a_generation_from_squares
proof end;

Lemma17: for b1, b2 being Nat
for b3 being non empty doubleLoopStr
for b4 being FinSequence of the carrier of b3 st b4 is_an_Amalgam_of_squares & b1 <> 0 & b1 <= len b4 & b2 <> 0 & b2 <= len b4 holds
b4 ^ <*((b4 .: b1) * (b4 .: b2))*> is_an_Amalgam_of_squares
proof end;

Lemma18: for b1, b2 being Nat
for b3 being non empty doubleLoopStr
for b4 being FinSequence of the carrier of b3 st b4 is_a_generation_from_squares & b1 <> 0 & b1 <= len b4 & b2 <> 0 & b2 <= len b4 holds
b4 ^ <*((b4 .: b1) * (b4 .: b2))*> is_a_generation_from_squares
proof end;

Lemma19: for b1 being non empty doubleLoopStr
for b2 being Scalar of b1
for b3 being FinSequence of the carrier of b1 st b3 is_a_Product_of_squares & b2 is_a_square holds
b3 ^ <*((b3 .: (len b3)) * b2)*> is_a_Product_of_squares
proof end;

Lemma20: for b1 being non empty doubleLoopStr
for b2 being Scalar of b1
for b3 being FinSequence of the carrier of b1 st b3 is_a_generation_from_squares & b2 is_a_square holds
(b3 ^ <*b2*>) ^ <*((b3 .: (len b3)) * b2)*> is_a_generation_from_squares
proof end;

Lemma21: for b1 being non empty doubleLoopStr
for b2 being Scalar of b1
for b3 being FinSequence of the carrier of b1 st b3 is_a_generation_from_squares & b2 is_an_amalgam_of_squares holds
(b3 ^ <*b2*>) ^ <*((b3 .: (len b3)) * b2)*> is_a_generation_from_squares
proof end;

Lemma22: for b1 being non empty doubleLoopStr
for b2, b3 being FinSequence of the carrier of b1 st b2 is_an_Amalgam_of_squares & b3 is_an_Amalgam_of_squares holds
(b2 ^ b3) ^ <*((b2 .: (len b2)) * (b3 .: (len b3)))*> is_an_Amalgam_of_squares
proof end;

Lemma23: for b1 being non empty doubleLoopStr
for b2, b3 being FinSequence of the carrier of b1 st b2 is_a_generation_from_squares & b3 is_a_generation_from_squares holds
(b2 ^ b3) ^ <*((b2 .: (len b2)) * (b3 .: (len b3)))*> is_a_generation_from_squares
proof end;

theorem Th1: :: O_RING_3:1
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_square & b3 is_a_square holds
b2 * b3 is_a_product_of_squares
proof end;

theorem Th2: :: O_RING_3:2
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_product_of_squares & b3 is_a_square holds
b2 * b3 is_a_product_of_squares
proof end;

Lemma24: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_square & b3 is_a_product_of_squares holds
b2 * b3 is_an_amalgam_of_squares
proof end;

Lemma25: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_square & b3 is_an_amalgam_of_squares holds
b2 * b3 is_an_amalgam_of_squares
proof end;

theorem Th3: :: O_RING_3:3
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st ( ( b2 is_a_square & b3 is_a_product_of_squares ) or ( b2 is_a_square & b3 is_an_amalgam_of_squares ) ) holds
b2 * b3 is_an_amalgam_of_squares by Lemma24, Lemma25;

Lemma26: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_product_of_squares & b3 is_a_product_of_squares holds
b2 * b3 is_an_amalgam_of_squares
proof end;

Lemma27: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_product_of_squares & b3 is_an_amalgam_of_squares holds
b2 * b3 is_an_amalgam_of_squares
proof end;

theorem Th4: :: O_RING_3:4
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st ( ( b2 is_a_product_of_squares & b3 is_a_product_of_squares ) or ( b2 is_a_product_of_squares & b3 is_an_amalgam_of_squares ) ) holds
b2 * b3 is_an_amalgam_of_squares by Lemma26, Lemma27;

Lemma28: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_an_amalgam_of_squares & b3 is_a_square holds
b2 * b3 is_an_amalgam_of_squares
proof end;

Lemma29: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_an_amalgam_of_squares & b3 is_a_product_of_squares holds
b2 * b3 is_an_amalgam_of_squares
proof end;

Lemma30: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_an_amalgam_of_squares & b3 is_an_amalgam_of_squares holds
b2 * b3 is_an_amalgam_of_squares
proof end;

theorem Th5: :: O_RING_3:5
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st ( ( b2 is_an_amalgam_of_squares & b3 is_a_square ) or ( b2 is_an_amalgam_of_squares & b3 is_a_product_of_squares ) or ( b2 is_an_amalgam_of_squares & b3 is_an_amalgam_of_squares ) ) holds
b2 * b3 is_an_amalgam_of_squares by Lemma28, Lemma29, Lemma30;

Lemma31: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_square & b3 is_a_sum_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma32: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_square & b3 is_a_sum_of_products_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma33: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_square & b3 is_a_sum_of_amalgams_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma34: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_square & b3 is_generated_from_squares holds
b2 * b3 is_generated_from_squares
proof end;

theorem Th6: :: O_RING_3:6
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st ( ( b2 is_a_square & b3 is_a_sum_of_squares ) or ( b2 is_a_square & b3 is_a_sum_of_products_of_squares ) or ( b2 is_a_square & b3 is_a_sum_of_amalgams_of_squares ) or ( b2 is_a_square & b3 is_generated_from_squares ) ) holds
b2 * b3 is_generated_from_squares by Lemma31, Lemma32, Lemma33, Lemma34;

Lemma35: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_squares & b3 is_a_square holds
b2 * b3 is_generated_from_squares
proof end;

Lemma36: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_squares & b3 is_a_sum_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma37: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_squares & b3 is_a_product_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma38: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_squares & b3 is_a_sum_of_products_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma39: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_squares & b3 is_an_amalgam_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma40: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_squares & b3 is_a_sum_of_amalgams_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma41: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_squares & b3 is_generated_from_squares holds
b2 * b3 is_generated_from_squares
proof end;

theorem Th7: :: O_RING_3:7
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st ( ( b2 is_a_sum_of_squares & b3 is_a_square ) or ( b2 is_a_sum_of_squares & b3 is_a_sum_of_squares ) or ( b2 is_a_sum_of_squares & b3 is_a_product_of_squares ) or ( b2 is_a_sum_of_squares & b3 is_a_sum_of_products_of_squares ) or ( b2 is_a_sum_of_squares & b3 is_an_amalgam_of_squares ) or ( b2 is_a_sum_of_squares & b3 is_a_sum_of_amalgams_of_squares ) or ( b2 is_a_sum_of_squares & b3 is_generated_from_squares ) ) holds
b2 * b3 is_generated_from_squares by Lemma35, Lemma36, Lemma37, Lemma38, Lemma39, Lemma40, Lemma41;

Lemma42: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_product_of_squares & b3 is_a_sum_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma43: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_product_of_squares & b3 is_a_sum_of_products_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma44: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_product_of_squares & b3 is_a_sum_of_amalgams_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma45: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_product_of_squares & b3 is_generated_from_squares holds
b2 * b3 is_generated_from_squares
proof end;

theorem Th8: :: O_RING_3:8
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st ( ( b2 is_a_product_of_squares & b3 is_a_sum_of_squares ) or ( b2 is_a_product_of_squares & b3 is_a_sum_of_products_of_squares ) or ( b2 is_a_product_of_squares & b3 is_a_sum_of_amalgams_of_squares ) or ( b2 is_a_product_of_squares & b3 is_generated_from_squares ) ) holds
b2 * b3 is_generated_from_squares by Lemma42, Lemma43, Lemma44, Lemma45;

Lemma46: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_products_of_squares & b3 is_a_square holds
b2 * b3 is_generated_from_squares
proof end;

Lemma47: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_products_of_squares & b3 is_a_sum_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma48: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_products_of_squares & b3 is_a_product_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma49: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_products_of_squares & b3 is_a_sum_of_products_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma50: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_products_of_squares & b3 is_an_amalgam_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma51: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_products_of_squares & b3 is_a_sum_of_amalgams_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma52: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_products_of_squares & b3 is_generated_from_squares holds
b2 * b3 is_generated_from_squares
proof end;

theorem Th9: :: O_RING_3:9
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st ( ( b2 is_a_sum_of_products_of_squares & b3 is_a_square ) or ( b2 is_a_sum_of_products_of_squares & b3 is_a_sum_of_squares ) or ( b2 is_a_sum_of_products_of_squares & b3 is_a_product_of_squares ) or ( b2 is_a_sum_of_products_of_squares & b3 is_a_sum_of_products_of_squares ) or ( b2 is_a_sum_of_products_of_squares & b3 is_an_amalgam_of_squares ) or ( b2 is_a_sum_of_products_of_squares & b3 is_a_sum_of_amalgams_of_squares ) or ( b2 is_a_sum_of_products_of_squares & b3 is_generated_from_squares ) ) holds
b2 * b3 is_generated_from_squares by Lemma46, Lemma47, Lemma48, Lemma49, Lemma50, Lemma51, Lemma52;

Lemma53: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_an_amalgam_of_squares & b3 is_a_sum_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma54: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_an_amalgam_of_squares & b3 is_a_sum_of_products_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma55: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_an_amalgam_of_squares & b3 is_a_sum_of_amalgams_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma56: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_an_amalgam_of_squares & b3 is_generated_from_squares holds
b2 * b3 is_generated_from_squares
proof end;

theorem Th10: :: O_RING_3:10
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st ( ( b2 is_an_amalgam_of_squares & b3 is_a_sum_of_squares ) or ( b2 is_an_amalgam_of_squares & b3 is_a_sum_of_products_of_squares ) or ( b2 is_an_amalgam_of_squares & b3 is_a_sum_of_amalgams_of_squares ) or ( b2 is_an_amalgam_of_squares & b3 is_generated_from_squares ) ) holds
b2 * b3 is_generated_from_squares by Lemma53, Lemma54, Lemma55, Lemma56;

Lemma57: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_amalgams_of_squares & b3 is_a_square holds
b2 * b3 is_generated_from_squares
proof end;

Lemma58: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_amalgams_of_squares & b3 is_a_sum_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma59: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_amalgams_of_squares & b3 is_a_product_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma60: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_amalgams_of_squares & b3 is_a_sum_of_products_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma61: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_amalgams_of_squares & b3 is_an_amalgam_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma62: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_amalgams_of_squares & b3 is_a_sum_of_amalgams_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma63: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_a_sum_of_amalgams_of_squares & b3 is_generated_from_squares holds
b2 * b3 is_generated_from_squares
proof end;

theorem Th11: :: O_RING_3:11
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st ( ( b2 is_a_sum_of_amalgams_of_squares & b3 is_a_square ) or ( b2 is_a_sum_of_amalgams_of_squares & b3 is_a_sum_of_squares ) or ( b2 is_a_sum_of_amalgams_of_squares & b3 is_a_product_of_squares ) or ( b2 is_a_sum_of_amalgams_of_squares & b3 is_a_sum_of_products_of_squares ) or ( b2 is_a_sum_of_amalgams_of_squares & b3 is_an_amalgam_of_squares ) or ( b2 is_a_sum_of_amalgams_of_squares & b3 is_a_sum_of_amalgams_of_squares ) or ( b2 is_a_sum_of_amalgams_of_squares & b3 is_generated_from_squares ) ) holds
b2 * b3 is_generated_from_squares by Lemma57, Lemma58, Lemma59, Lemma60, Lemma61, Lemma62, Lemma63;

Lemma64: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_generated_from_squares & b3 is_a_square holds
b2 * b3 is_generated_from_squares
proof end;

Lemma65: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_generated_from_squares & b3 is_an_amalgam_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma66: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_generated_from_squares & b3 is_generated_from_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma67: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_generated_from_squares & b3 is_a_sum_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma68: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_generated_from_squares & b3 is_a_product_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma69: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_generated_from_squares & b3 is_a_sum_of_products_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

Lemma70: for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st b2 is_generated_from_squares & b3 is_a_sum_of_amalgams_of_squares holds
b2 * b3 is_generated_from_squares
proof end;

theorem Th12: :: O_RING_3:12
for b1 being non empty doubleLoopStr
for b2, b3 being Scalar of b1 st ( ( b2 is_generated_from_squares & b3 is_a_square ) or ( b2 is_generated_from_squares & b3 is_a_sum_of_squares ) or ( b2 is_generated_from_squares & b3 is_a_product_of_squares ) or ( b2 is_generated_from_squares & b3 is_a_sum_of_products_of_squares ) or ( b2 is_generated_from_squares & b3 is_an_amalgam_of_squares ) or ( b2 is_generated_from_squares & b3 is_a_sum_of_amalgams_of_squares ) or ( b2 is_generated_from_squares & b3 is_generated_from_squares ) ) holds
b2 * b3 is_generated_from_squares by Lemma64, Lemma65, Lemma66, Lemma67, Lemma68, Lemma69, Lemma70;