Journal of Formalized Mathematics
Volume 8, 1996
University of Bialystok
Copyright (c) 1996
Association of Mizar Users
The abstract of the Mizar article:
-
- by
- Grzegorz Bancerek,
and
- Andrzej Trybulec
- Received January 12, 1996
- MML identifier: FUNCT_7
- [
Mizar article,
MML identifier index
]
environ
vocabulary FUNCT_1, RELAT_1, BOOLE, CAT_1, FUNCOP_1, FINSET_1, PBOOLE, CAT_4,
FUNCT_4, GR_CY_1, INT_1, FINSEQ_1, CARD_1, SETFAM_1, SUBSET_1, PRALG_1,
ZF_REFLE, FINSEQ_2, MCART_1, TARSKI, FINSEQ_4, REWRITE1, FUNCT_5,
FUNCT_2, FUNCT_7, PARTFUN1;
notation TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, NUMBERS, XREAL_0, NAT_1,
SETFAM_1, PBOOLE, DOMAIN_1, CARD_1, PRALG_1, RELAT_1, FUNCT_1, RELSET_1,
BINOP_1, FINSEQ_1, FINSET_1, CQC_LANG, CAT_4, PARTFUN1, FUNCOP_1,
FUNCT_2, FINSEQ_2, FUNCT_4, FUNCT_5, FINSEQ_4, GR_CY_1, REWRITE1;
constructors GR_CY_1, CQC_LANG, WELLORD2, NAT_1, CAT_4, BINOP_1, DOMAIN_1,
PRALG_1, REWRITE1, FINSEQ_4, FINSUB_1, PROB_1, MEMBERED;
clusters NUMBERS, SUBSET_1, RELAT_1, FUNCT_1, FINSEQ_1, RELSET_1, CARD_1,
FINSEQ_5, FUNCOP_1, FUNCT_4, CQC_LANG, SETFAM_1, NAT_1, PARTFUN1,
XREAL_0, INT_1, ZFMISC_1, FUNCT_2, ORDINAL2;
requirements NUMERALS, REAL, BOOLE, SUBSET, ARITHM;
begin :: Preliminaries
reserve a,x,y,A,B for set,
l,m,n for Nat;
theorem :: FUNCT_7:1
for f being Function, X being set st rng f c= X holds (id X)*f = f;
theorem :: FUNCT_7:2
for X being set, Y being non empty set,
f being Function of X,Y st f is one-to-one
for B being Subset of X, C being Subset of Y st C c= f.:B
holds f"C c= B;
theorem :: FUNCT_7:3
for X,Y be non empty set, f being Function of X,Y st f is one-to-one
for x being Element of X, A being Subset of X st f.x in f.:A
holds x in A;
theorem :: FUNCT_7:4
for X,Y be non empty set, f being Function of X,Y st f is one-to-one
for x being Element of X,
A being Subset of X, B being Subset of Y st f.x in f.:A \ B
holds x in A \ f"B;
theorem :: FUNCT_7:5
for X,Y be non empty set, f being Function of X,Y st f is one-to-one
for y being Element of Y,
A being Subset of X, B being Subset of Y st y in f.:A \ B
holds f".y in A \ f"B;
theorem :: FUNCT_7:6
for f being Function, a being set st a in dom f
holds f|{a} = a .--> f.a;
definition let x,y be set;
cluster x .--> y -> non empty;
end;
definition let x,y,a,b be set;
cluster (x,y) --> (a,b) -> non empty;
end;
theorem :: FUNCT_7:7
for I being set, M being ManySortedSet of I
for i being set st i in I holds i.--> (M.i) = M|{i};
theorem :: FUNCT_7:8
for I,J being set, M being ManySortedSet of [:I,J:]
for i,j being set st i in I & j in J holds (i,j):-> (M.(i,j)) = M|[:{i},{j}:]
;
canceled;
theorem :: FUNCT_7:10
for f,g,h being Function st rng g c= dom f & rng h c= dom f
holds f*(g +* h) = (f*g) +* (f*h);
theorem :: FUNCT_7:11
for f,g,h being Function holds
(g +* h)*f = (g*f) +* (h*f);
theorem :: FUNCT_7:12
for f,g,h being Function st rng f misses dom g
holds (h +* g)*f = h*f;
theorem :: FUNCT_7:13
for A,B be set, y be set st A meets rng(id B +* (A --> y))
holds y in A;
theorem :: FUNCT_7:14
for x,y be set, A be set st x <> y
holds not x in rng(id A +* (x .--> y));
theorem :: FUNCT_7:15
for X being set, a being set, f being Function st dom f = X \/ {a}
holds f = f|X +* (a .--> f.a);
theorem :: FUNCT_7:16
for f being Function, X,y,z being set
holds (f+*(X-->y))+*(X-->z) = f+*(X-->z);
theorem :: FUNCT_7:17
0 < m & m <= n implies Segm m c= Segm n;
theorem :: FUNCT_7:18
INT <> INT*;
theorem :: FUNCT_7:19
{}* = {{}};
theorem :: FUNCT_7:20
<*x*> in A* iff x in A;
theorem :: FUNCT_7:21
A c= B iff A* c= B*;
theorem :: FUNCT_7:22
for A being Subset of NAT st
for n,m st n in A & m < n holds m in A
holds A is Cardinal;
theorem :: FUNCT_7:23
for A being finite set, X being non empty Subset-Family of A
ex C being Element of X st
for B being Element of X holds B c= C implies B = C;
theorem :: FUNCT_7:24
for p,q being FinSequence st len p = len q+1
for i being Nat holds i in dom q iff i in dom p & i+1 in dom p;
definition
cluster Function-yielding non empty non-empty FinSequence;
end;
definition
cluster {} -> Function-yielding;
let f be Function;
cluster <*f*> -> Function-yielding;
let g be Function;
cluster <*f,g*> -> Function-yielding;
let h be Function;
cluster <*f,g,h*> -> Function-yielding;
end;
definition let n be Nat, f be Function;
cluster n|->f -> Function-yielding;
end;
definition
let p be FinSequence, q be non empty FinSequence;
cluster p^q -> non empty;
cluster q^p -> non empty;
end;
definition
let p,q be Function-yielding FinSequence;
cluster p^q -> Function-yielding;
end;
theorem :: FUNCT_7:25
for p,q being FinSequence st p^q is Function-yielding
holds p is Function-yielding & q is Function-yielding;
begin :: Some useful schemes
scheme Kappa2D{ X,Y,Z()->non empty set,F(Element of X(),Element of Y())->set}:
ex f being Function of [:X(),Y():], Z()
st for x being Element of X(), y being Element of Y() holds f.[x,y]=F(x,y)
provided
for x being Element of X(), y being Element of Y() holds F(x,y) in Z();
scheme FinMono{ A() -> set, D() -> non empty set, F,G(set) -> set }:
{ F(d) where d is Element of D() : G(d) in A() } is finite
provided
A() is finite and
for d1,d2 being Element of D() st G(d1) = G(d2) holds d1 = d2;
scheme CardMono{ A() -> set, D() -> non empty set, G(set) -> set }:
A(),{ d where d is Element of D() : G(d) in A() } are_equipotent
provided
for x being set st x in A() ex d being Element of D() st x = G(d) and
for d1,d2 being Element of D() st G(d1) = G(d2) holds d1 = d2;
scheme CardMono'{ A() -> set, D() -> non empty set, G(set) -> set }:
A(),{ G(d) where d is Element of D() : d in A() } are_equipotent
provided
A() c= D() and
for d1,d2 being Element of D() st G(d1) = G(d2) holds d1 = d2;
scheme FuncSeqInd {P[set]}:
for p being Function-yielding FinSequence holds P[p]
provided
P[ {} ] and
for p being Function-yielding FinSequence st P[p]
for f being Function holds P[p^<*f*>];
begin :: Some auxiliary concepts
definition let x, y be set;
assume
x in y;
func In (x, y) -> Element of y equals
:: FUNCT_7:def 1
x;
end;
theorem :: FUNCT_7:26
x in A /\ B implies In (x,A) = In (x,B);
definition let f,g be Function; let A be set;
pred f,g equal_outside A means
:: FUNCT_7:def 2
f|(dom f \ A) = g|(dom g \ A);
end;
theorem :: FUNCT_7:27
for f be Function, A be set
holds f,f equal_outside A;
theorem :: FUNCT_7:28
for f,g be Function, A be set st f,g equal_outside A
holds g,f equal_outside A;
theorem :: FUNCT_7:29
for f,g,h be Function, A be set
st f,g equal_outside A & g,h equal_outside A
holds f,h equal_outside A;
theorem :: FUNCT_7:30
for f,g be Function, A be set st f,g equal_outside A
holds dom f \ A = dom g \ A;
theorem :: FUNCT_7:31
for f,g being Function, A be set st dom g c= A
holds f, f +* g equal_outside A;
definition let f be Function, i, x be set;
func f+*(i,x) -> Function equals
:: FUNCT_7:def 3
f+*(i.-->x) if i in dom f
otherwise f;
end;
theorem :: FUNCT_7:32
for f be Function, d,i be set holds dom(f+*(i,d)) = dom f;
theorem :: FUNCT_7:33
for f be Function, d,i be set st i in dom f holds (f+*(i,d)).i = d;
theorem :: FUNCT_7:34
for f be Function, d,i,j be set st i <> j
holds (f+*(i,d)).j = f.j;
theorem :: FUNCT_7:35
for f be Function, d,e,i,j be set st i <> j
holds f+*(i,d)+*(j,e) = f+*(j,e)+*(i,d);
theorem :: FUNCT_7:36
for f be Function, d,e,i be set
holds f+*(i,d)+*(i,e) = f+*(i,e);
theorem :: FUNCT_7:37
for f be Function, i be set holds f+*(i,f.i) = f;
definition let f be FinSequence, i be Nat, x be set;
cluster f+*(i,x) -> FinSequence-like;
end;
definition let D be set, f be FinSequence of D, i be Nat, d be Element of D;
redefine func f+*(i,d) -> FinSequence of D;
end;
theorem :: FUNCT_7:38
for D be non empty set, f be FinSequence of D, d be Element of D, i be Nat
st i in dom f
holds (f+*(i,d))/.i = d;
theorem :: FUNCT_7:39
for D be non empty set, f be FinSequence of D, d be Element of D, i,j be Nat
st i <> j & j in dom f
holds (f+*(i,d))/.j = f/.j;
theorem :: FUNCT_7:40
for D be non empty set, f be FinSequence of D, d,e be Element of D, i be Nat
holds f+*(i,f/.i) = f;
begin :: On the composition of a finite sequence of functions
definition
let X be set;
let p be Function-yielding FinSequence;
func compose(p,X) -> Function means
:: FUNCT_7:def 4
ex f being ManySortedFunction of NAT st it = f.len p & f.0 = id X &
for i being Nat st i+1 in dom p
for g,h being Function st g = f.i & h = p.(i+1) holds f.(i+1) = h*g;
end;
definition
let p be Function-yielding FinSequence;
let x be set;
func apply(p,x) -> FinSequence means
:: FUNCT_7:def 5
len it = len p+1 & it.1 = x &
for i being Nat, f being Function st i in dom p & f = p.i
holds it.(i+1) = f.(it.i);
end;
reserve X,Y,x for set, p,q for Function-yielding FinSequence,
f,g,h for Function;
theorem :: FUNCT_7:41
compose({},X) = id X;
theorem :: FUNCT_7:42
apply({},x) = <*x*>;
theorem :: FUNCT_7:43
compose(p^<*f*>,X) = f*compose(p,X);
theorem :: FUNCT_7:44
apply(p^<*f*>,x) = apply(p,x)^<*f.(apply(p,x).(len p+1))*>;
theorem :: FUNCT_7:45
compose(<*f*>^p,X) = compose(p,f.:X)*(f|X);
theorem :: FUNCT_7:46
apply(<*f*>^p,x) = <*x*>^apply(p,f.x);
theorem :: FUNCT_7:47
compose(<*f*>,X) = f*id X;
theorem :: FUNCT_7:48
dom f c= X implies compose(<*f*>,X) = f;
theorem :: FUNCT_7:49
apply(<*f*>,x) = <*x,f.x*>;
theorem :: FUNCT_7:50
rng compose(p,X) c= Y implies compose(p^q,X) = compose(q,Y)*compose(p,X);
theorem :: FUNCT_7:51
apply(p^q,x).(len (p^q)+1) = apply(q,apply(p,x).(len p+1)).(len q+1);
theorem :: FUNCT_7:52
apply(p^q,x) = apply(p,x)$^apply(q,apply(p,x).(len p+1));
theorem :: FUNCT_7:53
compose(<*f,g*>,X) = g*f*id X;
theorem :: FUNCT_7:54
dom f c= X or dom(g*f) c= X implies compose(<*f,g*>,X) = g*f;
theorem :: FUNCT_7:55
apply(<*f,g*>,x) = <*x,f.x,g.(f.x)*>;
theorem :: FUNCT_7:56
compose(<*f,g,h*>,X) = h*g*f*id X;
theorem :: FUNCT_7:57
dom f c= X or dom(g*f) c= X or dom(h*g*f) c= X implies
compose(<*f,g,h*>,X) = h*g*f;
theorem :: FUNCT_7:58
apply(<*f,g,h*>,x) = <*x*>^<*f.x,g.(f.x),h.(g.(f.x))*>;
definition
let F be FinSequence;
func firstdom F means
:: FUNCT_7:def 6
it is empty if F is empty otherwise it = proj1 (F.1);
func lastrng F means
:: FUNCT_7:def 7
it is empty if F is empty otherwise it = proj2 (F.len F);
end;
theorem :: FUNCT_7:59
firstdom {} = {} & lastrng {} = {};
theorem :: FUNCT_7:60
for p being FinSequence holds
firstdom (<*f*>^p) = dom f & lastrng (p^<*f*>) = rng f;
theorem :: FUNCT_7:61
for p being Function-yielding FinSequence st p <> {}
holds rng compose(p,X) c= lastrng p;
definition let IT be FinSequence;
attr IT is FuncSeq-like means
:: FUNCT_7:def 8
ex p being FinSequence st len p = len IT+1 &
for i being Nat st i in dom IT holds IT.i in Funcs(p.i, p.(i+1));
end;
theorem :: FUNCT_7:62
for p,q being FinSequence st p^q is FuncSeq-like
holds p is FuncSeq-like & q is FuncSeq-like;
definition
cluster FuncSeq-like -> Function-yielding FinSequence;
end;
definition
cluster empty -> FuncSeq-like FinSequence;
end;
definition let f be Function;
cluster <*f*> -> FuncSeq-like;
end;
definition
cluster FuncSeq-like non empty non-empty FinSequence;
end;
definition
mode FuncSequence is FuncSeq-like FinSequence;
end;
theorem :: FUNCT_7:63
for p being FuncSequence st p <> {}
holds dom compose(p,X) = (firstdom p) /\ X;
theorem :: FUNCT_7:64
for p being FuncSequence holds
dom compose(p,firstdom p) = firstdom p;
theorem :: FUNCT_7:65
for p being FuncSequence, f being Function st rng f c= firstdom p
holds <*f*>^p is FuncSequence;
theorem :: FUNCT_7:66
for p being FuncSequence, f being Function st lastrng p c= dom f
holds p^<*f*> is FuncSequence;
theorem :: FUNCT_7:67
for p being FuncSequence st x in firstdom p & x in X
holds apply(p,x).(len p+1) = compose(p,X).x;
definition
let X,Y be set such that
Y is empty implies X is empty;
mode FuncSequence of X,Y -> FuncSequence means
:: FUNCT_7:def 9
firstdom it = X & lastrng it c= Y;
end;
definition
let Y be non empty set, X be set;
let F be FuncSequence of X,Y;
redefine func compose(F,X) -> Function of X,Y;
end;
definition
let q be non-empty non empty FinSequence;
mode FuncSequence of q -> FinSequence means
:: FUNCT_7:def 10
len it+1 = len q &
for i being Nat st i in dom it holds it.i in Funcs(q.i,q.(i+1));
end;
definition
let q be non-empty non empty FinSequence;
cluster -> FuncSeq-like non-empty FuncSequence of q;
end;
theorem :: FUNCT_7:68
for q being non-empty non empty FinSequence, p being FuncSequence of q
st p <> {} holds firstdom p = q.1 & lastrng p c= q.len q;
theorem :: FUNCT_7:69
for q being non-empty non empty FinSequence, p being FuncSequence of q
holds dom compose(p,q.1) = q.1 & rng compose(p,q.1) c= q.len q;
definition let f be Function; let n be Element of NAT;
func iter (f,n) -> Function means
:: FUNCT_7:def 11
ex p being Function of NAT,PFuncs(dom f \/ rng f,dom f \/ rng f) st
it = p.n & p.0 = id(dom f \/ rng f) &
for k being Element of NAT ex g being Function st g = p.k & p.(k+1) = g*f;
end;
reserve m,n,k for Nat;
theorem :: FUNCT_7:70
iter (f,0) = id(dom f \/ rng f);
theorem :: FUNCT_7:71
iter(f,n+1) = iter(f,n)*f;
theorem :: FUNCT_7:72
iter(f,1) = f;
theorem :: FUNCT_7:73
iter(f,n+1) = f*iter(f,n);
theorem :: FUNCT_7:74
dom iter(f,n) c= dom f \/ rng f & rng iter(f,n) c= dom f \/ rng f;
theorem :: FUNCT_7:75
n <> 0 implies dom iter(f,n) c= dom f & rng iter(f,n) c= rng f;
theorem :: FUNCT_7:76
rng f c= dom f implies dom iter(f,n) = dom f & rng iter(f,n) c= dom f;
theorem :: FUNCT_7:77
iter(f,n)*id(dom f \/ rng f) = iter(f,n);
theorem :: FUNCT_7:78
id(dom f \/ rng f)*iter(f,n) = iter(f,n);
theorem :: FUNCT_7:79
iter(f,n)*iter(f,m) = iter(f,n+m);
theorem :: FUNCT_7:80
n <> 0 implies iter(iter(f,m),n) = iter(f,m*n);
theorem :: FUNCT_7:81
rng f c= dom f implies iter(iter(f,m),n) = iter(f,m*n);
theorem :: FUNCT_7:82
iter({},n) = {};
theorem :: FUNCT_7:83
iter(id(X),n) = id(X);
theorem :: FUNCT_7:84
rng f misses dom f implies iter(f,2) = {};
theorem :: FUNCT_7:85
for f being Function of X,X holds iter(f,n) is Function of X,X;
theorem :: FUNCT_7:86
for f being Function of X,X holds iter(f,0) = id X;
theorem :: FUNCT_7:87
for f being Function of X,X holds iter(iter(f,m),n) = iter(f,m*n);
theorem :: FUNCT_7:88
for f being PartFunc of X,X holds iter(f,n) is PartFunc of X,X;
theorem :: FUNCT_7:89
n <> 0 & a in X & f = X --> a implies iter(f,n) = f;
theorem :: FUNCT_7:90
for f being Function, n being Nat
holds iter(f,n) = compose(n|->f,dom f \/ rng f);
Back to top