
theorem Th43:
  for L being Field, p,q being Polynomial of L, m being Element of
  NAT st m > 0 & len p <= m & len q <= m for x being Element of L st x
is_primitive_root_of_degree 2*m holds DFT(DFT(p*'q, x, 2*m), x", 2*m) = emb(2*m
  ,L) * (p*'q)
proof
  let L be Field;
  let p,q be Polynomial of L;
  let m be Element of NAT;
  assume that
A1: m > 0 and
A2: len p <= m & len q <= m;
  let x be Element of L;
  assume
A3: x is_primitive_root_of_degree 2*m;
  per cases;
  suppose
A4: len p = 0 or len q = 0;
    per cases by A4;
    suppose
      len p = 0;
      then p = 0_.L by POLYNOM4:5;
      then p *' q = 0_.L by POLYNOM3:34;
      then
      emb(2*m,L) * (p*'q) = 0_.L & DFT(DFT(p*'q, x, 2*m), x", 2*m) = DFT(
      0_.L, x", 2*m) by Th33,POLYNOM5:28;
      hence thesis by Th33;
    end;
    suppose
      len q = 0;
      then q = 0_.L by POLYNOM4:5;
      then p *' q = 0_.L by POLYNOM3:34;
      then
      emb(2*m,L) * (p*'q) = 0_.L & DFT(DFT(p*'q, x, 2*m), x", 2*m) = DFT(
      0_.L, x", 2*m) by Th33,POLYNOM5:28;
      hence thesis by Th33;
    end;
  end;
  suppose
A5: len p <> 0 & len q <> 0;
    set v1 = VM(x,2*m), v2 = VM(x",2*m);
A6: len p + len q <= m + m by A2,XREAL_1:7;
    len (p*'q) <= len p + len q by A5,Th9;
    then
A7: len (p*'q) <= 2*m by A6,XXREAL_0:2;
A8: for i being Nat st i < 2*m holds (v1 * mConv(p*'q,2*m))*(i+1,1) = (
    DFT(p*'q,x,2*m)).i
    proof
      let i be Nat;
      i in NAT by ORDINAL1:def 12;
      hence thesis by A7,Th41;
    end;
    for i being Nat st i >= 2*m holds DFT(p*'q,x,2*m).i = 0.L by Def6;
    then 2*m is_at_least_length_of DFT(p*'q, x, 2*m) by ALGSEQ_1:def 2;
    then
A9: len DFT(p*'q, x, 2*m) <= 2*m by ALGSEQ_1:def 3;
A10: width v2 = 2*m by MATRIX_0:24
      .= len v1 by MATRIX_0:24;
A11: m + m <> 0 by A1;
A12: v2 * v1 = v1 * v2 by A3,Th40
      .= emb(2*m,L) * 1.(L,2*m) by A3,Th39;
A13: now
      let u9 be object;
      assume u9 in dom(aConv(emb(2*m,L) * mConv(p*'q, 2*m)));
      then reconsider u = u9 as Element of NAT by FUNCT_2:def 1;
      per cases;
      suppose
A14:    u < 2*m;
        then 0+1 <= u+1 & u+1 <= 2*m by NAT_1:13;
        then
A15:    u+1 in Seg (2*m);
        len (mConv(p*'q, 2*m)) = 2*m by A11,Th28;
        then
A16:    dom (mConv(p*'q, 2*m)) = Seg (2*m) by FINSEQ_1:def 3;
        Seg width (mConv(p*'q, 2*m)) = Seg 1 & 1 in Seg 1 by A11,Th28;
        then
A17:    [u+1,1] in Indices mConv(p*'q, 2*m) by A16,A15,ZFMISC_1:87;
        len (emb(2*m,L) * mConv(p*'q, 2*m)) = len (mConv(p*'q, 2*m)) by
MATRIX_3:def 5
          .= 2*m by A11,Th28;
        hence
        (aConv(emb(2*m,L) * mConv(p*'q, 2*m))).u9 = (emb(2*m,L) * mConv(p
        *'q, 2*m))*(u+1, 1) by A14,Def4
          .= emb(2*m,L) * ((mConv(p*'q, 2*m))*(u+1, 1)) by A17,MATRIX_3:def 5
          .= emb(2*m,L) * (p*'q).u by A14,Th28
          .= (emb(2*m,L) * (p*'q)).u9 by POLYNOM5:def 4;
      end;
      suppose
A18:    2*m <= u;
        len (emb(2*m,L) * mConv(p*'q, 2*m)) = len (mConv(p*'q, 2*m)) by
MATRIX_3:def 5
          .= 2*m by A11,Th28;
        hence (aConv(emb(2*m,L) * mConv(p*'q, 2*m))).u9 = 0.L by A18,Def4
          .= emb(2*m,L) * 0.L
          .= emb(2*m,L) * (p*'q).u by A7,A18,ALGSEQ_1:8,XXREAL_0:2
          .= (emb(2*m,L) * (p*'q)).u9 by POLYNOM5:def 4;
      end;
    end;
    dom (aConv(emb(2*m,L) * mConv(p*'q, 2*m))) = NAT by FUNCT_2:def 1
      .= dom (emb(2*m,L) * (p*'q)) by FUNCT_2:def 1;
    then
A19: aConv(emb(2*m,L) * mConv(p*'q, 2*m)) = emb(2*m,L) * (p*'q) by A13,
FUNCT_1:2;
A20: len mConv(p*'q,2*m) = 2*m by A11,Th28
      .= width v1 by MATRIX_0:24;
    then
A21: len (v1 * mConv(p*'q, 2*m)) = len v1 by MATRIX_3:def 4
      .= 2*m by MATRIX_0:24;
    width(v1 * mConv(p*'q, 2*m)) = width(mConv(p*'q,2*m)) by A20,MATRIX_3:def 4
      .= 1 by A11,Th28;
    then v1 * mConv(p*'q,2*m) is Matrix of 2*m,1,L by A11,A21,MATRIX_0:20;
    then
    aConv(v2 * mConv(DFT(p*'q,x,2*m), 2*m)) = aConv(v2 * (v1 * mConv(p*'q
    ,2*m))) by A11,A8,Th29
      .= aConv((v2 * v1) * mConv(p*'q,2*m)) by A10,A20,MATRIX_3:33
      .= aConv(emb(2*m,L)*(1.(L,2*m)*mConv(p*'q,2*m))) by A11,A12,Th6
      .= aConv(emb(2*m,L) * mConv(p*'q, 2*m)) by A1,Lm12;
    hence thesis by A11,A9,A19,Th42;
  end;
end;
