reserve i for Nat,
  j for Element of NAT,
  X,Y,x,y,z for set;
reserve C for initialized ConstructorSignature,
  s for SortSymbol of C,
  o for OperSymbol of C,
  c for constructor OperSymbol of C;
reserve a,b for expression of C, an_Adj C;
reserve t, t1,t2 for expression of C, a_Type C;
reserve p for FinSequence of QuasiTerms C;
reserve e for expression of C;
reserve a,a9 for expression of C, an_Adj C;
reserve q for pure expression of C, a_Type C,
  A for finite Subset of QuasiAdjs C;
reserve T for quasi-type of C;

theorem Th104:
  variables_in (A ast q) =
  (union {variables_in a where a is quasi-adjective of C: a in A}) \/
  (variables_in q)
proof
  set X = ((MSVars C, a_Term C) variables_in).:A;
  set Y = {variables_in a where a is quasi-adjective of C: a in A};
A1: X c= Y
  proof
    let z be object;
    assume z in X;
    then consider a being object such that
    a in dom ((MSVars C, a_Term C) variables_in) and
A2: a in A and
A3: z = ((MSVars C, a_Term C) variables_in).a by FUNCT_1:def 6;
    reconsider a as quasi-adjective of C by A2,Th63;
    z = variables_in a by A3,Def45;
    hence thesis by A2;
  end;
A4: Y c= X
  proof
    let z be object;
    assume z in Y;
    then consider a being quasi-adjective of C such that
A5: z = variables_in a and
A6: a in A;
A7: z = ((MSVars C, a_Term C) variables_in).a by A5,Def45;
    dom ((MSVars C, a_Term C) variables_in) = Union the Sorts of Free(C,
    MSVars C) by FUNCT_2:def 1;
    hence thesis by A6,A7,FUNCT_1:def 6;
  end;
  thus variables_in (A ast q)
  = (union (((MSVars C, a_Term C) variables_in).:adjs(A ast q)))
  \/ variables_in q
    .= (union (((MSVars C, a_Term C) variables_in).:A))
  \/ variables_in q
    .= (union {variables_in a where a is quasi-adjective of C: a in A})
  \/ (variables_in q) by A1,A4,XBOOLE_0:def 10;
end;
