
theorem XPF:
  for f be complex-valued XFinSequence holds Product XFS2FS f = XProduct f
  proof
    let f be complex-valued XFinSequence;
    reconsider n = len f as Nat;
    defpred P[Nat] means Product XFS2FS (f|$1) = XProduct (f|$1);
    A1: P[0]
    proof
      1 * ( Product XFS2FS (f|0)) = XProduct (f|0) by PFO;
      hence thesis;
    end;
    A2: for k be Nat holds P[k] implies P[k+1]
    proof
      let k be Nat such that
      B1: P[k];
      reconsider g = <%f.k%> as complex-valued XFinSequence;
      per cases;
      suppose
        C0: k in dom f; then
        C1: k + 1 <= len f by NAT_1:13,AFINSQ_1:86;
        f|(k+1)|k = f|k & (f|(k+1)).k = f.k by CNM,CNX; then
        f|(k+1) = (f|k)^<%f.k%> by C1,AFINSQ_1:54,AFINSQ_1:56; then
        Product (XFS2FS (f|(k+1))) =
          Product ((XFS2FS(f|k))^(XFS2FS <%f.k%>)) by SXX
        .= Product (XFS2FS(f|k))* Product (XFS2FS <%f.k%>) by FAF
        .= XProduct (f|k)* Product <*f.k*> by B1,XCF
        .= XProduct (f|(k+1)) by C0,A265;
        hence thesis;
      end;
      suppose not k in dom f; then
        C1: k >= len f by AFINSQ_1:86;
        k+1 >= k+0 by XREAL_1:6; then
        f|k = f & (f|(k+1)) = f by C1,XXREAL_0:2,AFINSQ_1:52;
        hence thesis by B1;
      end;
    end;
    for x be Nat holds P[x] from NAT_1:sch 2(A1,A2); then
    Product (XFS2FS (f|n)) = XProduct (f|n);
    hence thesis;
  end;
