reserve a,x,y for object, A,B for set,
  l,m,n for Nat;
reserve X,Y for set, x for object,
  p,q for Function-yielding FinSequence,
  f,g,h for Function;

theorem
  compose(<*f*>^p,X) = compose(p,f.:X)*(f|X)
proof
  defpred R[Function-yielding FinSequence] means compose(<*f*>^$1,X) = compose
  ($1,f.:X)*(f|X);
A1: for p being Function-yielding FinSequence st R[p] for f being Function
  holds R[p^<*f*>]
  proof
    let p be Function-yielding FinSequence such that
A2: compose(<*f*>^p,X) = compose(p,f.:X)*(f|X);
    let g be Function;
    thus compose(<*f*>^(p^<*g*>),X) = compose(<*f*>^p^<*g*>,X) by FINSEQ_1:32
      .= g*compose(<*f*>^p,X) by Th40
      .= g*compose(p,f.:X)*(f|X) by A2,RELAT_1:36
      .= compose(p^<*g*>,f.:X)*(f|X) by Th40;
  end;
  <*f*>^{} = <*f*> & {}^<*f*> = <*f*> by FINSEQ_1:34;
  then compose(<*f*>^{},X) = f*compose({},X) by Th40
    .= f*id X by Th38
    .= f|X by RELAT_1:65
    .= (id rng (f|X))*(f|X) by RELAT_1:54
    .= (id (f.:X))*(f|X) by RELAT_1:115
    .= compose({},f.:X)*(f|X) by Th38;
  then
A3: R[{}];
  for p holds R[p] from FuncSeqInd(A3,A1);
  hence thesis;
end;
