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 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 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);
B0:
( dom (* ,non_op --> <*a,t*>,aa) = {* ,non_op } & dom (* ,non_op --> t,a) = {* ,non_op } & dom f = Constructors & dom g = Constructors )
by FUNCT_4:65, PARTFUN1:def 4;
then A3:
( dom (f +* (* ,non_op --> <*a,t*>,aa)) = {* ,non_op } \/ Constructors & dom (g +* (* ,non_op --> t,a)) = {* ,non_op } \/ Constructors )
by FUNCT_4:def 1;
rng f c= {a_Type ,an_Adj ,a_Term } *
then A5:
(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 A6:
(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:18;
then reconsider A = f +* (* ,non_op --> <*a,t*>,aa) as Function of ({* ,non_op } \/ Constructors ),({a_Type ,an_Adj ,a_Term } * ) by A3, A5, FUNCT_2:4, XBOOLE_1:1;
rng (g +* (* ,non_op --> t,a)) c= (rng g) \/ (rng (* ,non_op --> t,a))
by FUNCT_4:18;
then reconsider R = g +* (* ,non_op --> t,a) as Function of ({* ,non_op } \/ Constructors ),{a_Type ,an_Adj ,a_Term } by A3, A6, FUNCT_2:4, 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 }
;
:: according to ABCMIZ_1:def 9 :: thesis: ( {* ,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;
:: thesis: ( 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 } * ) )
B3:
(
* in {* ,non_op } &
non_op in {* ,non_op } )
by TARSKI:def 2;
hence the
Arity of
Max . * =
(* ,non_op --> <*a,t*>,aa) . *
by B0, FUNCT_4:14
.=
<*an_Adj ,a_Type *>
by FUNCT_4:66
;
:: thesis: ( 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 B0, B3, FUNCT_4:14
.=
<*an_Adj *>
by FUNCT_4:66
;
:: thesis: ( 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 B0, B3, FUNCT_4:14
.=
a_Type
by FUNCT_4:66
;
:: thesis: ( 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 B0, B3, FUNCT_4:14
.=
an_Adj
by FUNCT_4:66
;
:: thesis: 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;
:: thesis: ( o <> * & o <> non_op implies the Arity of Max . o in {a_Term } * )
assume
(
o <> * &
o <> non_op )
;
:: thesis: the Arity of Max . o in {a_Term } *
then B4:
not
o in {* ,non_op }
by 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 B0, B4, 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;
:: thesis: verum
end;
then reconsider Max = Max as strict ConstructorSignature ;
take
Max
; :: thesis: ( 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
; :: thesis: 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; :: thesis: ( o is constructor implies ( the ResultSort of Max . o = o `1 & card (the Arity of Max . o) = card ((o `2 ) `1 ) ) )
assume
( o <> * & o <> non_op )
; :: according to ABCMIZ_1:def 11 :: thesis: ( the ResultSort of Max . o = o `1 & card (the Arity of Max . o) = card ((o `2 ) `1 ) )
then C1:
not o in {* ,non_op }
by 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 B0, C1, FUNCT_4:def 1
.=
o `1
by A2
; :: thesis: card (the Arity of Max . o) = card ((o `2 ) `1 )
thus card (the Arity of Max . o) =
card (f . c)
by B0, C1, FUNCT_4:def 1
.=
card H2(c)
by A1
.=
card ((o `2 ) `1 )
by FINSEQ_1:def 18
; :: thesis: verum