:: Binary Operations Applied to Functions
:: by Andrzej Trybulec
::
:: Received September 4, 1989
:: Copyright (c) 1990-2021 Association of Mizar Users
:: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.
environ
vocabularies FUNCT_1, FUNCT_3, PARTFUN1, RELAT_1, ZFMISC_1, XBOOLE_0, TARSKI,
SUBSET_1, BINOP_1, MCART_1, FUNCOP_1, WELLORD1, MSUALG_4, FUNCT_2;
notations TARSKI, XBOOLE_0, ZFMISC_1, XTUPLE_0, SUBSET_1, MCART_1, RELAT_1,
FUNCT_1, RELSET_1, PARTFUN1, FUNCT_2, FUNCT_3, BINOP_1, WELLORD1;
constructors PARTFUN1, BINOP_1, FUNCT_3, RELSET_1, WELLORD1, XTUPLE_0;
registrations XBOOLE_0, SUBSET_1, RELAT_1, FUNCT_1, FUNCT_2, RELSET_1;
requirements SUBSET, BOOLE;
begin
reserve f,g,h for Function,
A for set;
theorem :: FUNCOP_1:1
delta A = <:id A, id A:>;
reserve F for Function,
B,x,y,y1,y2,z for set;
definition
let f;
func f~ -> Function means
:: FUNCOP_1:def 1
dom it = dom f & for x being object st x in dom f holds
(for y,z being object st f.x = [y,z] holds it.x = [z,y]) &
(f.x = it.x or ex y,z being object st f.x =[y,z]);
involutiveness;
end;
theorem :: FUNCOP_1:2
<:f,g:> = <:g,f:>~;
theorem :: FUNCOP_1:3
(f|A)~ = f~|A;
theorem :: FUNCOP_1:4
(delta A)~ = delta A;
theorem :: FUNCOP_1:5
<:f,g:>|A = <:f|A,g:>;
theorem :: FUNCOP_1:6
<:f,g:>|A = <:f,g|A:>;
definition
let A be set, z be object;
func A --> z -> set equals
:: FUNCOP_1:def 2
[:A, {z}:];
end;
registration
let A be set, z be object;
cluster A --> z -> Function-like Relation-like;
end;
reserve x,z for object;
theorem :: FUNCOP_1:7
x in A implies (A --> z).x = z;
registration
let A be non empty set, x be object, a be Element of A;
reduce (A --> x).a to x;
end;
theorem :: FUNCOP_1:8
A <> {} implies rng (A --> x) = {x};
theorem :: FUNCOP_1:9
rng f = {x} implies f = (dom f) --> x;
registration
let x be object;
cluster {} --> x -> empty;
end;
registration
let x be object;
let A be empty set;
cluster A --> x -> empty;
end;
registration
let x be object;
let A be non empty set;
cluster A --> x -> non empty;
end;
theorem :: FUNCOP_1:10
dom ({} --> x) = {} & rng ({} --> x) = {};
theorem :: FUNCOP_1:11
(for z st z in dom f holds f.z = x) implies f = dom f --> x;
theorem :: FUNCOP_1:12
(A --> x)|B = A /\ B --> x;
theorem :: FUNCOP_1:13
dom (A --> x) = A & rng (A --> x) c= {x};
registration
let X be set, a be object;
reduce dom (X --> a) to X;
end;
registration let D be set;
cluster D --> {} -> empty-yielding;
end;
theorem :: FUNCOP_1:14
x in B implies (A --> x)"B = A;
theorem :: FUNCOP_1:15
(A --> x)"{x} = A;
theorem :: FUNCOP_1:16
not x in B implies (A --> x)"B = {};
theorem :: FUNCOP_1:17
x in dom h implies h*(A --> x) = A --> h.x;
theorem :: FUNCOP_1:18
A <> {} & x in dom h implies dom(h*(A --> x)) <> {};
theorem :: FUNCOP_1:19
(A --> x)*h = h"A --> x;
theorem :: FUNCOP_1:20
(A --> [x,y])~ = A --> [y,x];
definition
let F,f,g;
func F.:(f,g) -> set equals
:: FUNCOP_1:def 3
F * <:f,g:>;
end;
registration
let F,f,g;
cluster F.:(f,g) -> Function-like Relation-like;
end;
theorem :: FUNCOP_1:21
for h st dom h = dom(F.:(f,g)) & for z being set st z in dom (F.:(f,g)
) holds h.z = F.(f.z,g.z) holds h = F.:(f,g);
theorem :: FUNCOP_1:22
x in dom (F.:(f,g)) implies (F.:(f,g)).x = F.(f.x,g.x);
theorem :: FUNCOP_1:23
f|A = g|A implies (F.:(f,h))|A = (F.:(g,h))|A;
theorem :: FUNCOP_1:24
f|A = g|A implies (F.:(h,f))|A = (F.:(h,g))|A;
theorem :: FUNCOP_1:25
F.:(f,g)*h = F.:(f*h, g*h);
definition
let F,f,x;
func F[:](f,x) -> set equals
:: FUNCOP_1:def 4
F * <:f, dom f --> x:>;
end;
registration
let F,f,x;
cluster F[:](f,x) -> Function-like Relation-like;
end;
theorem :: FUNCOP_1:26
F[:](f,x) = F.:(f, dom f --> x);
theorem :: FUNCOP_1:27
x in dom (F[:](f,z)) implies (F[:](f,z)).x = F.(f.x,z);
theorem :: FUNCOP_1:28
f|A = g|A implies (F[:](f,x))|A = (F[:](g,x))|A;
theorem :: FUNCOP_1:29
F[:](f,x)*h = F[:](f*h,x);
theorem :: FUNCOP_1:30
F[:](f,x)*id A = F[:](f|A,x);
definition
let F,x,g;
func F[;](x,g) -> set equals
:: FUNCOP_1:def 5
F * <:dom g --> x, g:>;
end;
registration
let F,x,g;
cluster F[;](x,g) -> Function-like Relation-like;
end;
theorem :: FUNCOP_1:31
F[;](x,g) = F.:(dom g --> x, g);
theorem :: FUNCOP_1:32
x in dom (F[;](z,f)) implies (F[;](z,f)).x = F.(z,f.x);
theorem :: FUNCOP_1:33
f|A = g|A implies (F[;](x,f))|A = (F[;](x,g))|A;
theorem :: FUNCOP_1:34
F[;](x,f)*h = F[;](x,f*h);
theorem :: FUNCOP_1:35
F[;](x,f)*id A = F[;](x,f|A);
reserve X for non empty set,
Y for set,
F for BinOp of X,
f,g,h for Function of Y,X,
x,x1,x2 for Element of X;
theorem :: FUNCOP_1:36
F.:(f,g) is Function of Y,X;
definition
let X be non empty set, Z be set;
let F be BinOp of X, f,g be Function of Z,X;
redefine func F.:(f,g) -> Function of Z,X;
end;
reserve Y for non empty set,
F for BinOp of X,
f,g,h for Function of Y,X,
x,x1,x2 for Element of X;
theorem :: FUNCOP_1:37
for z being Element of Y holds (F.:(f,g)).z = F.(f.z,g.z);
theorem :: FUNCOP_1:38
for h being Function of Y,X holds (for z being Element of Y
holds h.z = F.(f.z,g.z)) implies h = F.:(f,g);
theorem :: FUNCOP_1:39
for g being Function of X,X holds F.:(id X, g)*f = F.:(f,g*f);
theorem :: FUNCOP_1:40
for g being Function of X,X holds F.:(g, id X)*f = F.:(g*f,f);
theorem :: FUNCOP_1:41
F.:(id X, id X)*f = F.:(f,f);
theorem :: FUNCOP_1:42
for g being Function of X,X holds F.:(id X, g).x = F.(x,g.x);
theorem :: FUNCOP_1:43
for g being Function of X,X holds F.:(g, id X).x = F.(g.x,x);
theorem :: FUNCOP_1:44
F.:(id X, id X).x = F.(x,x);
theorem :: FUNCOP_1:45
x in B implies A --> x is Function of A,B;
definition
let I be set, i be object;
redefine func I --> i -> Function of I,{i};
end;
definition
let B be non empty set, A be set, b be Element of B;
redefine func A --> b -> Function of A,B;
end;
theorem :: FUNCOP_1:46
A --> x is Function of A,X;
reserve Y for set,
F for BinOp of X,
f,g,h for Function of Y,X,
x,x1,x2 for Element of X;
theorem :: FUNCOP_1:47
F[:](f,x) is Function of Y,X;
definition
let X be non empty set, Z be set;
let F be BinOp of X, f be Function of Z,X, x be Element of X;
redefine func F[:](f,x) -> Function of Z,X;
end;
reserve Y for non empty set,
F for BinOp of X,
f,g,h for Function of Y,X,
x,x1,x2 for Element of X;
theorem :: FUNCOP_1:48
for y being Element of Y holds (F[:](f,x)).y = F.(f.y,x);
theorem :: FUNCOP_1:49
(for y being Element of Y holds g.y = F.(f.y,x)) implies g = F
[:](f,x);
theorem :: FUNCOP_1:50
F[:](id X, x)*f = F[:](f,x);
theorem :: FUNCOP_1:51
F[:](id X, x).x = F.(x,x);
reserve Y for set,
F for BinOp of X,
f,g,h for Function of Y,X,
x,x1,x2 for Element of X;
theorem :: FUNCOP_1:52
F[;](x,g) is Function of Y,X;
definition
let X be non empty set, Z be set;
let F be BinOp of X, x be Element of X;
let g be Function of Z,X;
redefine func F[;](x,g) -> Function of Z,X;
end;
reserve Y for non empty set,
F for BinOp of X,
f,g,h for Function of Y,X,
x,x1,x2 for Element of X;
theorem :: FUNCOP_1:53
for y being Element of Y holds (F[;](x,f)).y = F.(x,f.y);
theorem :: FUNCOP_1:54
(for y being Element of Y holds g.y = F.(x,f.y)) implies g = F
[;](x,f);
reserve Y for set,
F for BinOp of X,
f,g,h for Function
of Y,X,
x,x1,x2 for Element of X;
theorem :: FUNCOP_1:55
F[;](x, id X)*f = F[;](x,f);
theorem :: FUNCOP_1:56
F[;](x, id X).x = F.(x,x);
theorem :: FUNCOP_1:57
for X,Y,Z being non empty set for f being Function of X, [:Y,Z:] for x
being Element of X holds f~.x =[(f.x)`2,(f.x)`1];
definition
let X,Y,Z be non empty set;
let f be Function of X, [:Y,Z:];
redefine func rng f -> Relation of Y,Z;
end;
definition
let X,Y,Z be non empty set;
let f be Function of X, [:Y,Z:];
redefine func f~ -> Function of X, [:Z,Y:];
end;
theorem :: FUNCOP_1:58
for X,Y,Z being non empty set for f being Function of X, [:Y,Z:] holds
rng (f~) = (rng f)~;
reserve y for Element of Y;
theorem :: FUNCOP_1:59
F is associative implies F[:](F[;](x1,f),x2) = F[;](x1,F[:](f,x2));
theorem :: FUNCOP_1:60
F is associative implies F.:(F[:](f,x),g) = F.:(f,F[;](x,g));
theorem :: FUNCOP_1:61
F is associative implies F.:(F.:(f,g),h) = F.:(f,F.:(g,h));
theorem :: FUNCOP_1:62
F is associative implies F[;](F.(x1,x2),f) = F[;](x1,F[;](x2,f));
theorem :: FUNCOP_1:63
F is associative implies F[:](f, F.(x1,x2)) = F[:](F[:](f,x1),x2);
theorem :: FUNCOP_1:64
F is commutative implies F[;](x,f) = F[:](f,x);
theorem :: FUNCOP_1:65
F is commutative implies F.:(f,g) = F.:(g,f);
theorem :: FUNCOP_1:66
F is idempotent implies F.:(f,f) = f;
reserve Y for non empty set,
F for BinOp of X,
f for Function of Y,X,
x for Element of X,
y for Element of Y;
theorem :: FUNCOP_1:67
F is idempotent implies F[;](f.y,f).y = f.y;
theorem :: FUNCOP_1:68
F is idempotent implies F[:](f,f.y).y = f.y;
:: Addendum, 2002.07.08
theorem :: FUNCOP_1:69
for F,f,g being Function st [:rng f, rng g:] c= dom F holds dom(F.:(f,
g)) = dom f /\ dom g;
:: from PRALG_1, 2004.07.23
definition
let IT be Function;
attr IT is Function-yielding means
:: FUNCOP_1:def 6
for x being object st x in dom IT holds IT.x is Function;
end;
registration
cluster Function-yielding for Function;
end;
registration
let B be Function-yielding Function, j be object;
cluster B.j -> Function-like Relation-like;
end;
registration
let F be Function-yielding Function, f be Function;
cluster F * f -> Function-yielding;
end;
:: missing, 2005.11.13, A.T.
registration
let B;
let c be non empty set;
cluster B --> c -> non-empty;
end;
:: missing, 2005.12.20, A.T.
theorem :: FUNCOP_1:70
([:X,Y:] --> z).(x,y) = z;
:: from CAT_1, 2007.02.11, A.T.
reserve a,b,c for set;
definition
let a,b,c be object;
func (a,b).-->c -> Function equals
:: FUNCOP_1:def 7
{[a,b]} --> c;
end;
theorem :: FUNCOP_1:71
for a,b,c being object holds
((a,b).-->c).(a,b) = c;
:: from CQC_LANG, 2007.03.13, A.T.
definition
let x,y,a,b be object;
func IFEQ(x,y,a,b) -> object equals
:: FUNCOP_1:def 8
a if x = y otherwise b;
end;
definition
let x,y be object; let a,b be set;
redefine func IFEQ(x,y,a,b) -> set;
end;
definition
let D be set;
let x,y be object, a,b be Element of D;
redefine func IFEQ(x,y,a,b) -> Element of D;
end;
definition
let x,y be object;
func x .--> y -> set equals
:: FUNCOP_1:def 9
{x} --> y;
end;
registration
let x,y be object;
cluster x .--> y -> Function-like Relation-like;
end;
registration
let x,y be object;
cluster x .--> y -> one-to-one;
end;
theorem :: FUNCOP_1:72
for x,y be object holds (x .--> y).x = y;
:: from SCMFSA6A, 2007.07.22, A.T.
theorem :: FUNCOP_1:73
for a,b being object, f being Function holds a.-->b c= f iff a in dom f &
f.a = b;
:: from FUNCT_2, 2007.11.22, A.T., :: from CAT_4
notation
let o,m,r be object;
synonym (o,m) :-> r for (o,m) .--> r;
end;
definition
let o,m,r be object;
redefine func (o,m) :-> r -> Function of [:{o},{m}:],{r} means
:: FUNCOP_1:def 10
not contradiction;
end;
:: missing, 2008.03.20, A.T.
reserve x,y,z for object;
theorem :: FUNCOP_1:74
x in dom(x .--> y);
theorem :: FUNCOP_1:75
z in dom(x .--> y) implies z = x;
:: missing, 2008.04.15, A.T.
theorem :: FUNCOP_1:76
not x in A implies (x .--> y)|A = {};
:: from CAT_1, (new notation), 2008.06.30. A.T.
notation
let x,y be object;
synonym x :-> y for x .--> y;
end;
definition
let m,o be object;
redefine func m :-> o -> Function of {m}, {o};
end;
theorem :: FUNCOP_1:77
for x being Element of {a} for y being Element of {b} holds
((a,b):->c).(x,y) = c;
:: from MSUHOM_1, ALTCAT_1, 2008.07.06, A.T.
registration
let f be Function-yielding Function, C be set;
cluster f|C -> Function-yielding;
end;
:: from CIRCCOMB, 2008.07.06, A.T.
registration
let A be set;
let f be Function;
cluster A --> f -> Function-yielding;
end;
:: from SEQM_3, 2008.07.17, A.T.
registration
let X be set, a be object;
cluster X --> a -> constant;
end;
:: from YELLOW_6, 2008.07.17, A.T.
registration
cluster non empty constant for Function;
let X be set, Y be non empty set;
cluster constant for Function of X,Y;
end;
:: missing, 2008.07.17, A.T.
registration
let f be constant Function, X be set;
cluster f|X -> constant;
end;
:: missing, 2008.08.14, A.T.
theorem :: FUNCOP_1:78
for f being non empty constant Function ex y st for x st x in dom f
holds f.x = y;
:: from YELLOW_6, 2008.12.26, A.T.
theorem :: FUNCOP_1:79
for X being non empty set, x being set holds the_value_of (X --> x) =
x;
:: from CIRCCMB3, 2008.12.26, A.T.
theorem :: FUNCOP_1:80
for f being constant Function holds f = (dom f) --> the_value_of f;
:: missing, 2009.01.21, A.T.
registration
let X be set, Y be non empty set;
cluster total for PartFunc of X,Y;
end;
:: new, 2009.02.14, A.T.
registration
let I be set, A be object;
cluster I --> A -> I-defined;
end;
registration
let I, A be object;
cluster I .--> A -> {I}-defined;
end;
:: BORSUK_1:6, 2009.06.11, A.K.
theorem :: FUNCOP_1:81
(A --> x).:B c= {x};
registration
let I be set, f be Function;
cluster I .--> f -> Function-yielding;
end;
:: 2009.10.03, A.T.
registration let I be set;
cluster total for I-defined non-empty Function;
end;
theorem :: FUNCOP_1:82
x .--> y is_isomorphism_of {[x,x]},{[y,y]};
theorem :: FUNCOP_1:83
{[x,x]}, {[y,y]} are_isomorphic;
registration
let I be set, A be object;
cluster I --> A -> total for I-defined Function;
end;
theorem :: FUNCOP_1:84
for f being Function st x in dom f
holds x .--> f.x c= f;
registration let A be non empty set;
let x be set, i be Element of A;
cluster x .--> i -> A-valued;
end;
reserve Y for set,
f,g for Function of Y,X,
x for Element of X,
y for Element of Y;
:: missing, 2010.02.10, A.T.
theorem :: FUNCOP_1:85
F is associative implies F.:(F[;](x,f),g) = F[;](x,F.:(f,g));
registration let A be set, B be non empty set, x be Element of B;
cluster A --> x -> B-valued;
end;
registration let A be non empty set, x be Element of A, y be object;
cluster x .--> y -> A-defined;
end;
theorem :: FUNCOP_1:86
for x,y,A being set st x in A
holds (x .--> y)|A = x .--> y;
:: missing, 2011.02.06, A.K.
registration
let Y be functional set;
cluster Y-valued -> Function-yielding for Function;
end;
:: from MSUALG_4, 2011.04.16, A.T.
definition
let IT be Function;
attr IT is Relation-yielding means
:: FUNCOP_1:def 11
for x be set st x in dom IT holds IT.x is Relation;
end;
registration
cluster Function-yielding -> Relation-yielding for Function;
end;
registration
cluster empty -> Function-yielding for Function;
end;
:: from CIRCCOMB, 2011.04.19, A.T.
theorem :: FUNCOP_1:87
for X,Y being set, x,y being object
holds X --> x tolerates Y --> y iff x = y or X misses Y;
reserve x,y,z,A for set;
theorem :: FUNCOP_1:88
rng(x .--> y) = {y};
theorem :: FUNCOP_1:89
z in A implies (A --> x)*(y .--> z) = y .--> x;
registration
let f be Function-yielding Function;
let a,b be object;
cluster f.(a,b) -> Function-like Relation-like;
end;
registration
let Y be set;
let X,Z be non empty set;
cluster -> Function-yielding for Function of X, Funcs(Y,Z);
end;