let C be initialized standardized ConstructorSignature; :: thesis: for t being expression of C holds
( t is pure expression of C, a_Type C iff ( (t . {} ) `1 in Constructors & ((t . {} ) `1 ) `1 = a_Type ) )

set X = MSVars C;
set V = (MSVars C) \/ (the carrier of C --> {0 });
let t be expression of C; :: thesis: ( t is pure expression of C, a_Type C iff ( (t . {} ) `1 in Constructors & ((t . {} ) `1 ) `1 = a_Type ) )
consider A being MSSubset of (FreeMSA ((MSVars C) \/ (the carrier of C --> {0 }))) such that
A1: ( Free C,(MSVars C) = GenMSAlg A & A = (Reverse ((MSVars C) \/ (the carrier of C --> {0 }))) "" (MSVars C) ) by MSAFREE3:def 2;
the Sorts of (Free C,(MSVars C)) is MSSubset of (FreeMSA ((MSVars C) \/ (the carrier of C --> {0 }))) by A1, MSUALG_2:def 10;
then the Sorts of (Free C,(MSVars C)) c= the Sorts of (FreeMSA ((MSVars C) \/ (the carrier of C --> {0 }))) by PBOOLE:def 23;
then A2: the Sorts of (Free C,(MSVars C)) . (a_Type C) c= the Sorts of (FreeMSA ((MSVars C) \/ (the carrier of C --> {0 }))) . (a_Type C) by PBOOLE:def 5;
per cases ( ( (t . {} ) `1 in Vars & (t . {} ) `2 = a_Term & t is quasi-term of C ) or ( (t . {} ) `2 = the carrier of C & (t . {} ) `1 in Constructors & (t . {} ) `1 in the carrier' of C ) or (t . {} ) `1 = * or (t . {} ) `1 = non_op ) by Th50;
suppose ( (t . {} ) `1 in Vars & (t . {} ) `2 = a_Term & t is quasi-term of C ) ; :: thesis: ( t is pure expression of C, a_Type C iff ( (t . {} ) `1 in Constructors & ((t . {} ) `1 ) `1 = a_Type ) )
hence ( t is pure expression of C, a_Type C iff ( (t . {} ) `1 in Constructors & ((t . {} ) `1 ) `1 = a_Type ) ) by Lem2, XBOOLE_0:3, ABCMIZ_1:48; :: thesis: verum
end;
suppose that B1: (t . {} ) `2 = the carrier of C and
B2: (t . {} ) `1 in Constructors and
B3: (t . {} ) `1 in the carrier' of C ; :: thesis: ( t is pure expression of C, a_Type C iff ( (t . {} ) `1 in Constructors & ((t . {} ) `1 ) `1 = a_Type ) )
reconsider o = (t . {} ) `1 as OperSymbol of C by B3;
reconsider tt = t as Term of C,((MSVars C) \/ (the carrier of C --> {0 })) by MSAFREE3:9;
not o in {* ,non_op } by B2, ABCMIZ_1:39, XBOOLE_0:3;
then ( o <> * & o <> non_op ) by TARSKI:def 2;
then o is constructor by ABCMIZ_1:def 11;
then B4: o `1 = the_result_sort_of o by StandardizedDef;
B7: t . {} = [o,((t . {} ) `2 )] by Lem5;
then B5: the_sort_of tt = the_result_sort_of o by B1, MSATERM:17;
hereby :: thesis: ( (t . {} ) `1 in Constructors & ((t . {} ) `1 ) `1 = a_Type implies t is pure expression of C, a_Type C ) end;
assume (t . {} ) `1 in Constructors ; :: thesis: ( not ((t . {} ) `1 ) `1 = a_Type or t is pure expression of C, a_Type C )
assume ((t . {} ) `1 ) `1 = a_Type ; :: thesis: t is pure expression of C, a_Type C
then reconsider t = t as expression of C, a_Type C by B1, B7, Th46, B4;
t is pure
proof
given a being expression of C, an_Adj C, q being expression of C, a_Type C such that B9: t = (ast C) term a,q ; :: according to ABCMIZ_1:def 41 :: thesis: contradiction
t = [* ,the carrier of C] -tree <*a,q*> by B9, ABCMIZ_1:46;
then t . {} = [* ,the carrier of C] by TREES_4:def 4;
then (t . {} ) `1 = * by MCART_1:7;
then (t . {} ) `1 in {* ,non_op } by TARSKI:def 2;
hence contradiction by B2, XBOOLE_0:3, ABCMIZ_1:39; :: thesis: verum
end;
hence t is pure expression of C, a_Type C ; :: thesis: verum
end;
suppose Z0: (t . {} ) `1 = * ; :: thesis: ( t is pure expression of C, a_Type C iff ( (t . {} ) `1 in Constructors & ((t . {} ) `1 ) `1 = a_Type ) )
then (t . {} ) `1 in {* ,non_op } by TARSKI:def 2;
then Z2: not (t . {} ) `1 in Constructors by XBOOLE_0:3, ABCMIZ_1:39;
consider a being expression of C, an_Adj C, q being expression of C, a_Type C such that
Z1: t = [* ,3] -tree a,q by Z0, Th52;
t = [* ,3] -tree <*a,q*> by Z1, TREES_4:def 6
.= [* ,the carrier of C] -tree <*a,q*> by ABCMIZ_1:def 9, YELLOW11:1
.= (ast C) term a,q by ABCMIZ_1:46 ;
hence ( t is pure expression of C, a_Type C iff ( (t . {} ) `1 in Constructors & ((t . {} ) `1 ) `1 = a_Type ) ) by Z2, ABCMIZ_1:def 41; :: thesis: verum
end;
suppose Z0: (t . {} ) `1 = non_op ; :: thesis: ( t is pure expression of C, a_Type C iff ( (t . {} ) `1 in Constructors & ((t . {} ) `1 ) `1 = a_Type ) )
end;
end;