:: A Scheme for Extensions of Homomorphisms of Manysorted Algebras
:: by Andrzej Trybulec
::
:: Received December 13, 1994
:: Copyright (c) 1994-2017 Association of Mizar Users
:: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.
environ
vocabularies FUNCT_1, CARD_3, RELAT_1, TARSKI, XBOOLE_0, LANG1, SUBSET_1,
DTCONSTR, TREES_4, FINSEQ_1, TDGROUP, TREES_3, TREES_2, STRUCT_0,
MSUALG_1, PBOOLE, MSAFREE, ZFMISC_1, MARGREL1, PROB_2, NAT_1, PARTFUN1,
MCART_1, MSUALG_3, MSAFREE1;
notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, ORDINAL1, NAT_1, RELAT_1,
FUNCT_1, PARTFUN1, FUNCT_2, FINSEQ_2, STRUCT_0, XTUPLE_0, MCART_1,
FINSEQ_1, MULTOP_1, PROB_2, CARD_3, TREES_2, TREES_3, TREES_4, LANG1,
DTCONSTR, PBOOLE, MSUALG_1, MSAFREE, MSUALG_3;
constructors MULTOP_1, PROB_2, MSUALG_3, MSAFREE, RELSET_1, CAT_3, FINSEQ_2,
XTUPLE_0;
registrations XBOOLE_0, FUNCT_1, RELSET_1, FINSEQ_1, RELAT_1, TREES_3,
STRUCT_0, DTCONSTR, MSUALG_1, MSUALG_3, MSAFREE, ORDINAL1, PBOOLE,
XTUPLE_0;
requirements BOOLE, SUBSET;
definitions TARSKI, MSUALG_1, PBOOLE, PROB_2;
equalities MSUALG_1;
expansions TARSKI, PBOOLE;
theorems MSAFREE, MSUALG_3, LANG1, FINSEQ_1, CARD_3, PBOOLE, FUNCT_1, FUNCT_2,
DTCONSTR, TARSKI, ZFMISC_1, PROB_2, CARD_5, RELAT_1, DOMAIN_1, XBOOLE_0,
XBOOLE_1, PARTFUN1, FINSEQ_2, XTUPLE_0;
schemes DTCONSTR, FUNCT_2, MULTOP_1, PBOOLE;
begin
theorem Th1:
for f,g being Function st g in product f holds rng g c= Union f
proof
let f,g be Function;
assume
A1: g in product f;
let y be object;
assume y in rng g;
then consider x being object such that
A2: x in dom g and
A3: y = g.x by FUNCT_1:def 3;
A4: dom g = dom f by A1,CARD_3:9;
then y in f.x by A1,A2,A3,CARD_3:9;
hence thesis by A4,A2,CARD_5:2;
end;
scheme
DTConstrUniq{DT()->non empty DTConstrStr, D()->non empty set, G(set) ->
Element of D(), H(set, set, set) -> Element of D(), f1, f2() -> Function of TS(
DT()), D() }: f1() = f2()
provided
A1: for t being Symbol of DT() st t in Terminals DT()
holds f1().(root-tree t) = G(t) and
A2: for nt being Symbol of DT(), ts being Element of (TS DT())*
st nt ==> roots ts
for x being Element of D()* st x = f1() * ts
holds f1().(nt-tree ts) = H(nt, ts, x) and
A3: for t being Symbol of DT() st t in Terminals DT()
holds f2().(root-tree t) = G(t) and
A4: for nt being Symbol of DT(), ts being Element of (TS DT())*
st nt ==> roots ts
for x being Element of D()* st x = f2() * ts
holds f2().(nt-tree ts) = H(nt, ts, x)
proof
defpred P[set] means f1().$1 = f2().$1;
A5: for nt being Symbol of DT(), ts being FinSequence of TS DT() st nt ==>
roots ts & for t being DecoratedTree of the carrier of DT() st t in rng ts
holds P[t] holds P[nt-tree ts]
proof
let nt be Symbol of DT(), ts be FinSequence of TS DT();
assume that
A6: nt ==> roots ts and
A7: for t being DecoratedTree of the carrier of DT() st t in rng ts
holds f1().t = f2().t;
A8: rng ts c= TS(DT()) by FINSEQ_1:def 4;
then
A9: rng ts c= dom f1() by FUNCT_2:def 1;
then
A10: dom (f1() * ts) = dom ts by RELAT_1:27;
rng ts c= dom f2() by A8,FUNCT_2:def 1;
then
A11: dom (f2() * ts) = dom ts by RELAT_1:27;
A12: now
let x be object;
assume
A13: x in dom ts;
then reconsider t =ts.x as Element of FinTrees the carrier of DT()
by DTCONSTR:2;
t in rng ts by A13,FUNCT_1:def 3;
then
A14: f1().t = f2().t by A7;
thus (f1() * ts).x = f1().t by A10,A13,FUNCT_1:12
.= (f2() * ts).x by A11,A13,A14,FUNCT_1:12;
end;
dom (f1() * ts) = dom ts by A9,RELAT_1:27
.= Seg len ts by FINSEQ_1:def 3;
then reconsider ntv1 = f1() * ts as FinSequence by FINSEQ_1:def 2;
rng ntv1 c= D() by RELAT_1:def 19;
then ntv1 is FinSequence of D() by FINSEQ_1:def 4;
then reconsider ntv1 as Element of D()* by FINSEQ_1:def 11;
reconsider tss = ts as Element of (TS DT())* by FINSEQ_1:def 11;
thus f1().(nt-tree ts) = H(nt, tss, ntv1) by A2,A6
.= f2().(nt-tree ts) by A4,A6,A10,A11,A12,FUNCT_1:2;
end;
A15: for s being Symbol of DT() st s in Terminals DT() holds P[root-tree s]
proof
let s be Symbol of DT();
assume
A16: s in Terminals DT();
hence f1().(root-tree s) = G(s) by A1
.= f2().(root-tree s) by A3,A16;
end;
for t being DecoratedTree of the carrier of DT() st t in TS(DT()) holds
P[t] from DTCONSTR:sch 7 (A15, A5);
then for x being object st x in TS DT() holds f1().x = f2().x;
hence thesis by FUNCT_2:12;
end;
theorem Th2: :: MSAFREE:5
for S being non void non empty ManySortedSign, X being
ManySortedSet of the carrier of S
for o,b being object st [o,b] in REL(X) holds o
in [:the carrier' of S,{the carrier of S}:] & b in ([:the carrier' of S,{the
carrier of S}:] \/ Union coprod X)*
proof
let S be non void non empty ManySortedSign, X be ManySortedSet of the
carrier of S;
let o,b be object;
assume
A1: [o,b] in REL(X);
then reconsider
o9=o as Element of [:the carrier' of S,{the carrier of S}:] \/
Union(coprod X) by ZFMISC_1:87;
reconsider b9=b as Element of ([:the carrier' of S,{the carrier of S}:] \/
Union(coprod X))* by A1,ZFMISC_1:87;
A2: [o9,b9] in REL(X) by A1;
hence o in [:the carrier' of S,{the carrier of S}:] by MSAFREE:def 7;
thus thesis by A2;
end;
theorem :: MSAFREE:5
for S being non void non empty ManySortedSign, X being ManySortedSet
of the carrier of S for o being OperSymbol of S, b being FinSequence st [[o,the
carrier of S],b] in REL(X) holds len b = len (the_arity_of o) & for x be set st
x in dom b holds (b.x in [:the carrier' of S,{the carrier of S}:] implies for
o1 be OperSymbol of S st [o1,the carrier of S] = b.x holds the_result_sort_of
o1 = (the_arity_of o).x) & (b.x in Union(coprod X) implies b.x in coprod((
the_arity_of o).x,X))
proof
let S be non void non empty ManySortedSign, X be ManySortedSet of the
carrier of S, o be OperSymbol of S, b be FinSequence;
assume
A1: [[o,the carrier of S],b] in REL(X);
then reconsider
b9=b as Element of ([:the carrier' of S,{the carrier of S}:] \/
Union coprod X)* by Th2;
len b9 = len the_arity_of o by A1,MSAFREE:5;
hence len b = len the_arity_of o;
for x be set st x in dom b9 holds (b9.x in [:the carrier' of S,{the
carrier of S}:] implies for o1 be OperSymbol of S st [o1,the carrier of S] = b9
.x holds the_result_sort_of o1 = (the_arity_of o).x) & (b9.x in Union(coprod X)
implies b9.x in coprod((the_arity_of o).x,X)) by A1,MSAFREE:5;
hence thesis;
end;
registration
let I be non empty set, M be ManySortedSet of I;
cluster rng M -> non empty;
coherence;
end;
registration
let I be set;
cluster empty-yielding -> disjoint_valued for ManySortedSet of I;
coherence
proof
let M be ManySortedSet of I such that
A1: M is empty-yielding;
let x,y be object;
assume x <> y;
per cases;
suppose
x in dom M & y in dom M;
M.x is empty by A1;
hence thesis by XBOOLE_1:65;
end;
suppose
not (x in dom M & y in dom M);
then M.x = {} or M.y = {} by FUNCT_1:def 2;
hence thesis by XBOOLE_1:65;
end;
end;
end;
registration
let I be set;
cluster disjoint_valued for ManySortedSet of I;
existence
proof
set M = the empty-yielding ManySortedSet of I;
take M;
thus thesis;
end;
end;
definition
let I be non empty set;
let X be disjoint_valued ManySortedSet of I;
let D be non-empty ManySortedSet of I;
let F be ManySortedFunction of X,D;
func Flatten F -> Function of Union X, Union D means
:Def1:
for i being Element of I, x being set st x in X.i holds it.x = F.i.x;
existence
proof
defpred P[object,object] means
for i being Element of I st $1 in X.i holds $2 =
F.i.$1;
A1: for x be object st x in Union X ex y be object st y in Union D & P[x,y]
proof
let e be object;
assume e in Union X;
then consider i being object such that
A2: i in dom X and
A3: e in X.i by CARD_5:2;
reconsider i as Element of I by A2,PARTFUN1:def 2;
take u = F.i.e;
i in I;
then
A4: i in dom D by PARTFUN1:def 2;
F.i.e in D.i by A3,FUNCT_2:5;
hence u in Union D by A4,CARD_5:2;
let i9 be Element of I;
assume e in X.i9;
then X.i9 meets X.i by A3,XBOOLE_0:3;
hence thesis by PROB_2:def 2;
end;
consider f being Function of Union X, Union D such that
A5: for e being object st e in Union X holds P[e,f.e] from FUNCT_2:sch 1
(A1);
take f;
let i be Element of I, x be set;
assume
A6: x in X.i;
i in I;
then i in dom X by PARTFUN1:def 2;
then x in Union X by A6,CARD_5:2;
hence thesis by A5,A6;
end;
correctness
proof
let F1,F2 be Function of Union X, Union D such that
A7: for i being Element of I, x being set st x in X.i holds F1.x = F. i.x and
A8: for i being Element of I, x being set st x in X.i holds F2.x = F. i.x;
now
let x be object;
assume x in Union X;
then consider i being object such that
A9: i in dom X and
A10: x in X.i by CARD_5:2;
reconsider i as Element of I by A9,PARTFUN1:def 2;
thus F1.x = F.i.x by A7,A10
.= F2.x by A8,A10;
end;
hence F1 = F2 by FUNCT_2:12;
end;
end;
theorem Th4:
for I being non empty set, X being disjoint_valued ManySortedSet
of I, D being non-empty ManySortedSet of I for F1,F2 be ManySortedFunction of X
,D st Flatten F1 = Flatten F2 holds F1 = F2
proof
let I be non empty set, X be disjoint_valued ManySortedSet of I, D be
non-empty ManySortedSet of I;
let F1,F2 be ManySortedFunction of X,D;
assume
A1: Flatten F1 = Flatten F2;
now
let i be object;
assume
A2: i in I;
then reconsider Di=D.i as non empty set;
reconsider f1 = F1.i, f2 = F2.i as Function of X.i,Di by A2,PBOOLE:def 15;
now
let x be object;
assume
A3: x in X.i;
hence f1.x = (Flatten F1).x by A2,Def1
.= f2.x by A1,A2,A3,Def1;
end;
hence F1.i = F2.i by FUNCT_2:12;
end;
hence thesis;
end;
definition
let S be non empty ManySortedSign;
let A be MSAlgebra over S;
attr A is disjoint_valued means
:Def2:
the Sorts of A is disjoint_valued;
end;
definition
let S be non empty ManySortedSign;
func SingleAlg S -> strict MSAlgebra over S means
:Def3:
for i being set st i in the carrier of S holds (the Sorts of it).i = {i};
existence
proof
deffunc F(object) = {$1};
consider f being ManySortedSet of the carrier of S such that
A1: for i being object st i in the carrier of S holds f.i = F(i) from
PBOOLE:sch 4;
set Ch =
the ManySortedFunction of f# * the Arity of S, f * the ResultSort of S;
take MSAlgebra(#f,Ch#);
thus thesis by A1;
end;
uniqueness
proof
let A1,A2 be strict MSAlgebra over S such that
A2: for i being set st i in the carrier of S holds (the Sorts of A1).i
= {i} and
A3: for i being set st i in the carrier of S holds (the Sorts of A2).i = {i};
set B = the Sorts of A1;
now
let i be object;
assume
A4: i in the carrier of S;
hence (the Sorts of A1).i = {i} by A2
.= (the Sorts of A2).i by A3,A4;
end;
then
A5: the Sorts of A1 = the Sorts of A2;
A6: dom(the ResultSort of S) = the carrier' of S by FUNCT_2:def 1;
now
let i be object;
set A = (B*the ResultSort of S).i;
assume
A7: i in the carrier' of S;
then
A8: A = B.((the ResultSort of S).i) by A6,FUNCT_1:13
.= {(the ResultSort of S).i} by A2,A7,FUNCT_2:5;
then reconsider A as non empty set;
reconsider f1=(the Charact of A1).i, f2=(the Charact of A2).i as
Function of (B# * the Arity of S).i, A by A5,A7,PBOOLE:def 15;
now
let x be object;
assume
A9: x in (B# * the Arity of S).i;
then f1.x in A by FUNCT_2:5;
then
A10: f1.x = (the ResultSort of S).i by A8,TARSKI:def 1;
f2.x in A by A9,FUNCT_2:5;
hence f1.x = f2.x by A8,A10,TARSKI:def 1;
end;
hence (the Charact of A1).i = (the Charact of A2).i by FUNCT_2:12;
end;
hence thesis by A5,PBOOLE:3;
end;
end;
Lm1: for S being non empty ManySortedSign
holds SingleAlg S is non-empty disjoint_valued
proof
let S be non empty ManySortedSign;
set F = the Sorts of SingleAlg S;
hereby
let x be object;
assume x in the carrier of S;
then F.x = {x} by Def3;
hence F.x is non empty;
end;
let x,y be object such that
A1: x <> y;
per cases;
suppose
A2: x in dom F & y in dom F;
dom F = the carrier of S by PARTFUN1:def 2;
then
A3: F.x = {x} & F.y = {y} by A2,Def3;
assume F.x meets F.y;
hence contradiction by A1,A3,ZFMISC_1:11;
end;
suppose
not (x in dom F & y in dom F);
then F.x = {} or F.y = {} by FUNCT_1:def 2;
hence thesis by XBOOLE_1:65;
end;
end;
registration
let S be non empty ManySortedSign;
cluster non-empty disjoint_valued for MSAlgebra over S;
existence
proof
SingleAlg S is non-empty disjoint_valued by Lm1;
hence thesis;
end;
end;
registration
let S be non empty ManySortedSign;
cluster SingleAlg S -> non-empty disjoint_valued;
coherence by Lm1;
end;
registration
let S be non empty ManySortedSign;
let A be disjoint_valued MSAlgebra over S;
cluster the Sorts of A -> disjoint_valued;
coherence by Def2;
end;
theorem Th5:
for S being non void non empty ManySortedSign, o being OperSymbol
of S, A1 be non-empty disjoint_valued MSAlgebra over S, A2 be non-empty
MSAlgebra over S, f be ManySortedFunction of A1,A2, a be Element of Args(o,A1)
holds (Flatten f)*a = f#a
proof
let S be non void non empty ManySortedSign, o be OperSymbol of S, A1 be
non-empty disjoint_valued MSAlgebra over S, A2 be non-empty MSAlgebra over S, f
be ManySortedFunction of A1,A2, a be Element of Args(o,A1);
A1: dom(the Arity of S) = the carrier' of S by FUNCT_2:def 1;
set s = the_arity_of o;
a in ((the Sorts of A1)# * the Arity of S).o;
then a in (the Sorts of A1)#.((the Arity of S).o) by A1,FUNCT_1:13;
then
A2: a in product((the Sorts of A1)*s) by FINSEQ_2:def 5;
then rng a c= Union ((the Sorts of A1)*s) by Th1;
then union rng((the Sorts of A1)*s) c= union rng the Sorts of A1 & rng a c=
union rng ((the Sorts of A1)*s) by CARD_3:def 4,RELAT_1:26,ZFMISC_1:77;
then rng a c= union rng the Sorts of A1;
then rng a c= Union the Sorts of A1 by CARD_3:def 4;
then rng a c= dom(Flatten f) by FUNCT_2:def 1;
then
A3: dom((Flatten f)*a) = dom a by RELAT_1:27;
A4: rng s c= the carrier of S by FINSEQ_1:def 4;
dom the Sorts of A1 = the carrier of S by PARTFUN1:def 2;
then
A5: dom((the Sorts of A1)*s) = dom s by A4,RELAT_1:27;
A6: dom a = dom((the Sorts of A1)*s) by A2,CARD_3:9;
A7: now
let x be object;
assume
A8: x in dom((the Sorts of A2)*s);
A9: dom((the Sorts of A2)*s) c= dom s by RELAT_1:25;
then
A10: (the Sorts of A2).(s.x) = ((the Sorts of A2)*s).x by A8,FUNCT_1:13;
s.x in rng s by A9,A8,FUNCT_1:def 3;
then reconsider z = s.x as SortSymbol of S by A4;
(the Sorts of A1).(s.x) = ((the Sorts of A1)*s).x by A9,A8,FUNCT_1:13;
then
A11: a.x in (the Sorts of A1).z by A2,A5,A9,A8,CARD_3:9;
((Flatten f)*a).x = (Flatten f).(a.x) by A6,A5,A9,A8,FUNCT_1:13
.=f.z.(a.x) by A11,Def1;
hence ((Flatten f)*a).x in ((the Sorts of A2)*s).x by A10,A11,FUNCT_2:5;
end;
dom the Sorts of A2 = the carrier of S by PARTFUN1:def 2;
then dom s = dom((the Sorts of A2)*s) by A4,RELAT_1:27;
then (Flatten f)*a in product((the Sorts of A2)*s) by A3,A6,A5,A7,CARD_3:9;
then (Flatten f)*a in (the Sorts of A2)#.((the Arity of S).o) by
FINSEQ_2:def 5;
then reconsider x = (Flatten f)*a as Element of Args(o,A2) by A1,FUNCT_1:13;
now
let n be Nat;
assume
A12: n in dom a;
then
(the_arity_of o)/.n = s.n & a.n in ((the Sorts of A1)*s).n by A2,A6,A5,
CARD_3:9,PARTFUN1:def 6;
then
A13: a.n in (the Sorts of A1).((the_arity_of o)/.n) by A6,A5,A12,FUNCT_1:13;
thus x.n =(Flatten f).(a.n) by A12,FUNCT_1:13
.= (f.((the_arity_of o)/.n)).(a.n) by A13,Def1;
end;
hence thesis by MSUALG_3:def 6;
end;
registration
let S be non void non empty ManySortedSign, X be non-empty ManySortedSet of
the carrier of S;
cluster FreeSort X -> disjoint_valued;
coherence
proof
let x,y be object;
set F = FreeSort X;
per cases;
suppose
x in dom F & y in dom F;
then reconsider s1=x, s2=y as SortSymbol of S by PARTFUN1:def 2;
assume x <> y;
then F.s1 misses F.s2 by MSAFREE:12;
hence thesis;
end;
suppose
A1: not (x in dom F & y in dom F);
assume x <> y;
F.x = {} or F.y = {} by A1,FUNCT_1:def 2;
hence thesis by XBOOLE_1:65;
end;
end;
end;
scheme FreeSortUniq{ S() -> non void non empty ManySortedSign,
X,D() -> non-empty ManySortedSet of the carrier of S(),
G(set) -> Element of Union D(),
H(object, object, object) -> Element of Union D(),
f1, f2() -> ManySortedFunction of FreeSort X(),D() }:
f1() = f2()
provided
A1: for o being OperSymbol of S(), ts being Element of Args(o,FreeMSA X())
for x being Element of (Union D())* st x = (Flatten f1()) * ts holds
f1().(the_result_sort_of o).(Den(o,FreeMSA X()).ts) = H(o, ts, x) and
A2: for s being SortSymbol of S(), y be set st y in FreeGen(s,X())
holds f1().s.y = G(y) and
A3: for o being OperSymbol of S(), ts being Element of Args(o,FreeMSA X())
for x being Element of (Union D())* st x = (Flatten f2()) * ts holds
f2().(the_result_sort_of o).(Den(o,FreeMSA X()).ts) = H(o, ts, x) and
A4: for s being SortSymbol of S(), y be set st y in FreeGen(s,X())
holds f2().s.y = G(y)
proof
reconsider D = Union D() as non empty set;
TS DTConMSA X() = union rng FreeSort X() by MSAFREE:11
.= Union FreeSort X() by CARD_3:def 4;
then reconsider f1 = Flatten f1(), f2 = Flatten f2()
as Function of TS DTConMSA X(), D;
deffunc O(Element of DTConMSA X(), Element of (TS DTConMSA X())*,Element of
(Union D())*) = H($1`1,$2,$3);
consider H being Function of [:the carrier of DTConMSA X(),(TS DTConMSA X())
*,(Union D())*:], Union D() such that
A5: for nt be Element of DTConMSA X(), ts be Element of (TS DTConMSA X())*,
x being Element of (Union D())* holds H.(nt,ts,x) = O(nt,ts,x)
from MULTOP_1:sch 4;
reconsider H as Function of [:the carrier of DTConMSA X(),(TS DTConMSA X())*
,D*:],D;
deffunc Hf(Element of DTConMSA X(), Element of (TS DTConMSA X())*,
Element of D*) = H.($1, $2, $3);
A6: DTConMSA X() = DTConstrStr (# [:the carrier' of S(),{the carrier of S()}
:] \/ Union coprod X(), REL X()#) by MSAFREE:def 8;
A7: now
let f be ManySortedFunction of FreeSort X(), D() such that
A8: for o being OperSymbol of S(), ts being Element of Args(o,FreeMSA
X()) for x being Element of D* st x = (Flatten f) * ts holds f.(
the_result_sort_of o).(Den(o,FreeMSA X()).ts) = H(o, ts, x);
let nt be Element of DTConMSA(X()), ts be Element of (TS DTConMSA(X()))*;
assume
A9: nt ==> roots ts;
then [nt,roots ts] in REL X() by A6,LANG1:def 1;
then consider
o being OperSymbol of S(), x2 being Element of {the carrier of S(
)} such that
A10: nt = [o,x2] by Th2,DOMAIN_1:1;
let x be Element of D*;
assume
A11: x = (Flatten f) * ts;
A12: FreeMSA X() = MSAlgebra (# FreeSort X(), FreeOper X() #)
by MSAFREE:def 14;
reconsider tss = ts as FinSequence of TS DTConMSA X() by FINSEQ_1:def 11;
reconsider xx = x as Element of (Union D())*;
A13: x2 = the carrier of S() by TARSKI:def 1;
then
A14: nt = Sym(o,X()) by A10,MSAFREE:def 9;
then
A15: tss in ((FreeSort X())# * (the Arity of S())).o by A9,MSAFREE:10;
((FreeSort X()) * (the ResultSort of S())).o = (FreeSort X()).
the_result_sort_of o by FUNCT_2:15;
then
A16: DenOp(o,X()).ts in (FreeSort X()).the_result_sort_of o by A15,FUNCT_2:5;
(Flatten f).([o,the carrier of S()]-tree ts) = (Flatten f).(DenOp(o,X
()).tss) by A9,A10,A13,A14,MSAFREE:def 12
.= f.(the_result_sort_of o).(DenOp(o,X()).ts) by A16,Def1
.= f.(the_result_sort_of o).(Den(o,FreeMSA X()).ts) by A12,MSAFREE:def 13
.= H(o, ts, x) by A8,A12,A15,A11
.= H(nt`1, ts, x) by A10;
hence (Flatten f).(nt-tree ts) = O(nt,ts,xx) by A10,A13
.= H.(nt, ts, x) by A5;
end;
then
A17: for nt being Symbol of DTConMSA X(),
ts being Element of (TS DTConMSA X())* st nt ==> roots ts
for x being Element of D* st x = f1 * ts
holds f1.(nt-tree ts) = Hf(nt, ts, x) by A1;
deffunc F(Element of DTConMSA(X())) =G(root-tree $1);
A18: Terminals DTConMSA X() = Union coprod X() by MSAFREE:6;
consider G being Function of the carrier of DTConMSA(X()), Union D() such
that
A19: for t being Element of DTConMSA(X()) holds G.t = F(t) from FUNCT_2:
sch 4;
reconsider G as Function of the carrier of DTConMSA(X()), D;
deffunc Gf(Element of DTConMSA(X()))=G.$1;
A20: dom X() = the carrier of S() by PARTFUN1:def 2;
A21: now
let f be ManySortedFunction of FreeSort X(), D() such that
A22: for s being SortSymbol of S(), y being set st y in FreeGen(s,X())
holds f.s.y = G(y);
let t be Element of DTConMSA(X());
assume
A23: t in Terminals DTConMSA X();
then reconsider s = t`2 as SortSymbol of S() by A18,A20,CARD_3:22;
t`1 in X().(t`2) by A18,A23,CARD_3:22;
then
A24: root-tree[t`1,s] in FreeGen(s,X()) by MSAFREE:def 15;
A25: t = [t`1,t`2] by A18,A23,CARD_3:22;
hence (Flatten f).root-tree t = f.s.root-tree[t`1,s] by A24,Def1
.= G(root-tree t) by A22,A25,A24
.= G.t by A19;
end;
then
A26: for t being Symbol of DTConMSA X() st t in Terminals DTConMSA X() holds
f2.root-tree t = Gf(t) by A4;
A27: for nt being Symbol of DTConMSA X(),
ts being Element of (TS DTConMSA X())* st nt ==> roots ts
for x being Element of D* st x = f2 * ts
holds f2.(nt-tree ts) = Hf(nt, ts, x) qua Element of D by A3,A7;
A28: for t being Element of DTConMSA(X()) st t in Terminals DTConMSA X()
holds f1.root-tree t = Gf(t) by A2,A21;
f1 = f2 from DTConstrUniq(A28,A17,A26,A27);
hence thesis by Th4;
end;
registration
let S be non void non empty ManySortedSign;
let X be non-empty ManySortedSet of the carrier of S;
cluster FreeMSA X -> non-empty;
coherence;
end;
registration
let S be non void non empty ManySortedSign;
let o be OperSymbol of S;
let A be non-empty MSAlgebra over S;
cluster Args(o,A) -> non empty;
coherence;
cluster Result(o,A) -> non empty;
coherence;
end;
registration
let S be non void non empty ManySortedSign, X be non-empty ManySortedSet of
the carrier of S;
cluster the Sorts of FreeMSA X -> disjoint_valued;
coherence
proof
FreeMSA X = MSAlgebra (# FreeSort X, FreeOper X #) by MSAFREE:def 14;
hence thesis;
end;
end;
registration
let S be non void non empty ManySortedSign, X be non-empty ManySortedSet of
the carrier of S;
cluster FreeMSA X -> disjoint_valued;
coherence;
end;
scheme
ExtFreeGen{ S() -> non void non empty ManySortedSign, X() -> non-empty
ManySortedSet of the carrier of S(), MSA() -> non-empty MSAlgebra over S(),
P[object,object,object],
IT1, IT2() -> ManySortedFunction of FreeMSA X(), MSA() }:
IT1() = IT2()
provided
A1: IT1() is_homomorphism FreeMSA X(), MSA() and
A2: for s being SortSymbol of S(), x,y being set st y in FreeGen(s,X())
holds IT1().s.y = x iff P[s,x,y] and
A3: IT2() is_homomorphism FreeMSA X(), MSA() and
A4: for s being SortSymbol of S(), x,y being set st y in FreeGen(s,X())
holds IT2().s.y = x iff P[s,x,y];
defpred Z[object,object] means
for s being SortSymbol of S() st $1 in FreeGen(s,X()) holds P[s,$2,$1];
A5: FreeMSA X() = MSAlgebra (# FreeSort X(), FreeOper X() #) by MSAFREE:def 14;
then reconsider
f1 = IT1(), f2 = IT2() as ManySortedFunction of FreeSort X(), the
Sorts of MSA();
A6: for x be object st x in Union FreeGen X()
ex y be object st y in Union the Sorts of MSA() & Z[x,y]
proof
let e be object;
A7: dom(the Sorts of MSA()) = the carrier of S() by PARTFUN1:def 2;
assume e in Union FreeGen X();
then consider s being object such that
A8: s in dom FreeGen X() and
A9: e in (FreeGen X()).s by CARD_5:2;
reconsider s as SortSymbol of S() by A8,PARTFUN1:def 2;
A10: e in FreeGen(s,X()) by A9,MSAFREE:def 16;
take u = IT1().s.e;
f1.s is Function of (FreeSort X()).s,(the Sorts of MSA()).s;
then u in (the Sorts of MSA()).s by A10,FUNCT_2:5;
hence u in Union the Sorts of MSA() by A7,CARD_5:2;
let s9 be SortSymbol of S();
assume
A11: e in FreeGen(s9,X());
then (FreeSort X()).s9 /\ (FreeSort X()).s <> {} by A10,XBOOLE_0:def 4;
then (FreeSort X()).s9 meets (FreeSort X()).s by XBOOLE_0:def 7;
then s = s9 by MSAFREE:12;
hence thesis by A2,A11;
end;
consider G being Function of Union FreeGen X(), Union the Sorts of MSA()
such that
A12: for e being object st e in Union FreeGen X() holds Z[e,G.e] from
FUNCT_2:sch 1(A6);
deffunc Gf(set) = G/.($1);
defpred P[object,object] means
for o being OperSymbol of S(), a being Element of
Args(o,MSA()) st $1 = [o,a] holds $2 = Den(o,MSA()).a;
consider R being set such that
A13: R = the set of all
[o,a] where o is Element of the carrier' of S(), a is Element
of Args(o,MSA());
A14: for s be SortSymbol of S(), y be set st y in FreeGen(s,X()) holds f1.s.
y = Gf(y)
proof
let s be SortSymbol of S(), y be set;
A15: dom(FreeGen X()) = the carrier of S() by PARTFUN1:def 2;
assume
A16: y in FreeGen(s,X());
then y in (FreeGen X()).s by MSAFREE:def 16;
then
A17: y in Union FreeGen X() by A15,CARD_5:2;
then P[s,G.y,y] by A12,A16;
hence f1.s.y = G.y by A2,A16
.= G/.y by A17,FUNCT_2:def 13;
end;
A18: for x be object st x in R
ex y be object st y in Union the Sorts of MSA() & P[x,y]
proof
let e be object;
assume e in R;
then consider
o being OperSymbol of S(), a being Element of Args(o,MSA()) such
that
A19: e = [o,a] by A13;
reconsider u = Den(o,MSA()).a as set;
take u;
u in union rng the Sorts of MSA() by TARSKI:def 4;
hence u in Union the Sorts of MSA() by CARD_3:def 4;
let o9 be OperSymbol of S(), x9 be Element of Args(o9,MSA());
assume
A20: e = [o9,x9];
then o = o9 by A19,XTUPLE_0:1;
hence thesis by A19,A20,XTUPLE_0:1;
end;
consider H being Function of R, Union the Sorts of MSA() such that
A21: for e being object st e in R holds P[e,H.e] from FUNCT_2:sch 1(A18);
A22: for s be SortSymbol of S(),y be set st y in FreeGen(s,X()) holds f2.s.y
= Gf(y)
proof
let s be SortSymbol of S(), y be set;
A23: dom(FreeGen X()) = the carrier of S() by PARTFUN1:def 2;
assume
A24: y in FreeGen(s,X());
then y in (FreeGen X()).s by MSAFREE:def 16;
then
A25: y in Union FreeGen X() by A23,CARD_5:2;
then P[s,G.y,y] by A12,A24;
hence f2.s.y = G.y by A4,A24
.= G/.y by A25,FUNCT_2:def 13;
end;
deffunc Hf(set, set, set) = H/.[$1,$3];
A26: for o being OperSymbol of S(), ts being Element of Args(o,FreeMSA X())
for x being Element of (Union the Sorts of MSA())* st x = (Flatten f2) * ts
holds f2.(the_result_sort_of o).(Den(o,FreeMSA X()).ts) = Hf(o, ts, x)
proof
let o be OperSymbol of S(), ts be Element of Args(o,FreeMSA X()),
x be Element of (Union the Sorts of MSA())*;
assume
A27: x = (Flatten f2) * ts;
A28: (Flatten f2) * ts = IT2()#ts by A5,Th5;
then reconsider a = x as Element of Args(o,MSA()) by A27;
A29: [o,a] in R by A13;
thus f2.(the_result_sort_of o).(Den(o,FreeMSA X()).ts) = Den(o,MSA()).a by
A3,A28,A27,MSUALG_3:def 7
.= H.[o,x] by A21,A29
.= H/.[o,x] by A29,FUNCT_2:def 13;
end;
A30: for o being OperSymbol of S(), ts being Element of Args(o,FreeMSA X())
for x being Element of (Union the Sorts of MSA())* st x = (Flatten f1) * ts
holds f1.(the_result_sort_of o).(Den(o,FreeMSA X()).ts) = Hf(o, ts, x)
proof
let o be OperSymbol of S(), ts be Element of Args(o,FreeMSA X()),
x be Element of (Union the Sorts of MSA())*;
assume
A31: x = (Flatten f1) * ts;
A32: (Flatten f1) * ts = IT1()#ts by A5,Th5;
then reconsider a = x as Element of Args(o,MSA()) by A31;
A33: [o,a] in R by A13;
thus f1.(the_result_sort_of o).(Den(o,FreeMSA X()).ts) = Den(o,MSA()).a by
A1,A32,A31,MSUALG_3:def 7
.= H.[o,x] by A21,A33
.= H/.[o,x] by A33,FUNCT_2:def 13;
end;
f1 = f2 from FreeSortUniq(A30,A14,A26,A22);
hence thesis;
end;