
theorem Th30:
for p be non constant with_positive_coefficients real Polynomial of F_Complex
st [even_part(p),odd_part(p)] is positive &
   even_part(p),odd_part(p) have_no_common_roots
holds (for x being Element of F_Complex
       st Re(x) = 0 & eval(odd_part(p),x) <> 0
       holds Re(eval([even_part(p),odd_part(p)],x)) >= 0) &
       even_part(p) + odd_part(p) is Hurwitz
proof
let p be non constant
         with_positive_coefficients real Polynomial of F_Complex;
assume A1: [even_part(p),odd_part(p)] is positive &
           even_part(p),odd_part(p) have_no_common_roots;
set p1 = even_part(p), p2 = odd_part(p);
set z = [p1,p2];
per cases;
suppose p1 - p2 = 0_.(F_Complex);
  then p1 + (p2 + -p2) = 0_.(F_Complex) + p2 by POLYNOM3:26;
  then p1 + (p2 - p2) = 0_.(F_Complex) + p2;
  then p1 + 0_.(F_Complex) = 0_.(F_Complex) + p2 by POLYNOM3:29;
  then A2: p1 = 0_.(F_Complex) + p2 by POLYNOM3:28;
  A3: for x being Element of F_Complex holds eval(p2,x) <> 0.F_Complex
     proof
     let x be Element of F_Complex;
     assume eval(p2,x) = 0.F_Complex;
     then x is_a_root_of p2 by POLYNOM5:def 7;
     then x is_a_common_root_of p1,p2 by A2,POLYNOM3:28;
     hence thesis by A1;
     end;
  A4: for x being Element of F_Complex holds eval(z,x) = 1.F_Complex
     proof
     let x be Element of F_Complex;
     A5: eval(p2,x) <> 0.F_Complex by A3;
     thus eval(z,x) = eval(p2,x) * eval(p2,x)" by A2,POLYNOM3:28
                   .= 1.F_Complex by A5,VECTSP_1:def 10;
     end;
  A6: Re(1.F_Complex) = 1 by COMPLFLD:def 1,COMPLEX1:6;
  now let x be Element of F_Complex;
    assume x is_a_root_of p1 + p2;
    then 0.F_Complex = eval(p1 + p2,x) by POLYNOM5:def 7
                    .= eval(p1,x) + eval(p2,x) by POLYNOM4:19
                    .= eval(p2,x) + eval(p2,x) by A2,POLYNOM3:28;
    then 2 * eval(p2,x) = 0 by COMPLFLD:def 1;
    then 0.F_Complex = eval(p2,x) by COMPLFLD:def 1;
    hence Re(x) < 0 by A3;
    end;
  hence ((for x being Element of F_Complex st Re(x) = 0 & eval(p2,x) <> 0
          holds Re(eval(z,x)) >= 0) &
         p1 + p2 is Hurwitz) by A4,A6;
  end;
suppose p1 - p2 <> 0_.(F_Complex); then reconsider
  pp = p1 - p2 as non zero Polynomial of F_Complex by UPROOTS:def 5;
  set w = [ p1 + p2, pp];
  A7: now let x be Element of F_Complex;
      assume A8: eval(z`2,x) = 0.F_Complex;
      A9: eval(pp,x) = eval(p1,x) - eval(p2,x) by POLYNOM4:21
                    .= eval(p1,x) by RLVECT_1:13,A8;
      A10: eval(p1+p2,x) = eval(p1,x) + eval(p2,x) by POLYNOM4:19
                       .= eval(p1,x) by RLVECT_1:def 4,A8;
A11:    now assume eval(p1,x) = 0.F_Complex;
          then x is_a_common_root_of p1,p2 by A8,POLYNOM5:def 7;
          hence contradiction by A1;
          end;
      thus eval(w,x) = eval(p1,x)"*eval(p1,x) by A10,A9
       .= 1.F_Complex by VECTSP_1:def 10,A11;
      end;
  A12: now let x be Element of F_Complex;
      assume A13: eval(w,x) = 1.F_Complex &
                eval(p2,x) <> 0.F_Complex & eval(p2,x) <> eval(p1,x);
      A14: now assume eval(pp,x) = 0.F_Complex;
           then eval(p1,x) - eval(p2,x) = 0.F_Complex by POLYNOM4:21;
           then eval(p2,x) = (eval(p1,x) - eval(p2,x)) + eval(p2,x)
                             by RLVECT_1:def 4
                          .= eval(p1,x) + (-eval(p2,x) + eval(p2,x))
                          .= eval(p1,x) + 0.F_Complex by RLVECT_1:5
                          .= eval(p1,x) by RLVECT_1:def 4;
           hence contradiction by A13;
           end;
      reconsider a = eval(p2,x) as Complex;
      1.F_Complex * eval(pp,x)
              = eval(p1+p2,x) * ((eval(pp,x))" * eval(pp,x)) by A13
             .= eval(p1+p2,x) * 1.F_Complex by A14,VECTSP_1:def 10
             .= eval(p1+p2,x);
      then eval(p1+p2,x) = eval(pp,x)
                        .= eval(p1,x) - eval(p2,x) by POLYNOM4:21;
      then eval(p1,x) + eval(p2,x) = eval(p1,x) - eval(p2,x) by POLYNOM4:19;
      then a = -a by COMPLFLD:2;
      hence eval(z`2,x) = 0.F_Complex by COMPLFLD:def 1;
      end;
  A15: now let x be Element of F_Complex;
     assume A16: eval(p2,x) <> 0.F_Complex & eval(p2,x) <> eval(p1,x);
     eval(w,x) - 1.F_Complex <> 1.F_Complex - 1.F_Complex by A16,A12;
     then A17: eval(w,x) - 1.F_Complex <> 0.F_Complex by RLVECT_1:15;
     A18: 1 = 1.F_Complex by COMPLFLD:def 1,COMPLEX1:def 4;
     then A19: eval(w,x) - 1 = eval(w,x) - 1.F_Complex by COMPLFLD:3;
     A20: eval(p1-p2,x) = eval(p1,x) - eval(p2,x) by POLYNOM4:21;
     A21: now assume eval(p1-p2,x) = 0.F_Complex;
         then eval(p1,x) - eval(p2,x) = 0.F_Complex by POLYNOM4:21;
         hence contradiction by A16,RLVECT_1:21;
         end;
     A22: eval(p1-p2,x) + eval(p1+p2,x)
           = (eval(p1,x) - eval(p2,x)) + (eval(p1,x) + eval(p2,x))
             by A20,POLYNOM4:19
          .= (eval(p2,x) - eval(p2,x)) + (eval(p1,x) + eval(p1,x))
          .= 0.F_Complex + (eval(p1,x) + eval(p1,x)) by RLVECT_1:def 10
          .= eval(p1,x) + eval(p1,x) by RLVECT_1:def 4;
     A23: eval(p1+p2,x) * (eval(p1-p2,x))" - eval(p1-p2,x) * (eval(p1-p2,x))"
         = eval(p1+p2,x) * (eval(p1-p2,x))" + (-eval(p1-p2,x))*(eval(p1-p2,x))"
           by VECTSP_1:8
        .= (eval(p1+p2,x) + -eval(p1-p2,x)) * (eval(p1-p2,x))"
        .= (eval(p1,x) + eval(p2,x) - eval(p1-p2,x)) * (eval(p1-p2,x))"
           by POLYNOM4:19
        .= (eval(p1,x) + eval(p2,x) - (eval(p1,x) - eval(p2,x))) *
           (eval(p1-p2,x))" by POLYNOM4:21
        .= (eval(p1,x) + eval(p2,x) + (eval(p2,x) + (-eval(p1,x)))) *
           (eval(p1-p2,x))" by RLVECT_1:33
        .= ((eval(p1,x) + (-eval(p1,x))) + eval(p2,x) + eval(p2,x)) *
           (eval(p1-p2,x))"
        .= (0.F_Complex + eval(p2,x) + eval(p2,x)) *
           (eval(p1-p2,x))" by RLVECT_1:def 10
        .= (eval(p2,x) + eval(p2,x)) * (eval(p1-p2,x))" by ALGSTR_1:def 2
        .= (eval(p2+p2,x)) * (eval(p1-p2,x))" by POLYNOM4:19;
     A24: eval(z,x) * (eval(w,x) - 1)
           = (eval(p1,x) * (eval(p2,x))") * (eval(w,x) - 1.F_Complex)
             by COMPLEX1:def 4,COMPLFLD:8,COMPLFLD:3
          .= (eval(p1,x) * (eval(p2,x))") *
             (eval(w,x) - eval(p1-p2,x) * (eval(p1-p2,x))")
              by A21,VECTSP_1:def 10
          .= (eval(p1,x) * (eval(p2,x))") *
               ((eval(p2,x) + eval(p2,x)) * (eval(p1-p2,x))")
             by A23,POLYNOM4:19
          .= eval(p1,x) * 2 *((eval(p2,x))" * eval(p2,x)) * (eval(p1-p2,x))"
          .= eval(p1,x) * 2 * 1.F_Complex * (eval(p1-p2,x))"
             by A16,VECTSP_1:def 10
          .= (2 * eval(p1,x)) * (eval(p1-p2,x))" by A18;
     1 + eval(w,x)
               = eval(p1-p2,x) * (eval(p1-p2,x))" +
                 eval(p1+p2,x) * (eval(p1-p2,x))" by A18,A21,VECTSP_1:def 10
              .= (eval(p1,x) + eval(p1,x)) * (eval(p1-p2,x))" by A22;
     then (1 + eval(w,x)) * (eval(w,x) - 1)"
               = (eval(z,x) * (eval(w,x) - 1)) * (eval(w,x) - 1)" by A24
              .= eval(z,x) * ((eval(w,x) - 1) * (eval(w,x) - 1)")
              .= eval(z,x) *
                 ((eval(w,x) - 1.F_Complex) * (eval(w,x) - 1.F_Complex)")
                 by A19,A17,COMPLFLD:5
              .= eval(z,x) * 1.F_Complex by A17,VECTSP_1:def 10
              .= eval(z,x);
     hence (1 + eval(w,x)) / (eval(w,x) - 1) = eval(z,x);
     end;
A25: now let x be Real;
   assume 0 <= x & x * x = 1;
   then 0 < x & x = x" by XCMPLX_1:210;
   hence x = 1 by XCMPLX_1:223;
   end;
  A26: for x be Element of F_Complex,
     E2, E1 being Real st
     E2 = |.eval(w,x).|^2 & E1 = |.eval(w,x) - 1 .|^2 &
     eval(p2,x) <> 0.F_Complex & eval(p2,x) <> eval(p1,x) holds
     Re(eval(z,x)) = (E2 - 1) / E1
     proof let x be Element of F_Complex,
     E2, E1 be Real;
     assume A27: E2 = |.eval(w,x).|^2 & E1 = |.eval(w,x) - 1 .|^2;
     assume A28: eval(p2,x) <> 0.F_Complex & eval(p2,x) <> eval(p1,x);
     set z1 = 1 + eval(w,x), z2 = eval(w,x) - 1;
 A29: Re(z1) = Re(eval(w,x)) + 1 by COMPLEX1:8,COMPLEX1:6,COMPLEX1:def 4;
 A30: Re(z2) = Re(eval(w,x)) - 1 by COMPLEX1:def 4,COMPLEX1:6,COMPLEX1:19;
 A31: Im(z1) = 0 + Im(eval(w,x)) by COMPLEX1:8,COMPLEX1:6,COMPLEX1:def 4;
 A32: Im(z2) = Im(eval(w,x)) - Im(1r) by COMPLEX1:19,COMPLEX1:def 4
           .= Im(eval(w,x)) + 0 by COMPLEX1:6;
     reconsider R2 = (Re z2)^2, I2 = (Im z2)^2 as Real;
     reconsider RR = (Re(eval(w,x)))^2,
                II = (Im(eval(w,x)))^2 as Real;
     Re((1 + eval(w,x)) / (eval(w,x) - 1))
         = (Re z1 * Re z2 + Im z1 * Im z2) / (R2 + I2) by COMPLEX1:24
        .= ((RR + II) - 1) / (R2 + I2) by A29,A30,A31,A32
        .= (|.eval(w,x)*eval(w,x).| - 1) / (R2 + I2) by COMPLEX1:68
        .= (|.eval(w,x).|*|.eval(w,x).| - 1) / (R2 + I2) by COMPLEX1:65
        .= (E2 - 1) / (|.z2*z2.|) by COMPLEX1:68,A27
        .= (E2 - 1) / E1 by COMPLEX1:65,A27;
     hence Re(eval(z,x)) = (E2 - 1) / E1 by A28,A15;
     end;
  A33: for x being Element of F_Complex
     holds (eval(p2,x) <> eval(p1,x) & Re(eval(z,x)) >= 0)
     implies |.eval(w,x).| >= 1
     proof
     let x be Element of F_Complex;
     reconsider E2 = |.eval(w,x) - 1 .|^2 as Real;
     reconsider E1 = |.eval(w,x).|^2 as Real;
     assume A34: eval(p2,x) <> eval(p1,x) & Re(eval(z,x)) >= 0;
     A35: E2 >= 0 by XREAL_1:63;
     now per cases by A34;
      case eval(p2,x) = 0.F_Complex;
        then eval(w,x) = 1.F_Complex by A7
                      .= 1 by COMPLFLD:def 1,COMPLEX1:def 4;
        hence |.eval(w,x).| >= 1 by COMPLEX1:48;
        end;
      case Re(eval(z,x)) > 0 & eval(p2,x) <> 0.F_Complex;
        then A36: (E1 - 1) / E2 > 0 by A34,A26;
        then E1 - 1 > 0 by A35;
        then A37: (E1 - 1) + 1 > 0 + 1 by XREAL_1:8;
        now per cases;
        case eval(w,x) = 0;
          hence |.eval(w,x).| >= 1 by A35,A36,COMPLEX1:44;
          end;
        case eval(w,x) <> 0;
          then A38: |.eval(w,x).| > 0 by COMPLEX1:47;
          now assume A39: |.eval(w,x).| < 1;
            then E1 <= |.eval(w,x).| by A38,SQUARE_1:42;
            hence contradiction by A37,A39,XXREAL_0:2;
            end;
          hence |.eval(w,x).| >= 1;
          end;
        end;
        hence |.eval(w,x).| >= 1;
        end;
     case Re(eval(z,x)) = 0 & eval(p2,x) <> 0.F_Complex;
        then A40: (E1 - 1) / E2 = 0 by A34,A26;
        now per cases;
        case |.(eval(w,x) - 1).|^2 = 0;
          then |.(eval(w,x) - 1).| = 0;
          then eval(w,x) - 1 = 0 by COMPLEX1:45;
          hence |.eval(w,x).| = 1 by COMPLEX1:48;
          end;
        case |.(eval(w,x) - 1).|^2 <> 0;
          then E1 - 1 = 0 by A40;
          hence |.eval(w,x).| = 1 by A25,COMPLEX1:46;
          end;
        end;
        hence |.eval(w,x).| >= 1;
        end;
      end;
      hence |.eval(w,x).| >= 1;
      end;
  thus for x being Element of F_Complex st Re(x) = 0 & eval(p2,x) <> 0
       holds Re(eval(z,x)) >= 0
       proof
       let x be Element of F_Complex;
       assume A41: Re(x) = 0 & eval(p2,x) <> 0;
       then A42: Im(eval(p1,x)) = 0 by Th28;
       A43: Re(eval(p2,x)) = 0 by A41,Th29;
       A44: eval(p2,x) <> 0.F_Complex by A41,COMPLFLD:def 1;
       reconsider y1 = eval(p1,x) as Complex;
       reconsider y2 = eval(p2,x) as Complex;
       Re(eval(p1,x)/eval(p2,x)) = Re(y1/y2) by A44,COMPLFLD:6
                                     .= 0 by A42,A43,Th1;
       hence thesis;
       end;
  now let x be Element of F_Complex;
       assume A45: Re(x) >= 0;
       reconsider RW = |.eval(w,x).|^2 as Real;
       now per cases;
       case A46: eval(p2,x) = eval(p1,x);
           A47: now assume eval(p1,x) = 0.F_Complex; then
               x is_a_common_root_of p1,p2 by A46,POLYNOM5:def 7;
               hence contradiction by A1;
               end;
           now assume eval(p1+p2,x) = 0.F_Complex;
             then A48: eval(p1,x) + eval(p1,x) = 0.F_Complex by A46,POLYNOM4:19
                                             .= 0 by COMPLFLD:def 1;
             reconsider a = eval(p1,x) as Complex;
             thus contradiction by A48,A47,COMPLFLD:def 1;
             end;
           hence not(x is_a_root_of p1 + p2) by POLYNOM5:def 7;
           end;
       case A49: eval(p2,x) <> eval(p1,x);
       now per cases by A45;
       case A50: Re(x) = 0;
         then A51: Im(eval(p1,x)) = 0 by Th28;
         A52: Re(eval(p2,x)) = 0 by A50,Th29;
         now per cases;
         case A53: eval(p2,x) = 0;
           then A54: eval(p2,x) = 0.F_Complex by COMPLFLD:def 1;
           A55: eval(pp,x) = eval(p1,x) - eval(p2,x) by POLYNOM4:21
                         .= eval(p1,x) - 0.F_Complex by A53,COMPLFLD:def 1
                         .= eval(p1,x) by RLVECT_1:13;
           A56: eval(p1+p2,x) = eval(p1,x) + eval(p2,x) by POLYNOM4:19
                            .= eval(p1,x) by A53;
A57:         now assume eval(p1,x) = 0.F_Complex;
               then x is_a_common_root_of p1,p2 by A54,POLYNOM5:def 7;
               hence contradiction by A1;
               end;
           eval(w,x) = eval(p1,x)"*eval(p1,x) by A55,A56
               .= 1.F_Complex by VECTSP_1:def 10,A57
                    .= 1r by COMPLFLD:def 1;
           hence |.eval(w,x).| = 1 by COMPLEX1:48;
           end;
         case A58: eval(p2,x) <> 0;
           then A59: eval(p2,x) <> 0.F_Complex by COMPLFLD:def 1;
           A60: eval(p2,x) <> 0.F_Complex by A58,COMPLFLD:def 1;
           reconsider y1 = eval(p1,x) as Complex;
           reconsider y2 = eval(p2,x) as Complex;
           reconsider E1 = |.eval(w,x) - 1 .|^2 as Real;
           Re(eval(p1,x)/eval(p2,x)) = Re(y1/y2) by A59,COMPLFLD:6
                                         .= 0 by A51,A52,Th1;
           then Re(eval(z,x)) = 0;
           then A61: (RW - 1) / E1 = 0 by A49,A60,A26;
           now per cases;
           case |.(eval(w,x) - 1).|^2 = 0;
            then |.(eval(w,x) - 1).| = 0;
            then eval(w,x) - 1 = 0 by COMPLEX1:45;
            hence |.eval(w,x).| = 1 by COMPLEX1:48;
            end;
           case |.(eval(w,x) - 1).|^2 <> 0;
            then RW - 1 = 0 by A61;
            hence |.eval(w,x).| = 1 by A25,COMPLEX1:46;
            end;
           end;
           hence |.eval(w,x).| = 1;
           end;
         end;
         then eval(w`1,x) <> 0 by COMPLEX1:47;
         then eval(p1+p2,x) <> 0.F_Complex by COMPLFLD:def 1;
         hence not(x is_a_root_of p1 + p2) by POLYNOM5:def 7;
         end;
       case Re(x) > 0 & eval(z`2,x) <> 0;
         then Re(eval(z,x)) > 0 by A1;
         then |.eval(w,x).| >= 1 by A33,A49;
         then eval(w`1,x) <> 0 by COMPLEX1:47;
         then eval(p1+p2,x) <> 0.F_Complex by COMPLFLD:def 1;
         hence not(x is_a_root_of p1 + p2) by POLYNOM5:def 7;
         end;
       case Re(x) > 0 & eval(z`2,x) = 0;
         then A62: eval(p2,x) = 0.F_Complex by COMPLFLD:def 1;
         A63: eval(pp,x) = eval(p1,x) - eval(p2,x) by POLYNOM4:21
                       .= eval(p1,x) by A62,RLVECT_1:13;
         A64: eval(p1+p2,x) = eval(p1,x) + eval(p2,x) by POLYNOM4:19
                          .= eval(p1,x) by A62,RLVECT_1:def 4;
A65:       now assume eval(p1,x) = 0.F_Complex;
             then x is_a_common_root_of p1,p2 by A62,POLYNOM5:def 7;
             hence contradiction by A1;
             end;
         eval(w,x) = eval(p1,x)"*eval(p1,x) by A63,A64
                .= 1.F_Complex by VECTSP_1:def 10,A65
                  .= 1r by COMPLFLD:def 1;
         then eval(w`1,x) <> 0 by COMPLEX1:47,COMPLEX1:48;
         then eval(p1+p2,x) <> 0.F_Complex by COMPLFLD:def 1;
         hence not(x is_a_root_of p1 + p2) by POLYNOM5:def 7;
         end;
       end;
       hence not(x is_a_root_of p1 + p2);
       end;
       end;
       hence not(x is_a_root_of p1 + p2);
       end;
  hence p1 + p2 is Hurwitz;
  end;
end;
