set S = {a_Type,an_Adj,a_Term};
set O = {*,non_op} \/ Constructors;
deffunc H2( Element of Constructors ) -> set = (len (loci_of $1)) |-> a_Term;
consider f being ManySortedSet of Constructors such that
A1:
for c being Element of Constructors holds f . c = H2(c)
from PBOOLE:sch 5();
deffunc H3( Element of Constructors ) -> Element of {a_Type,an_Adj,a_Term} = kind_of $1;
consider g being ManySortedSet of Constructors such that
A2:
for c being Element of Constructors holds g . c = H3(c)
from PBOOLE:sch 5();
reconsider t = a_Type , a = an_Adj , tr = a_Term as Element of {a_Type,an_Adj,a_Term} by ENUMSET1:def 1;
reconsider aa = <*a*> as Element of {a_Type,an_Adj,a_Term} * ;
set A = f +* ((*,non_op) --> (<*a,t*>,aa));
set R = g +* ((*,non_op) --> (t,a));
A3:
dom ((*,non_op) --> (<*a,t*>,aa)) = {*,non_op}
by FUNCT_4:62;
A4:
dom ((*,non_op) --> (t,a)) = {*,non_op}
by FUNCT_4:62;
A5:
dom f = Constructors
by PARTFUN1:def 2;
A6:
dom g = Constructors
by PARTFUN1:def 2;
A7:
dom (f +* ((*,non_op) --> (<*a,t*>,aa))) = {*,non_op} \/ Constructors
by A3, A5, FUNCT_4:def 1;
A8:
dom (g +* ((*,non_op) --> (t,a))) = {*,non_op} \/ Constructors
by A4, A6, FUNCT_4:def 1;
rng f c= {a_Type,an_Adj,a_Term} *
then A11:
(rng f) \/ (rng ((*,non_op) --> (<*a,t*>,aa))) c= ({a_Type,an_Adj,a_Term} *) \/ ({a_Type,an_Adj,a_Term} *)
by XBOOLE_1:13;
rng g c= {a_Type,an_Adj,a_Term}
then A14:
(rng g) \/ (rng ((*,non_op) --> (t,a))) c= {a_Type,an_Adj,a_Term} \/ {a_Type,an_Adj,a_Term}
by XBOOLE_1:13;
rng (f +* ((*,non_op) --> (<*a,t*>,aa))) c= (rng f) \/ (rng ((*,non_op) --> (<*a,t*>,aa)))
by FUNCT_4:17;
then reconsider A = f +* ((*,non_op) --> (<*a,t*>,aa)) as Function of ({*,non_op} \/ Constructors),({a_Type,an_Adj,a_Term} *) by A7, A11, FUNCT_2:2, XBOOLE_1:1;
rng (g +* ((*,non_op) --> (t,a))) c= (rng g) \/ (rng ((*,non_op) --> (t,a)))
by FUNCT_4:17;
then reconsider R = g +* ((*,non_op) --> (t,a)) as Function of ({*,non_op} \/ Constructors),{a_Type,an_Adj,a_Term} by A8, A14, FUNCT_2:2, XBOOLE_1:1;
reconsider Max = ManySortedSign(# {a_Type,an_Adj,a_Term},({*,non_op} \/ Constructors),A,R #) as non empty non void strict Signature ;
Max is constructor
proof
thus
the
carrier of
Max = {a_Type,an_Adj,a_Term}
;
ABCMIZ_1:def 9 ( {*,non_op} c= the carrier' of Max & the Arity of Max . * = <*an_Adj,a_Type*> & the Arity of Max . non_op = <*an_Adj*> & the ResultSort of Max . * = a_Type & the ResultSort of Max . non_op = an_Adj & ( for o being Element of the carrier' of Max st o <> * & o <> non_op holds
the Arity of Max . o in {a_Term} * ) )
thus
{*,non_op} c= the
carrier' of
Max
by XBOOLE_1:7;
( the Arity of Max . * = <*an_Adj,a_Type*> & the Arity of Max . non_op = <*an_Adj*> & the ResultSort of Max . * = a_Type & the ResultSort of Max . non_op = an_Adj & ( for o being Element of the carrier' of Max st o <> * & o <> non_op holds
the Arity of Max . o in {a_Term} * ) )
A15:
* in {*,non_op}
by TARSKI:def 2;
A16:
non_op in {*,non_op}
by TARSKI:def 2;
thus the
Arity of
Max . * =
((*,non_op) --> (<*a,t*>,aa)) . *
by A3, A15, FUNCT_4:13
.=
<*an_Adj,a_Type*>
by FUNCT_4:63
;
( the Arity of Max . non_op = <*an_Adj*> & the ResultSort of Max . * = a_Type & the ResultSort of Max . non_op = an_Adj & ( for o being Element of the carrier' of Max st o <> * & o <> non_op holds
the Arity of Max . o in {a_Term} * ) )
thus the
Arity of
Max . non_op =
((*,non_op) --> (<*a,t*>,aa)) . non_op
by A3, A16, FUNCT_4:13
.=
<*an_Adj*>
by FUNCT_4:63
;
( the ResultSort of Max . * = a_Type & the ResultSort of Max . non_op = an_Adj & ( for o being Element of the carrier' of Max st o <> * & o <> non_op holds
the Arity of Max . o in {a_Term} * ) )
thus the
ResultSort of
Max . * =
((*,non_op) --> (t,a)) . *
by A4, A15, FUNCT_4:13
.=
a_Type
by FUNCT_4:63
;
( the ResultSort of Max . non_op = an_Adj & ( for o being Element of the carrier' of Max st o <> * & o <> non_op holds
the Arity of Max . o in {a_Term} * ) )
thus the
ResultSort of
Max . non_op =
((*,non_op) --> (t,a)) . non_op
by A4, A16, FUNCT_4:13
.=
an_Adj
by FUNCT_4:63
;
for o being Element of the carrier' of Max st o <> * & o <> non_op holds
the Arity of Max . o in {a_Term} *
let o be
Element of the
carrier' of
Max;
( o <> * & o <> non_op implies the Arity of Max . o in {a_Term} * )
assume that A17:
o <> *
and A18:
o <> non_op
;
the Arity of Max . o in {a_Term} *
A19:
not
o in {*,non_op}
by A17, A18, TARSKI:def 2;
then reconsider c =
o as
Element of
Constructors by XBOOLE_0:def 3;
reconsider tr =
tr as
Element of
{a_Term} by TARSKI:def 1;
the
Arity of
Max . o =
f . c
by A3, A5, A19, FUNCT_4:def 1
.=
(len (loci_of c)) |-> tr
by A1
;
hence
the
Arity of
Max . o in {a_Term} *
by FINSEQ_1:def 11;
verum
end;
then reconsider Max = Max as strict ConstructorSignature ;
take
Max
; ( the carrier' of Max = {*,non_op} \/ Constructors & ( for o being OperSymbol of Max st o is constructor holds
( the ResultSort of Max . o = o `1 & card ( the Arity of Max . o) = card ((o `2) `1) ) ) )
thus
the carrier' of Max = {*,non_op} \/ Constructors
; for o being OperSymbol of Max st o is constructor holds
( the ResultSort of Max . o = o `1 & card ( the Arity of Max . o) = card ((o `2) `1) )
let o be OperSymbol of Max; ( o is constructor implies ( the ResultSort of Max . o = o `1 & card ( the Arity of Max . o) = card ((o `2) `1) ) )
assume that
A20:
o <> *
and
A21:
o <> non_op
; ABCMIZ_1:def 11 ( the ResultSort of Max . o = o `1 & card ( the Arity of Max . o) = card ((o `2) `1) )
A22:
not o in {*,non_op}
by A20, A21, TARSKI:def 2;
then reconsider c = o as Element of Constructors by XBOOLE_0:def 3;
thus the ResultSort of Max . o =
g . c
by A4, A6, A22, FUNCT_4:def 1
.=
o `1
by A2
; card ( the Arity of Max . o) = card ((o `2) `1)
thus card ( the Arity of Max . o) =
card (f . c)
by A3, A5, A22, FUNCT_4:def 1
.=
card H2(c)
by A1
.=
card ((o `2) `1)
by CARD_1:def 7
; verum