:: Subtreeswyrzucenie slownika daje runtimowke
:: by Grzegorz Bancerek
::
:: Received November 25, 1994
:: Copyright (c) 1994 Association of Mizar Users


begin

definition
let D be non empty set ;
let F be non empty DTree-set of D;
let Tset be non empty Subset of ;
:: original: Element
redefine mode Element of Tset -> Element of F;
coherence
for b1 being Element of Tset holds b1 is Element of F
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;

Lm1: for n being set
for p being FinSequence st n in dom p holds
ex k being Element of NAT st
( n = k + 1 & k < len p )
proof end;

Lm2: now
let p, q be FinSequence; :: thesis: ( len p = len q & ( for i being Element of NAT st i < len p holds
p . (i + 1) = q . (i + 1) ) implies p = q )

assume that
A1: len p = len q and
A2: for i being Element of NAT st i < len p holds
p . (i + 1) = q . (i + 1) ; :: thesis: p = q
A3: now
let i be Nat; :: thesis: ( i in dom p implies p . i = q . i )
assume i in dom p ; :: thesis: p . i = q . i
then ex k being Element of NAT st
( i = k + 1 & k < len p ) by Lm1;
hence p . i = q . i by A2; :: thesis: verum
end;
dom p = dom q by A1, FINSEQ_3:31;
hence p = q by A3, FINSEQ_1:17; :: thesis: verum
end;

Lm3: for n being Element of NAT
for p being FinSequence st n < len p holds
( n + 1 in dom p & p . (n + 1) in rng p )
proof end;

Lm4: now
let p be FinSequence; :: thesis: for x being set st x in rng p holds
ex k being Element of NAT st
( k < len p & x = p . (k + 1) )

let x be set ; :: thesis: ( x in rng p implies ex k being Element of NAT st
( k < len p & x = p . (k + 1) ) )

assume x in rng p ; :: thesis: ex k being Element of NAT st
( k < len p & x = p . (k + 1) )

then consider y being set such that
A1: y in dom p and
A2: x = p . y by FUNCT_1:def 5;
ex k being Element of NAT st
( y = k + 1 & k < len p ) by A1, Lm1;
hence ex k being Element of NAT st
( k < len p & x = p . (k + 1) ) by A2; :: thesis: verum
end;

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

theorem Th2: :: TREES_9:2
for t being Tree
for p, q being FinSequence of NAT st p ^ q in t holds
t | (p ^ q) = (t | p) | q
proof end;

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

notation
let IT be DecoratedTree;
synonym root IT for trivial ;
end;

definition
let IT be DecoratedTree;
redefine attr IT is trivial means :Def1: :: TREES_9:def 1
dom IT = elementary_tree 0 ;
compatibility
( IT is root iff dom IT = elementary_tree 0 )
proof end;
end;

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

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

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

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

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

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

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

:: deftheorem Def2 defines finite-branching TREES_9:def 2 :
for IT being Tree holds
( IT is finite-branching iff for x being Element of IT holds succ x 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;

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

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

:: deftheorem Def4 defines finite-branching TREES_9:def 4 :
for IT being DecoratedTree holds
( IT is finite-branching iff dom IT 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
let t be finite-order DecoratedTree;
cluster dom t -> finite-order ;
coherence
dom t is finite-order
by Def3;
end;

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

registration
let t be finite-branching Tree;
let p be Element of t;
cluster succ p -> finite ;
coherence
succ p is finite
by Def2;
end;

scheme :: TREES_9:sch 1
FinOrdSet{ F1( set ) -> set , F2() -> finite set } :
for n being Element of NAT holds
( F1(n) in F2() iff n < card F2() )
provided
A1: for x being set st x in F2() holds
ex n being Element of NAT st x = F1(n) and
A2: for i, j being Element of NAT st i < j & F1(j) in F2() holds
F1(i) in F2() and
A3: for i, j being Element of NAT st F1(i) = F1(j) holds
i = j
proof end;

theorem Th7: :: TREES_9:7
for t being finite-branching Tree
for p being Element of t
for n being Element of NAT holds
( p ^ <*n*> in succ p iff n < card (succ p) )
proof end;

definition
let t be finite-branching Tree;
let p be Element of t;
func p succ -> one-to-one FinSequence of t means :Def5: :: TREES_9:def 5
( len it = card (succ p) & rng it = succ p & ( for i being Element of NAT st i < len it holds
it . (i + 1) = p ^ <*i*> ) );
existence
ex b1 being one-to-one FinSequence of t st
( len b1 = card (succ p) & rng b1 = succ p & ( for i being Element of NAT st i < len b1 holds
b1 . (i + 1) = p ^ <*i*> ) )
proof end;
uniqueness
for b1, b2 being one-to-one FinSequence of t st len b1 = card (succ p) & rng b1 = succ p & ( for i being Element of NAT st i < len b1 holds
b1 . (i + 1) = p ^ <*i*> ) & len b2 = card (succ p) & rng b2 = succ p & ( for i being Element of NAT st i < len b2 holds
b2 . (i + 1) = p ^ <*i*> ) holds
b1 = b2
proof end;
end;

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

definition
let t be finite-branching DecoratedTree;
let p be FinSequence;
assume A1: p in dom t ;
func succ t,p -> FinSequence means :Def6: :: TREES_9:def 6
ex q being Element of dom t st
( q = p & it = t * (q succ ) );
existence
ex b1 being FinSequence ex q being Element of dom t st
( q = p & b1 = t * (q succ ) )
proof end;
uniqueness
for b1, b2 being FinSequence st ex q being Element of dom t st
( q = p & b1 = t * (q succ ) ) & ex q being Element of dom t st
( q = p & b2 = t * (q succ ) ) holds
b1 = b2
;
end;

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

theorem Th8: :: TREES_9:8
for t being finite-branching DecoratedTree ex x being set ex p being DTree-yielding FinSequence st t = x -tree p
proof end;

registration
let t be finite DecoratedTree;
let p be Node of ;
cluster t | p -> finite ;
coherence
t | p is finite
;
end;

theorem :: TREES_9:9
canceled;

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

registration
let D be non empty set ;
let S be non empty Subset of ;
cluster -> finite Element of S;
coherence
for b1 being Element of S holds b1 is finite
;
end;

begin

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

:: deftheorem defines Subtrees TREES_9:def 7 :
for t being DecoratedTree holds Subtrees t = { (t | p) where p is Node of : verum } ;

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

definition
let D be non empty set ;
let t be DecoratedTree of D;
:: original: Subtrees
redefine func Subtrees t -> non empty Subset of ;
coherence
Subtrees t is non empty Subset of
proof end;
end;

definition
let D be non empty set ;
let t be finite DecoratedTree of D;
:: original: Subtrees
redefine func Subtrees t -> non empty Subset of ;
coherence
Subtrees t is non empty Subset of
proof end;
end;

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

theorem Th11: :: TREES_9:11
for x being set
for t being DecoratedTree holds
( x in Subtrees t iff ex n being Node of st x = t | n ) ;

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

theorem :: TREES_9:13
for t1, t2 being DecoratedTree st t1 is finite & Subtrees t1 = Subtrees t2 holds
t1 = t2
proof end;

theorem :: TREES_9:14
for t being DecoratedTree
for n being Node of holds Subtrees (t | n) c= Subtrees t
proof end;

definition
let t be DecoratedTree;
func FixedSubtrees t -> Subset of equals :: TREES_9:def 8
{ [p,(t | p)] where p is Node of : verum } ;
coherence
{ [p,(t | p)] where p is Node of : verum } is Subset of
proof end;
end;

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

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

theorem :: TREES_9:15
for x being set
for t being DecoratedTree holds
( x in FixedSubtrees t iff ex n being Node of st x = [n,(t | n)] ) ;

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

theorem :: TREES_9:17
for t1, t2 being DecoratedTree st FixedSubtrees t1 = FixedSubtrees t2 holds
t1 = t2
proof end;

definition
let t be DecoratedTree;
let C be set ;
func C -Subtrees t -> Subset of equals :: TREES_9:def 9
{ (t | p) where p is Node of : ( not p in Leaves (dom t) or t . p in C ) } ;
coherence
{ (t | p) where p is Node of : ( not p in Leaves (dom t) or t . p in C ) } is Subset of
proof end;
end;

:: deftheorem defines -Subtrees TREES_9:def 9 :
for t being DecoratedTree
for C being set holds C -Subtrees t = { (t | p) where p is Node of : ( not p in Leaves (dom t) or t . p in C ) } ;

theorem Th18: :: TREES_9:18
for x being set
for t being DecoratedTree
for C being set holds
( x in C -Subtrees t iff ex n being Node of st
( x = t | n & ( not n in Leaves (dom t) or t . n in C ) ) ) ;

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

definition
let t be finite DecoratedTree;
let C be set ;
func C -ImmediateSubtrees t -> Function of C -Subtrees t,(Subtrees t) * means :: TREES_9:def 10
for d being DecoratedTree st d in C -Subtrees t holds
for p being FinSequence of Subtrees t st p = it . d holds
d = (d . {} ) -tree p;
existence
ex b1 being Function of C -Subtrees t,(Subtrees t) * st
for d being DecoratedTree st d in C -Subtrees t holds
for p being FinSequence of Subtrees t st p = b1 . d holds
d = (d . {} ) -tree p
proof end;
uniqueness
for b1, b2 being Function of C -Subtrees t,(Subtrees t) * st ( for d being DecoratedTree st d in C -Subtrees t holds
for p being FinSequence of Subtrees t st p = b1 . d holds
d = (d . {} ) -tree p ) & ( for d being DecoratedTree st d in C -Subtrees t holds
for p being FinSequence of Subtrees t st p = b2 . d holds
d = (d . {} ) -tree p ) holds
b1 = b2
proof end;
end;

:: deftheorem defines -ImmediateSubtrees TREES_9:def 10 :
for t being finite DecoratedTree
for C being set
for b3 being Function of C -Subtrees t,(Subtrees t) * holds
( b3 = C -ImmediateSubtrees t iff for d being DecoratedTree st d in C -Subtrees t holds
for p being FinSequence of Subtrees t st p = b3 . d holds
d = (d . {} ) -tree p );

begin

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

:: deftheorem defines Subtrees TREES_9:def 11 :
for X being non empty constituted-DTrees set holds Subtrees X = { (t | p) where t is Element of X, p is Node of : verum } ;

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

definition
let D be non empty set ;
let X be non empty Subset of ;
:: original: Subtrees
redefine func Subtrees X -> non empty Subset of ;
coherence
Subtrees X is non empty Subset of
proof end;
end;

definition
let D be non empty set ;
let X be non empty Subset of ;
:: original: Subtrees
redefine func Subtrees X -> non empty Subset of ;
coherence
Subtrees X is non empty Subset of
proof end;
end;

theorem Th20: :: TREES_9:20
for x being set
for X being non empty constituted-DTrees set holds
( x in Subtrees X iff ex t being Element of X ex n being Node of st x = t | n ) ;

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

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

registration
let t be DecoratedTree;
cluster {t} -> constituted-DTrees ;
coherence
{t} is constituted-DTrees
by TREES_3:15;
end;

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

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

definition
let X be non empty constituted-DTrees set ;
let C be set ;
func C -Subtrees X -> Subset of equals :: TREES_9:def 12
{ (t | p) where t is Element of X, p is Node of : ( not p in Leaves (dom t) or t . p in C ) } ;
coherence
{ (t | p) where t is Element of X, p is Node of : ( not p in Leaves (dom t) or t . p in C ) } is Subset of
proof end;
end;

:: deftheorem defines -Subtrees TREES_9:def 12 :
for X being non empty constituted-DTrees set
for C being set holds C -Subtrees X = { (t | p) where t is Element of X, p is Node of : ( not p in Leaves (dom t) or t . p in C ) } ;

theorem Th25: :: TREES_9:25
for x, C being set
for X being non empty constituted-DTrees set holds
( x in C -Subtrees X iff ex t being Element of X ex n being Node of st
( x = t | n & ( not n in Leaves (dom t) or t . n in C ) ) ) ;

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

theorem :: TREES_9:27
for t being DecoratedTree
for C being set holds C -Subtrees {t} = C -Subtrees t
proof end;

theorem :: TREES_9:28
for C being set
for X being non empty constituted-DTrees set holds C -Subtrees X = union { (C -Subtrees t) where t is Element of X : verum }
proof end;

definition
let X be non empty constituted-DTrees set ;
assume A1: for t being Element of X holds t is finite ;
let C be set ;
func C -ImmediateSubtrees X -> Function of C -Subtrees X,(Subtrees X) * means :: TREES_9:def 13
for d being DecoratedTree st d in C -Subtrees X holds
for p being FinSequence of Subtrees X st p = it . d holds
d = (d . {} ) -tree p;
existence
ex b1 being Function of C -Subtrees X,(Subtrees X) * st
for d being DecoratedTree st d in C -Subtrees X holds
for p being FinSequence of Subtrees X st p = b1 . d holds
d = (d . {} ) -tree p
proof end;
uniqueness
for b1, b2 being Function of C -Subtrees X,(Subtrees X) * st ( for d being DecoratedTree st d in C -Subtrees X holds
for p being FinSequence of Subtrees X st p = b1 . d holds
d = (d . {} ) -tree p ) & ( for d being DecoratedTree st d in C -Subtrees X holds
for p being FinSequence of Subtrees X st p = b2 . d holds
d = (d . {} ) -tree p ) holds
b1 = b2
proof end;
end;

:: deftheorem defines -ImmediateSubtrees TREES_9:def 13 :
for X being non empty constituted-DTrees set st ( for t being Element of X holds t is finite ) holds
for C being set
for b3 being Function of C -Subtrees X,(Subtrees X) * holds
( b3 = C -ImmediateSubtrees X iff for d being DecoratedTree st d in C -Subtrees X holds
for p being FinSequence of Subtrees X st p = b3 . d holds
d = (d . {} ) -tree p );

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

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

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

theorem :: TREES_9:31
for t being finite DecoratedTree
for x being set
for p being DTree-yielding FinSequence st t = x -tree p holds
for n being empty Element of dom t holds succ t,n = roots p
proof end;

theorem :: TREES_9:32
for t being finite DecoratedTree
for p being Node of
for q being Node of holds succ t,(p ^ q) = succ (t | p),q
proof end;