:: A Model of ZF Set Theory Language
:: by Grzegorz Bancerek
::
:: Received April 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 NUMBERS, SUBSET_1, XBOOLE_0, FINSEQ_1, XXREAL_0, TARSKI, ARYTM_3,
CARD_1, ORDINAL4, FUNCT_1, XBOOLEAN, BVFUNC_2, RELAT_1, CLASSES2, NAT_1,
ARYTM_1, ZF_LANG, ORDINAL1;
notations TARSKI, XBOOLE_0, SUBSET_1, XCMPLX_0, RELAT_1, FUNCT_1, ORDINAL1,
NAT_1, NUMBERS, FINSEQ_1, XXREAL_0, TREES_3;
constructors XXREAL_0, XREAL_0, NAT_1, FINSEQ_1, NUMBERS, TREES_3;
registrations ORDINAL1, RELSET_1, XREAL_0, FINSEQ_1, CARD_1, XBOOLE_0, NAT_1;
requirements NUMERALS, REAL, SUBSET, BOOLE, ARITHM;
begin
reserve k,m,n for Element of NAT,
a,X,Y for set,
D,D1,D2 for non empty set;
reserve p,q for FinSequence of NAT;
::
:: The Construction of ZF Set Theory Language
::
:: The set and the mode of ZF-language variables
definition
func VAR -> Subset of NAT equals
:: ZF_LANG:def 1
{ k : 5 <= k };
end;
registration
cluster VAR -> non empty;
end;
definition
mode Variable is Element of VAR;
end;
definition
let n;
func x.n -> Variable equals
:: ZF_LANG:def 2
5 + n;
end;
reserve x,y,z,t for Variable;
:: The operations to make ZF-formulae
registration
cluster -> natural for Variable;
end;
definition
let x,y;
func x '=' y -> FinSequence of NAT equals
:: ZF_LANG:def 3
<*0*>^<*x*>^<*y*>;
func x 'in' y -> FinSequence of NAT equals
:: ZF_LANG:def 4
<*1*>^<*x*>^<*y*>;
end;
theorem :: ZF_LANG:1
x '=' y = z '=' t implies x = z & y = t;
theorem :: ZF_LANG:2
x 'in' y = z 'in' t implies x = z & y = t;
definition
let p;
func 'not' p -> FinSequence of NAT equals
:: ZF_LANG:def 5
<*2*>^p;
let q;
func p '&' q -> FinSequence of NAT equals
:: ZF_LANG:def 6
<*3*>^p^q;
end;
definition
let x,p;
func All(x,p)-> FinSequence of NAT equals
:: ZF_LANG:def 7
<*4*>^<*x*>^p;
end;
theorem :: ZF_LANG:3
All(x,p) = All(y,q) implies x = y & p = q;
:: The set of all well formed formulae of ZF-language
definition
func WFF -> non empty set means
:: ZF_LANG:def 8
(for a st a in it holds a is
FinSequence of NAT ) & (for x,y holds x '=' y in it & x 'in' y in it ) & (for p
st p in it holds 'not' p in it ) & (for p,q st p in it & q in it holds p '&' q
in it ) & (for x,p st p in it holds All(x,p) in it ) & for D st (for a st a in
D holds a is FinSequence of NAT ) & (for x,y holds x '=' y in D & x 'in' y in D
) & (for p st p in D holds 'not' p in D ) & (for p,q st p in D & q in D holds p
'&' q in D ) & (for x,p st p in D holds All(x,p) in D ) holds it c= D;
end;
definition
let IT be FinSequence of NAT;
attr IT is ZF-formula-like means
:: ZF_LANG:def 9
IT is Element of WFF;
end;
registration
cluster ZF-formula-like for FinSequence of NAT;
end;
definition
mode ZF-formula is ZF-formula-like FinSequence of NAT;
end;
theorem :: ZF_LANG:4
a is ZF-formula iff a in WFF;
reserve F,F1,G,G1,H,H1 for ZF-formula;
registration
let x,y;
cluster x '=' y -> ZF-formula-like;
cluster x 'in' y -> ZF-formula-like;
end;
registration
let H;
cluster 'not' H -> ZF-formula-like;
let G;
cluster H '&' G -> ZF-formula-like;
end;
registration
let x,H;
cluster All(x,H) -> ZF-formula-like;
end;
::
:: The Properties of ZF-formulae
::
definition
let H;
attr H is being_equality means
:: ZF_LANG:def 10
ex x,y st H = x '=' y;
attr H is being_membership means
:: ZF_LANG:def 11
ex x,y st H = x 'in' y;
attr H is negative means
:: ZF_LANG:def 12
ex H1 st H = 'not' H1;
attr H is conjunctive means
:: ZF_LANG:def 13
ex F,G st H = F '&' G;
attr H is universal means
:: ZF_LANG:def 14
ex x,H1 st H = All(x,H1);
end;
theorem :: ZF_LANG:5
(H is being_equality iff ex x,y st H = x '=' y) & (H is
being_membership iff ex x,y st H = x 'in' y) & (H is negative iff ex H1 st H =
'not' H1) & (H is conjunctive iff ex F,G st H = F '&' G) & (H is universal iff
ex x,H1 st H = All(x,H1) );
definition
let H;
attr H is atomic means
:: ZF_LANG:def 15
H is being_equality or H is being_membership;
end;
definition
let F,G;
func F 'or' G -> ZF-formula equals
:: ZF_LANG:def 16
'not'('not' F '&' 'not' G);
func F => G -> ZF-formula equals
:: ZF_LANG:def 17
'not' (F '&' 'not' G);
end;
definition
let F,G;
func F <=> G -> ZF-formula equals
:: ZF_LANG:def 18
(F => G) '&' (G => F);
end;
definition
let x,H;
func Ex(x,H) -> ZF-formula equals
:: ZF_LANG:def 19
'not' All(x,'not' H);
end;
definition
let H;
attr H is disjunctive means
:: ZF_LANG:def 20
ex F,G st H = F 'or' G;
attr H is conditional means
:: ZF_LANG:def 21
ex F,G st H = F => G;
attr H is biconditional means
:: ZF_LANG:def 22
ex F,G st H = F <=> G;
attr H is existential means
:: ZF_LANG:def 23
ex x,H1 st H = Ex(x,H1);
end;
theorem :: ZF_LANG:6
(H is disjunctive iff ex F,G st H = F 'or' G) & (H is conditional iff
ex F,G st H = F => G) & (H is biconditional iff ex F,G st H = F <=> G) & (H is
existential iff ex x,H1 st H = Ex(x,H1) );
definition
let x,y,H;
func All(x,y,H) -> ZF-formula equals
:: ZF_LANG:def 24
All(x,All(y,H));
func Ex(x,y,H) -> ZF-formula equals
:: ZF_LANG:def 25
Ex(x,Ex(y,H));
end;
theorem :: ZF_LANG:7
All(x,y,H) = All(x,All(y,H)) & Ex(x,y,H) = Ex(x,Ex(y,H));
definition
let x,y,z,H;
func All(x,y,z,H) -> ZF-formula equals
:: ZF_LANG:def 26
All(x,All(y,z,H));
func Ex(x,y,z,H) -> ZF-formula equals
:: ZF_LANG:def 27
Ex(x,Ex(y,z,H));
end;
theorem :: ZF_LANG:8
All(x,y,z,H) = All(x,All(y,z,H)) & Ex(x,y,z,H) = Ex(x,Ex(y,z,H));
theorem :: ZF_LANG:9
H is being_equality or H is being_membership or H is negative or
H is conjunctive or H is universal;
theorem :: ZF_LANG:10
H is atomic or H is negative or H is conjunctive or H is universal;
theorem :: ZF_LANG:11
H is atomic implies len H = 3;
theorem :: ZF_LANG:12
H is atomic or ex H1 st len H1 + 1 <= len H;
theorem :: ZF_LANG:13
3 <= len H;
theorem :: ZF_LANG:14
len H = 3 implies H is atomic;
theorem :: ZF_LANG:15
for x,y holds (x '=' y).1 = 0 & (x 'in' y ).1 = 1;
theorem :: ZF_LANG:16
for F,G holds (F '&' G).1 = 3;
theorem :: ZF_LANG:17
for x,H holds All(x,H).1 = 4;
theorem :: ZF_LANG:18
H is being_equality implies H.1 = 0;
theorem :: ZF_LANG:19
H is being_membership implies H.1 = 1;
theorem :: ZF_LANG:20
H is negative implies H.1 = 2;
theorem :: ZF_LANG:21
H is conjunctive implies H.1 = 3;
theorem :: ZF_LANG:22
H is universal implies H.1 = 4;
theorem :: ZF_LANG:23
H is being_equality & H.1 = 0 or H is being_membership & H.1 = 1
or H is negative & H.1 = 2 or H is conjunctive & H.1 = 3 or H is universal & H.
1 = 4;
theorem :: ZF_LANG:24
H.1 = 0 implies H is being_equality;
theorem :: ZF_LANG:25
H.1 = 1 implies H is being_membership;
theorem :: ZF_LANG:26
H.1 = 2 implies H is negative;
theorem :: ZF_LANG:27
H.1 = 3 implies H is conjunctive;
theorem :: ZF_LANG:28
H.1 = 4 implies H is universal;
reserve sq,sq9 for FinSequence;
theorem :: ZF_LANG:29
H = F^sq implies H = F;
theorem :: ZF_LANG:30
H '&' G = H1 '&' G1 implies H = H1 & G = G1;
theorem :: ZF_LANG:31
F 'or' G = F1 'or' G1 implies F = F1 & G = G1;
theorem :: ZF_LANG:32
F => G = F1 => G1 implies F = F1 & G = G1;
theorem :: ZF_LANG:33
F <=> G = F1 <=> G1 implies F = F1 & G = G1;
theorem :: ZF_LANG:34
Ex(x,H) = Ex(y,G) implies x = y & H = G;
::
:: The Select Function of ZF-fomrulae
::
definition
let H;
assume
H is atomic;
func Var1 H -> Variable equals
:: ZF_LANG:def 28
H.2;
func Var2 H -> Variable equals
:: ZF_LANG:def 29
H.3;
end;
theorem :: ZF_LANG:35
H is atomic implies Var1 H = H.2 & Var2 H = H.3;
theorem :: ZF_LANG:36
H is being_equality implies H = (Var1 H) '=' Var2 H;
theorem :: ZF_LANG:37
H is being_membership implies H = (Var1 H) 'in' Var2 H;
definition
let H;
assume
H is negative;
func the_argument_of H -> ZF-formula means
:: ZF_LANG:def 30
'not' it = H;
end;
definition
let H;
assume
H is conjunctive or H is disjunctive;
func the_left_argument_of H -> ZF-formula means
:: ZF_LANG:def 31
ex H1 st it '&' H1 = H if H is conjunctive otherwise ex H1 st it 'or' H1 = H;
func the_right_argument_of H -> ZF-formula means
:: ZF_LANG:def 32
ex H1 st H1 '&' it = H if H is conjunctive otherwise ex H1 st H1 'or' it = H;
end;
theorem :: ZF_LANG:38
H is conjunctive implies (F = the_left_argument_of H iff ex G st F '&'
G = H) & (F = the_right_argument_of H iff ex G st G '&' F = H);
theorem :: ZF_LANG:39
H is disjunctive implies (F = the_left_argument_of H iff ex G st
F 'or' G = H) & (F = the_right_argument_of H iff ex G st G 'or' F = H);
theorem :: ZF_LANG:40
H is conjunctive implies H = (the_left_argument_of H) '&'
the_right_argument_of H;
theorem :: ZF_LANG:41
H is disjunctive implies H = (the_left_argument_of H) 'or'
the_right_argument_of H;
definition
let H;
assume
H is universal or H is existential;
func bound_in H -> Variable means
:: ZF_LANG:def 33
ex H1 st All(it,H1) = H if H is universal otherwise ex H1 st Ex(it,H1) = H;
func the_scope_of H -> ZF-formula means
:: ZF_LANG:def 34
ex x st All(x,it) = H if H is universal otherwise ex x st Ex(x,it) = H;
end;
theorem :: ZF_LANG:42
H is universal implies (x = bound_in H iff ex H1 st All(x,H1) = H) & (
H1 = the_scope_of H iff ex x st All(x,H1) = H);
theorem :: ZF_LANG:43
H is existential implies (x = bound_in H iff ex H1 st Ex(x,H1) =
H) & (H1 = the_scope_of H iff ex x st Ex(x,H1) = H);
theorem :: ZF_LANG:44
H is universal implies H = All(bound_in H,the_scope_of H);
theorem :: ZF_LANG:45
H is existential implies H = Ex(bound_in H,the_scope_of H);
definition
let H;
assume
H is conditional;
func the_antecedent_of H -> ZF-formula means
:: ZF_LANG:def 35
ex H1 st H = it => H1;
func the_consequent_of H -> ZF-formula means
:: ZF_LANG:def 36
ex H1 st H = H1 => it;
end;
theorem :: ZF_LANG:46
H is conditional implies (F = the_antecedent_of H iff ex G st H = F =>
G) & (F = the_consequent_of H iff ex G st H = G => F);
theorem :: ZF_LANG:47
H is conditional implies H = (the_antecedent_of H) => the_consequent_of H;
definition
let H;
assume
H is biconditional;
func the_left_side_of H -> ZF-formula means
:: ZF_LANG:def 37
ex H1 st H = it <=> H1;
func the_right_side_of H -> ZF-formula means
:: ZF_LANG:def 38
ex H1 st H = H1 <=> it;
end;
theorem :: ZF_LANG:48
H is biconditional implies (F = the_left_side_of H iff ex G st H = F
<=> G) & (F = the_right_side_of H iff ex G st H = G <=> F);
theorem :: ZF_LANG:49
H is biconditional implies H = (the_left_side_of H) <=> the_right_side_of H;
::
:: The Immediate Constituents of ZF-formulae
::
definition
let H,F;
pred H is_immediate_constituent_of F means
:: ZF_LANG:def 39
F = 'not' H or ( ex H1 st
F = H '&' H1 or F = H1 '&' H ) or ex x st F = All(x,H);
end;
theorem :: ZF_LANG:50
not H is_immediate_constituent_of x '=' y;
theorem :: ZF_LANG:51
not H is_immediate_constituent_of x 'in' y;
theorem :: ZF_LANG:52
F is_immediate_constituent_of 'not' H iff F = H;
theorem :: ZF_LANG:53
F is_immediate_constituent_of G '&' H iff F = G or F = H;
theorem :: ZF_LANG:54
F is_immediate_constituent_of All(x,H) iff F = H;
theorem :: ZF_LANG:55
H is atomic implies not F is_immediate_constituent_of H;
theorem :: ZF_LANG:56
H is negative implies
(F is_immediate_constituent_of H iff F = the_argument_of H);
theorem :: ZF_LANG:57
H is conjunctive implies (F is_immediate_constituent_of H iff F
= the_left_argument_of H or F = the_right_argument_of H);
theorem :: ZF_LANG:58
H is universal implies (F is_immediate_constituent_of H iff F =
the_scope_of H);
::
:: The Subformulae and The Proper Subformulae of ZF-formulae
::
reserve L,L9 for FinSequence;
definition
let H,F;
pred H is_subformula_of F means
:: ZF_LANG:def 40
ex n,L st 1 <= n & len L = n & L.1 =
H & L.n = F & for k st 1 <= k & k < n ex H1,F1 st L.k = H1 & L.(k + 1) = F1 &
H1 is_immediate_constituent_of F1;
end;
theorem :: ZF_LANG:59
H is_subformula_of H;
definition
let H,F;
pred H is_proper_subformula_of F means
:: ZF_LANG:def 41
H is_subformula_of F & H <> F;
end;
theorem :: ZF_LANG:60
H is_immediate_constituent_of F implies len H < len F;
theorem :: ZF_LANG:61
H is_immediate_constituent_of F implies H is_proper_subformula_of F;
theorem :: ZF_LANG:62
H is_proper_subformula_of F implies len H < len F;
theorem :: ZF_LANG:63
H is_proper_subformula_of F implies ex G st G is_immediate_constituent_of F;
reserve j,j1 for Element of NAT;
theorem :: ZF_LANG:64
F is_proper_subformula_of G & G is_proper_subformula_of H
implies F is_proper_subformula_of H;
theorem :: ZF_LANG:65
F is_subformula_of G & G is_subformula_of H implies F is_subformula_of H;
theorem :: ZF_LANG:66
G is_subformula_of H & H is_subformula_of G implies G = H;
theorem :: ZF_LANG:67
not F is_proper_subformula_of x '=' y;
theorem :: ZF_LANG:68
not F is_proper_subformula_of x 'in' y;
theorem :: ZF_LANG:69
F is_proper_subformula_of 'not' H implies F is_subformula_of H;
theorem :: ZF_LANG:70
F is_proper_subformula_of G '&' H implies F is_subformula_of G
or F is_subformula_of H;
theorem :: ZF_LANG:71
F is_proper_subformula_of All(x,H) implies F is_subformula_of H;
theorem :: ZF_LANG:72
H is atomic implies not F is_proper_subformula_of H;
theorem :: ZF_LANG:73
H is negative implies the_argument_of H is_proper_subformula_of H;
theorem :: ZF_LANG:74
H is conjunctive implies the_left_argument_of H
is_proper_subformula_of H & the_right_argument_of H is_proper_subformula_of H
;
theorem :: ZF_LANG:75
H is universal implies the_scope_of H is_proper_subformula_of H;
theorem :: ZF_LANG:76
H is_subformula_of x '=' y iff H = x '=' y;
theorem :: ZF_LANG:77
H is_subformula_of x 'in' y iff H = x 'in' y;
::
:: The Set of Subformulae of ZF-formulae
::
definition
let H;
func Subformulae H -> set means
:: ZF_LANG:def 42
a in it iff ex F st F = a & F is_subformula_of H;
end;
theorem :: ZF_LANG:78
G in Subformulae H implies G is_subformula_of H;
theorem :: ZF_LANG:79
F is_subformula_of H implies Subformulae F c= Subformulae H;
theorem :: ZF_LANG:80
Subformulae x '=' y = { x '=' y };
theorem :: ZF_LANG:81
Subformulae x 'in' y = { x 'in' y };
theorem :: ZF_LANG:82
Subformulae 'not' H = Subformulae H \/ { 'not' H };
theorem :: ZF_LANG:83
Subformulae (H '&' F) = Subformulae H \/ Subformulae F \/ { H '&' F };
theorem :: ZF_LANG:84
Subformulae All(x,H) = Subformulae H \/ { All(x,H) };
theorem :: ZF_LANG:85
H is atomic iff Subformulae H = { H };
theorem :: ZF_LANG:86
H is negative implies Subformulae H = Subformulae the_argument_of H \/ { H };
theorem :: ZF_LANG:87
H is conjunctive implies Subformulae H = Subformulae
the_left_argument_of H \/ Subformulae the_right_argument_of H \/ { H };
theorem :: ZF_LANG:88
H is universal implies Subformulae H = Subformulae the_scope_of H \/ { H };
theorem :: ZF_LANG:89
(H is_immediate_constituent_of G or H is_proper_subformula_of G or H
is_subformula_of G) & G in Subformulae F implies H in Subformulae F;
::
:: The Structural Induction Schemes
::
scheme :: ZF_LANG:sch 1
ZFInd { P[ZF-formula] } : for H holds P[H]
provided
for H st H is atomic holds P[H] and
for H st H is negative & P[the_argument_of H] holds P[H] and
for H st H is conjunctive & P[the_left_argument_of H] & P[
the_right_argument_of H] holds P[H] and
for H st H is universal & P[the_scope_of H] holds P[H];
scheme :: ZF_LANG:sch 2
ZFCompInd { P[ZF-formula] } : for H holds P[H]
provided
for H st for F st F is_proper_subformula_of H holds P[F] holds P[H];