:: TREES_9 semantic presentation

definition
let c1 be non empty set ;
let c2 be non empty DTree-set of c1;
let c3 be non empty Subset of c2;
redefine mode Element as Element of c3 -> Element of a2;
coherence
for b1 being Element of c3 holds b1 is Element of c2
proof end;
end;

registration
cluster finite -> finite-order set ;
coherence
for b1 being Tree st b1 is finite holds
b1 is finite-order
proof end;
end;

Lemma1: for b1 being set
for b2 being FinSequence st b1 in dom b2 holds
ex b3 being Nat st
( b1 = b3 + 1 & b3 < len b2 )
proof end;

E2: now
let c1, c2 be FinSequence;
assume that
E3: len c1 = len c2 and
E4: for b1 being Nat st b1 < len c1 holds
c1 . (b1 + 1) = c2 . (b1 + 1) ;
E5: dom c1 = dom c2 by E3, FINSEQ_3:31;
now
let c3 be Nat;
assume c3 in dom c1 ;
then consider c4 being Nat such that
E6: ( c3 = c4 + 1 & c4 < len c1 ) by Lemma1;
thus c1 . c3 = c2 . c3 by E4, E6;
end;
hence c1 = c2 by E5, FINSEQ_1:17;
end;

Lemma3: for b1 being Nat
for b2 being FinSequence st b1 < len b2 holds
( b1 + 1 in dom b2 & b2 . (b1 + 1) in rng b2 )
proof end;

E4: now
let c1 be FinSequence;
let c2 be set ;
assume c2 in rng c1 ;
then consider c3 being set such that
E5: ( c3 in dom c1 & c2 = c1 . c3 ) by FUNCT_1:def 5;
ex b1 being Nat st
( c3 = b1 + 1 & b1 < len c1 ) by E5, Lemma1;
hence ex b1 being Nat st
( b1 < len c1 & c2 = c1 . (b1 + 1) ) by E5;
end;

theorem Th1: :: TREES_9:1
for b1 being DecoratedTree holds b1 | (<*> NAT ) = b1
proof end;

theorem Th2: :: TREES_9:2
for b1 being Tree
for b2, b3 being FinSequence of NAT st b2 ^ b3 in b1 holds
b1 | (b2 ^ b3) = (b1 | b2) | b3
proof end;

theorem Th3: :: TREES_9:3
for b1 being DecoratedTree
for b2, b3 being FinSequence of NAT st b2 ^ b3 in dom b1 holds
b1 | (b2 ^ b3) = (b1 | b2) | b3
proof end;

definition
let c1 be DecoratedTree;
attr a1 is root means :Def1: :: TREES_9:def 1
dom a1 = elementary_tree 0;
end;

:: deftheorem Def1 defines root TREES_9:def 1 :
for b1 being DecoratedTree holds
( b1 is root iff dom b1 = elementary_tree 0 );

registration
cluster root -> finite set ;
coherence
for b1 being DecoratedTree st b1 is root holds
b1 is finite
proof end;
end;

theorem Th4: :: TREES_9:4
for b1 being DecoratedTree holds
( b1 is root iff {} in Leaves (dom b1) )
proof end;

theorem Th5: :: TREES_9:5
for b1 being Tree
for b2 being Element of b1 holds
( b1 | b2 = elementary_tree 0 iff b2 in Leaves b1 )
proof end;

theorem Th6: :: TREES_9:6
for b1 being DecoratedTree
for b2 being Node of b1 holds
( b1 | b2 is root iff b2 in Leaves (dom b1) )
proof end;

registration
cluster finite root set ;
existence
ex b1 being DecoratedTree st b1 is root
proof end;
cluster finite non root set ;
existence
ex b1 being DecoratedTree st
( b1 is finite & not b1 is root )
proof end;
end;

registration
let c1 be set ;
cluster root-tree a1 -> finite root ;
coherence
( root-tree c1 is finite & root-tree c1 is root )
proof end;
end;

definition
let c1 be Tree;
attr a1 is finite-branching means :Def2: :: TREES_9:def 2
for b1 being Element of a1 holds succ b1 is finite;
end;

:: deftheorem Def2 defines finite-branching TREES_9:def 2 :
for b1 being Tree holds
( b1 is finite-branching iff for b2 being Element of b1 holds succ b2 is finite );

registration
cluster finite-order -> finite-branching set ;
coherence
for b1 being Tree st b1 is finite-order holds
b1 is finite-branching
proof end;
end;

registration
cluster finite finite-order finite-branching set ;
existence
ex b1 being Tree st b1 is finite
proof end;
end;

definition
let c1 be DecoratedTree;
attr a1 is finite-order means :Def3: :: TREES_9:def 3
dom a1 is finite-order;
attr a1 is finite-branching means :Def4: :: TREES_9:def 4
dom a1 is finite-branching;
end;

:: deftheorem Def3 defines finite-order TREES_9:def 3 :
for b1 being DecoratedTree holds
( b1 is finite-order iff dom b1 is finite-order );

:: deftheorem Def4 defines finite-branching TREES_9:def 4 :
for b1 being DecoratedTree holds
( b1 is finite-branching iff dom b1 is finite-branching );

registration
cluster finite -> finite-order set ;
coherence
for b1 being DecoratedTree st b1 is finite holds
b1 is finite-order
proof end;
cluster finite-order -> finite-branching set ;
coherence
for b1 being DecoratedTree st b1 is finite-order holds
b1 is finite-branching
proof end;
end;

registration
cluster finite finite-order finite-branching set ;
existence
ex b1 being DecoratedTree st b1 is finite
proof end;
end;

registration
let c1 be finite-order DecoratedTree;
cluster dom a1 -> finite-order finite-branching ;
coherence
dom c1 is finite-order
by Def3;
end;

registration
let c1 be finite-branching DecoratedTree;
cluster dom a1 -> finite-branching ;
coherence
dom c1 is finite-branching
by Def4;
end;

registration
let c1 be finite-branching Tree;
let c2 be Element of c1;
cluster succ a2 -> finite ;
coherence
succ c2 is finite
by Def2;
end;

scheme :: TREES_9:sch 1
s1{ F1( set ) -> set , F2() -> finite set } :
for b1 being Nat holds
( F1(b1) in F2() iff b1 < card F2() )
provided
E14: for b1 being set st b1 in F2() holds
ex b2 being Nat st b1 = F1(b2) and
E15: for b1, b2 being Nat st b1 < b2 & F1(b2) in F2() holds
F1(b1) in F2() and
E16: for b1, b2 being Nat st F1(b1) = F1(b2) holds
b1 = b2
proof end;

registration
let c1 be set ;
cluster one-to-one empty FinSequence of a1;
existence
ex b1 being FinSequence of c1 st
( b1 is one-to-one & b1 is empty )
proof end;
end;

theorem Th7: :: TREES_9:7
for b1 being finite-branching Tree
for b2 being Element of b1
for b3 being Nat holds
( b2 ^ <*b3*> in succ b2 iff b3 < card (succ b2) )
proof end;

definition
let c1 be finite-branching Tree;
let c2 be Element of c1;
func c2 succ -> one-to-one FinSequence of a1 means :Def5: :: TREES_9:def 5
( len a3 = card (succ a2) & rng a3 = succ a2 & ( for b1 being Nat st b1 < len a3 holds
a3 . (b1 + 1) = a2 ^ <*b1*> ) );
existence
ex b1 being one-to-one FinSequence of c1 st
( len b1 = card (succ c2) & rng b1 = succ c2 & ( for b2 being Nat st b2 < len b1 holds
b1 . (b2 + 1) = c2 ^ <*b2*> ) )
proof end;
uniqueness
for b1, b2 being one-to-one FinSequence of c1 st len b1 = card (succ c2) & rng b1 = succ c2 & ( for b3 being Nat st b3 < len b1 holds
b1 . (b3 + 1) = c2 ^ <*b3*> ) & len b2 = card (succ c2) & rng b2 = succ c2 & ( for b3 being Nat st b3 < len b2 holds
b2 . (b3 + 1) = c2 ^ <*b3*> ) holds
b1 = b2
proof end;
end;

:: deftheorem Def5 defines succ TREES_9:def 5 :
for b1 being finite-branching Tree
for b2 being Element of b1
for b3 being one-to-one FinSequence of b1 holds
( b3 = b2 succ iff ( len b3 = card (succ b2) & rng b3 = succ b2 & ( for b4 being Nat st b4 < len b3 holds
b3 . (b4 + 1) = b2 ^ <*b4*> ) ) );

definition
let c1 be finite-branching DecoratedTree;
let c2 be FinSequence;
assume E16: c2 in dom c1 ;
func succ c1,c2 -> FinSequence means :Def6: :: TREES_9:def 6
ex b1 being Element of dom a1 st
( b1 = a2 & a3 = a1 * (b1 succ ) );
existence
ex b1 being FinSequenceex b2 being Element of dom c1 st
( b2 = c2 & b1 = c1 * (b2 succ ) )
proof end;
uniqueness
for b1, b2 being FinSequence st ex b3 being Element of dom c1 st
( b3 = c2 & b1 = c1 * (b3 succ ) ) & ex b3 being Element of dom c1 st
( b3 = c2 & b2 = c1 * (b3 succ ) ) holds
b1 = b2
;
end;

:: deftheorem Def6 defines succ TREES_9:def 6 :
for b1 being finite-branching DecoratedTree
for b2 being FinSequence st b2 in dom b1 holds
for b3 being FinSequence holds
( b3 = succ b1,b2 iff ex b4 being Element of dom b1 st
( b4 = b2 & b3 = b1 * (b4 succ ) ) );

theorem Th8: :: TREES_9:8
for b1 being finite-branching DecoratedTree ex b2 being set ex b3 being DTree-yielding FinSequence st b1 = b2 -tree b3
proof end;

Lemma18: for b1 being finite DecoratedTree
for b2 being Node of b1 holds b1 | b2 is finite
;

registration
let c1 be finite DecoratedTree;
let c2 be Node of c1;
cluster a1 | a2 -> finite finite-order finite-branching ;
coherence
c1 | c2 is finite
;
end;

theorem Th9: :: TREES_9:9
canceled;

theorem Th10: :: TREES_9:10
for b1 being finite Tree
for b2 being Element of b1 st b1 = b1 | b2 holds
b2 = {}
proof end;

registration
let c1 be non empty set ;
let c2 be non empty Subset of (FinTrees c1);
cluster -> finite Element of a2;
coherence
for b1 being Element of c2 holds b1 is finite
proof end;
end;

definition
let c1 be DecoratedTree;
func Subtrees c1 -> set equals :: TREES_9:def 7
{ (a1 | b1) where B is Node of a1 : verum } ;
coherence
{ (c1 | b1) where B is Node of c1 : verum } is set
;
end;

:: deftheorem Def7 defines Subtrees TREES_9:def 7 :
for b1 being DecoratedTree holds Subtrees b1 = { (b1 | b2) where B is Node of b1 : verum } ;

registration
let c1 be DecoratedTree;
cluster Subtrees a1 -> non empty constituted-DTrees ;
coherence
( Subtrees c1 is constituted-DTrees & not Subtrees c1 is empty )
proof end;
end;

definition
let c1 be non empty set ;
let c2 be DecoratedTree of c1;
redefine func Subtrees as Subtrees c2 -> non empty Subset of (Trees a1);
coherence
Subtrees c2 is non empty Subset of (Trees c1)
proof end;
end;

definition
let c1 be non empty set ;
let c2 be finite DecoratedTree of c1;
redefine func Subtrees as Subtrees c2 -> non empty Subset of (FinTrees a1);
coherence
Subtrees c2 is non empty Subset of (FinTrees c1)
proof end;
end;

registration
let c1 be finite DecoratedTree;
cluster -> finite Element of Subtrees a1;
coherence
for b1 being Element of Subtrees c1 holds b1 is finite
proof end;
end;

theorem Th11: :: TREES_9:11
for b1 being set
for b2 being DecoratedTree holds
( b1 in Subtrees b2 iff ex b3 being Node of b2 st b1 = b2 | b3 ) ;

theorem Th12: :: TREES_9:12
for b1 being DecoratedTree holds b1 in Subtrees b1
proof end;

theorem Th13: :: TREES_9:13
for b1, b2 being DecoratedTree st b1 is finite & Subtrees b1 = Subtrees b2 holds
b1 = b2
proof end;

theorem Th14: :: TREES_9:14
for b1 being DecoratedTree
for b2 being Node of b1 holds Subtrees (b1 | b2) c= Subtrees b1
proof end;

definition
let c1 be DecoratedTree;
func FixedSubtrees c1 -> Subset of [:(dom a1),(Subtrees a1):] equals :: TREES_9:def 8
{ [b1,(a1 | b1)] where B is Node of a1 : verum } ;
coherence
{ [b1,(c1 | b1)] where B is Node of c1 : verum } is Subset of [:(dom c1),(Subtrees c1):]
proof end;
end;

:: deftheorem Def8 defines FixedSubtrees TREES_9:def 8 :
for b1 being DecoratedTree holds FixedSubtrees b1 = { [b2,(b1 | b2)] where B is Node of b1 : verum } ;

registration
let c1 be DecoratedTree;
cluster FixedSubtrees a1 -> non empty ;
coherence
not FixedSubtrees c1 is empty
proof end;
end;

theorem Th15: :: TREES_9:15
for b1 being set
for b2 being DecoratedTree holds
( b1 in FixedSubtrees b2 iff ex b3 being Node of b2 st b1 = [b3,(b2 | b3)] ) ;

theorem Th16: :: TREES_9:16
for b1 being DecoratedTree holds [{} ,b1] in FixedSubtrees b1
proof end;

theorem Th17: :: TREES_9:17
for b1, b2 being DecoratedTree st FixedSubtrees b1 = FixedSubtrees b2 holds
b1 = b2
proof end;

definition
let c1 be DecoratedTree;
let c2 be set ;
func c2 -Subtrees c1 -> Subset of (Subtrees a1) equals :: TREES_9:def 9
{ (a1 | b1) where B is Node of a1 : ( not b1 in Leaves (dom a1) or a1 . b1 in a2 ) } ;
coherence
{ (c1 | b1) where B is Node of c1 : ( not b1 in Leaves (dom c1) or c1 . b1 in c2 ) } is Subset of (Subtrees c1)
proof end;
end;

:: deftheorem Def9 defines -Subtrees TREES_9:def 9 :
for b1 being DecoratedTree
for b2 being set holds b2 -Subtrees b1 = { (b1 | b3) where B is Node of b1 : ( not b3 in Leaves (dom b1) or b1 . b3 in b2 ) } ;

theorem Th18: :: TREES_9:18
for b1 being set
for b2 being DecoratedTree
for b3 being set holds
( b1 in b3 -Subtrees b2 iff ex b4 being Node of b2 st
( b1 = b2 | b4 & ( not b4 in Leaves (dom b2) or b2 . b4 in b3 ) ) ) ;

theorem Th19: :: TREES_9:19
for b1 being DecoratedTree
for b2 being set holds
( b2 -Subtrees b1 is empty iff ( b1 is root & not b1 . {} in b2 ) )
proof end;

definition
let c1 be finite DecoratedTree;
let c2 be set ;
func c2 -ImmediateSubtrees c1 -> Function of a2 -Subtrees a1,(Subtrees a1) * means :: TREES_9:def 10
for b1 being DecoratedTree st b1 in a2 -Subtrees a1 holds
for b2 being FinSequence of Subtrees a1 st b2 = a3 . b1 holds
b1 = (b1 . {} ) -tree b2;
existence
ex b1 being Function of c2 -Subtrees c1,(Subtrees c1) * st
for b2 being DecoratedTree st b2 in c2 -Subtrees c1 holds
for b3 being FinSequence of Subtrees c1 st b3 = b1 . b2 holds
b2 = (b2 . {} ) -tree b3
proof end;
uniqueness
for b1, b2 being Function of c2 -Subtrees c1,(Subtrees c1) * st ( for b3 being DecoratedTree st b3 in c2 -Subtrees c1 holds
for b4 being FinSequence of Subtrees c1 st b4 = b1 . b3 holds
b3 = (b3 . {} ) -tree b4 ) & ( for b3 being DecoratedTree st b3 in c2 -Subtrees c1 holds
for b4 being FinSequence of Subtrees c1 st b4 = b2 . b3 holds
b3 = (b3 . {} ) -tree b4 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def10 defines -ImmediateSubtrees TREES_9:def 10 :
for b1 being finite DecoratedTree
for b2 being set
for b3 being Function of b2 -Subtrees b1,(Subtrees b1) * holds
( b3 = b2 -ImmediateSubtrees b1 iff for b4 being DecoratedTree st b4 in b2 -Subtrees b1 holds
for b5 being FinSequence of Subtrees b1 st b5 = b3 . b4 holds
b4 = (b4 . {} ) -tree b5 );

definition
let c1 be non empty constituted-DTrees set ;
func Subtrees c1 -> set equals :: TREES_9:def 11
{ (b1 | b2) where B is Element of a1, B is Node of b1 : verum } ;
coherence
{ (b1 | b2) where B is Element of c1, B is Node of b1 : verum } is set
;
end;

:: deftheorem Def11 defines Subtrees TREES_9:def 11 :
for b1 being non empty constituted-DTrees set holds Subtrees b1 = { (b2 | b3) where B is Element of b1, B is Node of b2 : verum } ;

registration
let c1 be non empty constituted-DTrees set ;
cluster Subtrees a1 -> non empty constituted-DTrees ;
coherence
( Subtrees c1 is constituted-DTrees & not Subtrees c1 is empty )
proof end;
end;

definition
let c1 be non empty set ;
let c2 be non empty Subset of (Trees c1);
redefine func Subtrees as Subtrees c2 -> non empty Subset of (Trees a1);
coherence
Subtrees c2 is non empty Subset of (Trees c1)
proof end;
end;

definition
let c1 be non empty set ;
let c2 be non empty Subset of (FinTrees c1);
redefine func Subtrees as Subtrees c2 -> non empty Subset of (FinTrees a1);
coherence
Subtrees c2 is non empty Subset of (FinTrees c1)
proof end;
end;

theorem Th20: :: TREES_9:20
for b1 being set
for b2 being non empty constituted-DTrees set holds
( b1 in Subtrees b2 iff ex b3 being Element of b2ex b4 being Node of b3 st b1 = b3 | b4 ) ;

theorem Th21: :: TREES_9:21
for b1 being DecoratedTree
for b2 being non empty constituted-DTrees set st b1 in b2 holds
b1 in Subtrees b2
proof end;

theorem Th22: :: TREES_9:22
for b1, b2 being non empty constituted-DTrees set st b1 c= b2 holds
Subtrees b1 c= Subtrees b2
proof end;

registration
let c1 be DecoratedTree;
cluster {a1} -> non empty constituted-DTrees ;
coherence
( not {c1} is empty & {c1} is constituted-DTrees )
by TREES_3:15;
end;

theorem Th23: :: TREES_9:23
for b1 being DecoratedTree holds Subtrees {b1} = Subtrees b1
proof end;

theorem Th24: :: TREES_9:24
for b1 being non empty constituted-DTrees set holds Subtrees b1 = union { (Subtrees b2) where B is Element of b1 : verum }
proof end;

definition
let c1 be non empty constituted-DTrees set ;
let c2 be set ;
func c2 -Subtrees c1 -> Subset of (Subtrees a1) equals :: TREES_9:def 12
{ (b1 | b2) where B is Element of a1, B is Node of b1 : ( not b2 in Leaves (dom b1) or b1 . b2 in a2 ) } ;
coherence
{ (b1 | b2) where B is Element of c1, B is Node of b1 : ( not b2 in Leaves (dom b1) or b1 . b2 in c2 ) } is Subset of (Subtrees c1)
proof end;
end;

:: deftheorem Def12 defines -Subtrees TREES_9:def 12 :
for b1 being non empty constituted-DTrees set
for b2 being set holds b2 -Subtrees b1 = { (b3 | b4) where B is Element of b1, B is Node of b3 : ( not b4 in Leaves (dom b3) or b3 . b4 in b2 ) } ;

theorem Th25: :: TREES_9:25
for b1, b2 being set
for b3 being non empty constituted-DTrees set holds
( b1 in b2 -Subtrees b3 iff ex b4 being Element of b3ex b5 being Node of b4 st
( b1 = b4 | b5 & ( not b5 in Leaves (dom b4) or b4 . b5 in b2 ) ) ) ;

theorem Th26: :: TREES_9:26
for b1 being set
for b2 being non empty constituted-DTrees set holds
( b1 -Subtrees b2 is empty iff for b3 being Element of b2 holds
( b3 is root & not b3 . {} in b1 ) )
proof end;

theorem Th27: :: TREES_9:27
for b1 being DecoratedTree
for b2 being set holds b2 -Subtrees {b1} = b2 -Subtrees b1
proof end;

theorem Th28: :: TREES_9:28
for b1 being set
for b2 being non empty constituted-DTrees set holds b1 -Subtrees b2 = union { (b1 -Subtrees b3) where B is Element of b2 : verum }
proof end;

definition
let c1 be non empty constituted-DTrees set ;
assume E26: for b1 being Element of c1 holds b1 is finite ;
let c2 be set ;
func c2 -ImmediateSubtrees c1 -> Function of a2 -Subtrees a1,(Subtrees a1) * means :: TREES_9:def 13
for b1 being DecoratedTree st b1 in a2 -Subtrees a1 holds
for b2 being FinSequence of Subtrees a1 st b2 = a3 . b1 holds
b1 = (b1 . {} ) -tree b2;
existence
ex b1 being Function of c2 -Subtrees c1,(Subtrees c1) * st
for b2 being DecoratedTree st b2 in c2 -Subtrees c1 holds
for b3 being FinSequence of Subtrees c1 st b3 = b1 . b2 holds
b2 = (b2 . {} ) -tree b3
proof end;
uniqueness
for b1, b2 being Function of c2 -Subtrees c1,(Subtrees c1) * st ( for b3 being DecoratedTree st b3 in c2 -Subtrees c1 holds
for b4 being FinSequence of Subtrees c1 st b4 = b1 . b3 holds
b3 = (b3 . {} ) -tree b4 ) & ( for b3 being DecoratedTree st b3 in c2 -Subtrees c1 holds
for b4 being FinSequence of Subtrees c1 st b4 = b2 . b3 holds
b3 = (b3 . {} ) -tree b4 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def13 defines -ImmediateSubtrees TREES_9:def 13 :
for b1 being non empty constituted-DTrees set st ( for b2 being Element of b1 holds b2 is finite ) holds
for b2 being set
for b3 being Function of b2 -Subtrees b1,(Subtrees b1) * holds
( b3 = b2 -ImmediateSubtrees b1 iff for b4 being DecoratedTree st b4 in b2 -Subtrees b1 holds
for b5 being FinSequence of Subtrees b1 st b5 = b3 . b4 holds
b4 = (b4 . {} ) -tree b5 );

registration
let c1 be Tree;
cluster empty Element of a1;
existence
ex b1 being Element of c1 st b1 is empty
proof end;
end;

theorem Th29: :: TREES_9:29
for b1 being finite DecoratedTree
for b2 being Element of dom b1 holds
( len (succ b1,b2) = len (b2 succ ) & dom (succ b1,b2) = dom (b2 succ ) )
proof end;

theorem Th30: :: TREES_9:30
for b1 being FinTree-yielding FinSequence
for b2 being empty Element of tree b1 holds card (succ b2) = len b1
proof end;

theorem Th31: :: TREES_9:31
for b1 being finite DecoratedTree
for b2 being set
for b3 being DTree-yielding FinSequence st b1 = b2 -tree b3 holds
for b4 being empty Element of dom b1 holds succ b1,b4 = roots b3
proof end;

theorem Th32: :: TREES_9:32
for b1 being finite DecoratedTree
for b2 being Node of b1
for b3 being Node of (b1 | b2) holds succ b1,(b2 ^ b3) = succ (b1 | b2),b3
proof end;