let C be initialized ConstructorSignature; :: thesis: for e being expression of C
for f1, f2 being valuation of C holds (e at f1) at f2 = e at (f1 at f2)
let e be expression of C; :: thesis: for f1, f2 being valuation of C holds (e at f1) at f2 = e at (f1 at f2)
set t = e;
let f1, f2 be valuation of C; :: thesis: (e at f1) at f2 = e at (f1 at f2)
A0:
dom (f1 at f2) = (dom f1) \/ (dom f2)
by SUBST2;
defpred S1[ expression of C] means ($1 at f1) at f2 = $1 at (f1 at f2);
W1:
for x being variable holds S1[x -term C]
W2:
for c being constructor OperSymbol of C
for p being FinSequence of QuasiTerms C st len p = len (the_arity_of c) & ( for t being quasi-term of C st t in rng p holds
S1[t] ) holds
S1[c -trm p]
W3:
for a being expression of C, an_Adj C st S1[a] holds
S1[(non_op C) term a]
W4:
for a being expression of C, an_Adj C st S1[a] holds
for t being expression of C, a_Type C st S1[t] holds
S1[(ast C) term a,t]
proof
let a be
expression of
C,
an_Adj C;
:: thesis: ( S1[a] implies for t being expression of C, a_Type C st S1[t] holds
S1[(ast C) term a,t] )
assume Z1:
S1[
a]
;
:: thesis: for t being expression of C, a_Type C st S1[t] holds
S1[(ast C) term a,t]
let t be
expression of
C,
a_Type C;
:: thesis: ( S1[t] implies S1[(ast C) term a,t] )
assume
S1[
t]
;
:: thesis: S1[(ast C) term a,t]
then ((ast C) term (a at f1),(t at f1)) at f2 =
(ast C) term (a at (f1 at f2)),
(t at (f1 at f2))
by Z1, SUBST
.=
((ast C) term a,t) at (f1 at f2)
by SUBST
;
hence
S1[
(ast C) term a,
t]
by SUBST;
:: thesis: verum
end;
thus
S1[e]
from ABCMIZ_1:sch 2(W1, W2, W3, W4); :: thesis: verum