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 Th40:
  compose(p^<*f*>,X) = f*compose(p,X)
proof
A1: f = (p^<*f*>).(len p+1) by FINSEQ_1:42;
  len <*f*> = 1 by FINSEQ_1:40;
  then
A2: len (p^<*f*>) = len p+1 by FINSEQ_1:22;
  consider ff being ManySortedFunction of NAT such that
A3: compose(p^<*f*>,X) = ff.len (p^<*f*>) and
A4: ff.0 = id X and
A5: for i being Nat st i+1 in dom (p^<*f*>) for g,h being
  Function st g = ff.i & h = (p^<*f*>).(i+1) holds ff.(i+1) = h*g by Def3;
  reconsider g = ff.len p as Function;
A6: dom p c= dom(p^<*f*>) by FINSEQ_1:26;
  now
    let i be Nat;
    assume
A7: i+1 in dom p;
    let g,h be Function;
    assume that
A8: g = ff.i and
A9: h = p.(i+1);
    h = (p^<*f*>).(i+1) by A7,A9,FINSEQ_1:def 7;
    hence ff.(i+1) = h*g by A5,A6,A7,A8;
  end;
  then
A10: g = compose(p,X) by A4,Def3;
  1 in Seg 1 & dom <*f*> = Seg 1 by FINSEQ_1:2,38,TARSKI:def 1;
  hence thesis by A3,A5,A10,A2,A1,FINSEQ_1:28;
end;
