
theorem Th49:
  for n being non zero Element of NAT, f being FinSequence of (
  the carrier of Polynom-Ring F_Complex) st len f = n & for i being non zero
Element of NAT st i in dom f holds (not i divides n implies f.i = <%1_F_Complex
  %>) & (i divides n implies f.i = cyclotomic_poly(i)) holds unital_poly(
  F_Complex,n) = Product(f)
proof
  set cMGFC = the carrier of MultGroup F_Complex;
  let n be non zero Element of NAT, f be FinSequence of (the carrier of
  Polynom-Ring F_Complex) such that
A1: len f = n and
A2: for i being non zero Element of NAT st i in dom f holds (not i
  divides n implies f.i = <%1_F_Complex%>) & (i divides n implies f.i =
  cyclotomic_poly(i));
  defpred P[Nat,set] means for fi being FinSequence of (the carrier of
  Polynom-Ring F_Complex) st fi = f|Seg $1 holds $2 = Product(fi);
  set nr1 = n-roots_of_1;
  deffunc MG(Nat) = {y where y is Element of MultGroup F_Complex : y in nr1 &
  ord y <= $1 };
A3: now
    let i being Nat;
    assume i in Seg len f;
    reconsider fi = f|Seg i as FinSequence of (the carrier of Polynom-Ring
    F_Complex) by FINSEQ_1:18;
    set x = Product fi;
    take x;
    thus P[i,x];
  end;
  consider F being FinSequence of Polynom-Ring F_Complex such that
  dom F = Seg len f and
A4: for i being Nat st i in Seg len f holds P[i,F.i] from FINSEQ_1:sch 5
  (A3 );
  defpred R[Nat] means ex t being finite Subset of F_Complex st t =
  MG($1) & F.$1 = poly_with_roots((t,1)-bag);
A5: now
    let i be Element of NAT;
    MG(i) c= nr1
    proof
      let x be object;
      assume x in MG(i);
      then ex y being Element of cMGFC st x = y & y in nr1 & ord y <= i;
      hence thesis;
    end;
    hence MG(i) is finite Subset of F_Complex by XBOOLE_1:1;
  end;
  then reconsider sB = MG(n) as finite Subset of F_Complex;
A6: nr1 = {x where x is Element of MultGroup F_Complex : ord x divides n} by
Th35;
A7: for i being Element of NAT st 1 <= i & i < len f holds R[i] implies R[i +1]
  proof
    let i be Element of NAT such that
A8: 1 <= i and
A9: i < len f and
A10: R[i];
    reconsider fi = f|Seg i as FinSequence of (the carrier of Polynom-Ring
    F_Complex) by FINSEQ_1:18;
    i in Seg len f by A8,A9,FINSEQ_1:1;
    then
A11: F.i = Product fi by A4;
    reconsider fi1 = f|Seg (i+1) as FinSequence of (the carrier of
    Polynom-Ring F_Complex) by FINSEQ_1:18;
A12: i+1 <= len f by A9,NAT_1:13;
    then i+1 = min(i+1,len f) by XXREAL_0:def 9;
    then
A13: len fi1 = i+1 by FINSEQ_2:21;
    1 <= i+1 by A8,NAT_1:13;
    then
A14: i+1 in Seg len f by A12,FINSEQ_1:1;
    then
A15: i+1 in dom f by FINSEQ_1:def 3;
    i+1 in NAT by ORDINAL1:def 12;
    then reconsider sB = MG(i+1) as finite Subset of F_Complex by A5;
    take sB;
    thus sB = MG(i+1);
    set B = (sB,1)-bag;
    consider sb being finite Subset of F_Complex such that
A16: sb = MG(i) and
A17: F.i = poly_with_roots((sb,1)-bag) by A10;
A18: (f|Seg (i+1)).(i+1) = f.(i+1) by FINSEQ_1:4,FUNCT_1:49;
    then reconsider
    fi1d1 = fi1.(i+1) as Element of (the carrier of Polynom-Ring
    F_Complex) by A15,FINSEQ_2:11;
    set b = (sb, 1)-bag;
    reconsider fi1d1p = fi1d1 as Polynomial of F_Complex by POLYNOM3:def 10;
    fi = fi1 | Seg i by Lm2,NAT_1:12;
    then fi1 = fi ^ <* fi1d1 *> by A13,FINSEQ_3:55;
    then
A19: Product fi1 = Product fi * fi1d1 by GROUP_4:6
      .= (poly_with_roots b) *' fi1d1p by A17,A11,POLYNOM3:def 10;
    per cases;
    suppose
A20:  not (i+1) divides n;
      set eb = EmptyBag the carrier of F_Complex;
      now
        let x be object;
        hereby
          assume x in sB;
          then consider y being Element of MultGroup F_Complex such that
A21:      x = y and
A22:      y in nr1 and
A23:      ord y <= i+1;
          ord y divides n by A22,Th34;
          then ord y < i+1 by A20,A23,XXREAL_0:1;
          then ord y <= i by NAT_1:13;
          hence x in sb by A16,A21,A22;
        end;
        assume x in sb;
        then consider y being Element of cMGFC such that
A24:    x = y & y in nr1 and
A25:    ord y <= i by A16;
        ord y <= i+1 by A25,NAT_1:12;
        hence x in sB by A24;
      end;
      then
A26:  sB = sb by TARSKI:2;
      f.(i+1) = <%1_F_Complex%> by A2,A15,A20
        .= poly_with_roots(eb) by UPROOTS:60;
      hence
      F.(i+1) = (poly_with_roots b)*' poly_with_roots(eb) by A4,A14,A18,A19
        .= poly_with_roots (b+eb) by UPROOTS:64
        .= poly_with_roots(B) by A26,PRE_POLY:53;
    end;
    suppose
A27:  i+1 divides n;
      consider scb being non empty finite Subset of F_Complex such that
A28:  scb = {y where y is Element of cMGFC : ord y = i+1 } and
A29:  cyclotomic_poly(i+1) = poly_with_roots((scb,1)-bag) by Def5;
      now
        let x be object;
        hereby
          assume x in sB;
          then consider y being Element of cMGFC such that
A30:      x = y and
A31:      y in nr1 and
A32:      ord y <= i+1;
          ord y <= i or ord y = i+1 by A32,NAT_1:8;
          then y in sb or y in scb by A16,A28,A31;
          hence x in sb \/ scb by A30,XBOOLE_0:def 3;
        end;
        assume
A33:    x in sb \/ scb;
        per cases by A33,XBOOLE_0:def 3;
        suppose
          x in sb;
          then consider y being Element of cMGFC such that
A34:      x = y & y in nr1 and
A35:      ord y <= i by A16;
          ord y <= i+1 by A35,NAT_1:12;
          hence x in sB by A34;
        end;
        suppose
          x in scb;
          then consider y being Element of cMGFC such that
A36:      x = y and
A37:      ord y = i+1 by A28;
          y in nr1 by A6,A27,A37;
          hence x in sB by A36,A37;
        end;
      end;
      then
A38:  sB = sb \/ scb by TARSKI:2;
      set cb = (scb,1)-bag;
A39:  sb misses scb
      proof
        assume sb /\ scb <> {};
        then consider x being object such that
A40:    x in sb /\ scb by XBOOLE_0:def 1;
        x in scb by A40,XBOOLE_0:def 4;
        then
A41:    ex y2 being Element of cMGFC st x = y2 & ord y2 = i+1 by A28;
        x in sb by A40,XBOOLE_0:def 4;
        then ex y1 being Element of cMGFC st x = y1 & y1 in nr1 & ord y1 <= i
        by A16;
        hence contradiction by A41,NAT_1:13;
      end;
      f.(i+1) = poly_with_roots(cb) by A2,A15,A27,A29;
      hence F.(i+1) = (poly_with_roots b)*' poly_with_roots(cb) by A4,A14,A18
,A19
        .= poly_with_roots (b+cb) by UPROOTS:64
        .= poly_with_roots(B) by A38,A39,UPROOTS:10;
    end;
  end;
A42: 0+1 <= n by NAT_1:13;
A43: R[1]
  proof
    reconsider t = MG(1) as finite Subset of F_Complex by A5;
    take t;
    thus t = MG(1);
    reconsider f1 = f|Seg 1 as FinSequence of (the carrier of Polynom-Ring
    F_Complex) by FINSEQ_1:18;
A44: 1 in dom f & 1 divides n by A1,A42,FINSEQ_3:25,NAT_D:6;
A45: 1 in Seg len f by A1,A42,FINSEQ_1:1;
    then 1 in dom f by FINSEQ_1:def 3;
    then reconsider
    fd1 = f.1 as Element of (the carrier of Polynom-Ring F_Complex)
    by FINSEQ_2:11;
    f1 = <*f.1*> by A1,A42,Th1;
    then F.1 = Product <*fd1*> by A4,A45
      .= fd1 by FINSOP_1:11
      .= cyclotomic_poly(1) by A2,A44;
    then consider sB being non empty finite Subset of F_Complex such that
A46: sB = { y where y is Element of cMGFC : ord y = 1 } and
A47: F.1 = poly_with_roots((sB,1)-bag) by Def5;
    now
      let x be object;
      hereby
        assume x in MG(1);
        then consider y being Element of cMGFC such that
A48:    x = y and
A49:    y in nr1 and
A50:    ord y <= 1;
        y is not being_of_order_0 by A49,Th30;
        then ord y <> 0 by GROUP_1:def 11;
        then 0+1 <= ord y by NAT_1:13;
        then ord y = 1 by A50,XXREAL_0:1;
        hence x in sB by A46,A48;
      end;
      assume x in sB;
      then consider y being Element of cMGFC such that
A51:  x = y and
A52:  ord y = 1 by A46;
      ord y divides n by A52,NAT_D:6;
      then y in nr1 by A6;
      hence x in MG(1) by A51,A52;
    end;
    hence thesis by A47,TARSKI:2;
  end;
  for i being Element of NAT st 1 <= i & i <= len f holds R[i] from
  INT_1:sch 7 (A43,A7);
  then
A53: ex t being finite Subset of F_Complex st t = MG(len f) & F.len f =
  poly_with_roots((t,1)-bag) by A1,A42;
  set b = (nr1, 1)-bag;
A54: f = f|Seg len f by FINSEQ_3:49;
  now
    let x be object;
    hereby
      assume
A55:  x in nr1;
      then consider y being Element of MultGroup F_Complex such that
A56:  x = y and
A57:  ord y divides n by A6;
      ord y <= n by A57,NAT_D:7;
      hence x in sB by A55,A56;
    end;
    assume x in sB;
    then ex y being Element of MultGroup F_Complex st y = x & y in nr1 & ord
    y <= n;
    hence x in nr1;
  end;
  then
A58: nr1 = sB by TARSKI:2;
  thus unital_poly(F_Complex,n) = poly_with_roots(b) by Th46
    .= Product(f) by A1,A4,A58,A53,A54,FINSEQ_1:3;
end;
