:: Conway's Games and Some of Their Basic Properties :: by Robin Nittka :: :: Received October 13, 2010 :: Copyright (c) 2010-2018 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 CGAMES_1, RELAT_1, TARSKI, XBOOLE_0, ORDINAL1, FUNCT_1, CARD_1, SUBSET_1, XXREAL_0, ORDINAL2, SUPINF_2, ARYTM_1, PARTFUN1, MSUALG_6, FINSEQ_1, ARYTM_3, NAT_1, ORDINAL4, MESFUNC5, XCMPLX_0; notations TARSKI, XBOOLE_0, XXREAL_0, RELAT_1, ORDINAL1, FUNCT_1, CARD_1, PARTFUN1, ORDINAL2, SUBSET_1, COMPUT_1, FINSEQ_1, XCMPLX_0; constructors ORDINAL2, COMPUT_1, RELSET_1; registrations XBOOLE_0, XREAL_0, XXREAL_0, ORDINAL1, FUNCT_1, CARD_1, SUBSET_1, RELAT_1, COMPUT_1, FINSEQ_1, NAT_1; requirements REAL, SUBSET, BOOLE, NUMERALS, ARITHM; definitions FUNCT_1, TARSKI, PARTFUN1; equalities FINSEQ_1, ORDINAL1; expansions FUNCT_1, TARSKI, ORDINAL1; theorems TARSKI, ORDINAL1, FUNCT_1, ZFMISC_1, RELAT_1, XBOOLE_0, ORDINAL2, XBOOLE_1, PARTFUN1, COMPUT_1, NAT_1, FINSEQ_1, XXREAL_0, XREAL_1, FINSEQ_2, FINSEQ_3, FINSEQ_5, GRFUNC_1, XTUPLE_0; schemes ORDINAL1, NAT_1, TARSKI; begin :: Construction of days reserve x,y,y1,y2,z,e,s for set; reserve alpha,beta,gamma for Ordinal; reserve n,m,k for Nat; definition struct left-right(# LeftOptions,RightOptions -> set #); end; definition func ConwayZero -> set equals left-right(#{},{}#); coherence by TARSKI:1; end; registration cluster strict for left-right; existence proof take ConwayZero; thus thesis; end; end; deffunc ConwayNextDay(Sequence) = the set of all left-right(#x,y#) where x,y is Subset of union(rng $1) ; defpred ConwayIteration[Sequence] means for beta st beta in dom $1 holds $1.beta = ConwayNextDay($1|beta); Lm1: for f being Sequence st ConwayIteration[f] holds for alpha holds ConwayIteration[f|alpha] proof let f be Sequence; assume A1: ConwayIteration[f]; let alpha,beta; assume A2: beta in dom (f|alpha); dom (f|alpha) c= dom f by RELAT_1:60; then A3: f.beta = ConwayNextDay(f|beta) by A1,A2; dom (f|alpha) c= alpha by RELAT_1:58; then beta c= alpha by A2,ORDINAL1:def 2; then (f|alpha)|beta = f|beta by FUNCT_1:51; hence thesis by A3,A2,FUNCT_1:47; end; definition let alpha; func ConwayDay(alpha) -> set means :Def2: ex f being Sequence st alpha in dom f & f.alpha = it & for beta st beta in dom f holds f.beta = the set of all left-right(#x,y#) where x,y is Subset of union(rng (f|beta)) ; existence proof consider f being Sequence such that A1: dom f = succ alpha & for beta for f1 being Sequence st beta in succ alpha & f1 = f|beta holds f.beta = ConwayNextDay(f1) from ORDINAL1:sch 4; take f.alpha; take f; thus alpha in dom f by A1,ORDINAL1:6; thus thesis by A1; end; uniqueness proof let x,y; assume ex f1 being Sequence st alpha in dom f1 & f1.alpha = x & ConwayIteration[f1]; then consider f1 being Sequence such that A2: alpha in dom f1 & f1.alpha = x & ConwayIteration[f1]; set f1r = f1|succ alpha; assume ex f2 being Sequence st alpha in dom f2 & f2.alpha = y & ConwayIteration[f2]; then consider f2 being Sequence such that A3: alpha in dom f2 & f2.alpha = y & ConwayIteration[f2]; set f2r = f2|succ alpha; A4: dom f1r = succ alpha & for beta for f being Sequence st beta in succ alpha & f=f1r|beta holds f1r.beta=ConwayNextDay(f) proof succ alpha c= dom f1 by A2,ORDINAL1:21; hence A5: dom f1r = succ alpha by RELAT_1:62; let beta; let f be Sequence; assume beta in succ alpha & f=f1r|beta; hence thesis by A5,Lm1,A2; end; A6: dom f2r = succ alpha & for beta for f being Sequence st beta in succ alpha & f=f2r|beta holds f2r.beta=ConwayNextDay(f) proof succ alpha c= dom f2 by A3,ORDINAL1:21; hence A7: dom f2r = succ alpha by RELAT_1:62; let beta; let f be Sequence; assume beta in succ alpha & f=f2r|beta; hence thesis by A7,Lm1,A3; end; A8: f1r.alpha = f1.alpha & f2r.alpha = f2.alpha by FUNCT_1:49,ORDINAL1:6; f1r = f2r from ORDINAL1:sch 3(A4,A6); hence x=y by A2,A3,A8; end; end; theorem Th1: for z being object holds z in ConwayDay(alpha) iff ex w being strict left-right st z = w & for x st x in (the LeftOptions of w) \/ (the RightOptions of w) ex beta st beta in alpha & x in ConwayDay(beta) proof let z be object; consider f being Sequence such that A1: alpha in dom f & f.alpha = ConwayDay(alpha) & ConwayIteration[f] by Def2; hereby assume z in ConwayDay(alpha); then z in ConwayNextDay(f|alpha) by A1; then consider x,y being Subset of union(rng (f|alpha)) such that A2: z = left-right(#x,y#); reconsider w = z as strict left-right by A2; take w; thus z = w; let e; assume e in (the LeftOptions of w) \/ (the RightOptions of w); then e in x or e in y by A2,XBOOLE_0:def 3; then consider r being set such that A3: e in r & r in rng (f|alpha) by TARSKI:def 4; ex beta being object st beta in dom (f|alpha) & r = (f|alpha).beta by A3,FUNCT_1:def 3; then consider beta such that A4: beta in dom (f|alpha) & r = (f|alpha).beta; take beta; dom (f|alpha) c= alpha by RELAT_1:58; hence beta in alpha by A4; dom (f|alpha) c= dom f by RELAT_1:60; then f.beta = ConwayDay(beta) by A1,Def2,A4; hence e in ConwayDay(beta) by A3,A4,FUNCT_1:47; end; hereby assume ex w being strict left-right st z = w & for x st x in (the LeftOptions of w) \/ (the RightOptions of w) ex beta st beta in alpha & x in ConwayDay(beta); then consider w being strict left-right such that A5: w = z & for x st x in (the LeftOptions of w) \/ (the RightOptions of w) ex beta st beta in alpha & x in ConwayDay(beta); the LeftOptions of w is Subset of union(rng (f|alpha)) & the RightOptions of w is Subset of union(rng (f|alpha)) proof (the LeftOptions of w) \/ (the RightOptions of w) c= union(rng (f|alpha)) proof let e be object; assume e in (the LeftOptions of w) \/ (the RightOptions of w); then consider beta such that A6: beta in alpha & e in ConwayDay(beta) by A5; A7: alpha c= dom f by A1,ORDINAL1:def 2; then f.beta = ConwayDay(beta) by Def2,A1,A6; then ConwayDay(beta) c= union(rng (f|alpha)) by A6,A7,FUNCT_1:50,ZFMISC_1:74; hence e in union(rng (f|alpha)) by A6; end; hence thesis by XBOOLE_1:11; end; then w in ConwayNextDay(f|alpha); hence z in ConwayDay(alpha) by A1,A5; end; end; theorem Th2: ConwayDay(0) = { ConwayZero } proof A1: ConwayDay(0) c= { ConwayZero } proof let z be object; assume z in ConwayDay(0); then consider w being strict left-right such that A2: z = w & for e st e in (the LeftOptions of w) \/ (the RightOptions of w) ex beta st beta in 0 & e in ConwayDay(beta) by Th1; (the LeftOptions of w) \/ (the RightOptions of w) = {} proof assume not thesis; then consider e being object such that A3: e in (the LeftOptions of w) \/ (the RightOptions of w) by XBOOLE_0:def 1; ex beta st beta in 0 & e in ConwayDay(beta) by A2,A3; hence contradiction; end; then the LeftOptions of w = {} & the RightOptions of w = {}; hence z in { ConwayZero } by A2,TARSKI:def 1; end; for e st e in {} \/ {} ex beta st beta in 0 & e in ConwayDay(beta); then ConwayZero in ConwayDay(0) by Th1; then { ConwayZero } c= ConwayDay(0) by ZFMISC_1:31; hence thesis by A1,XBOOLE_0:def 10; end; theorem Th3: alpha c= beta implies ConwayDay(alpha) c= ConwayDay(beta) proof assume A1: alpha c= beta; let z be object; assume z in ConwayDay(alpha); then consider w being strict left-right such that A2: w = z & (for e st e in (the LeftOptions of w) \/ (the RightOptions of w) ex gamma st gamma in alpha & e in ConwayDay(gamma)) by Th1; now let e; assume e in (the LeftOptions of w) \/ (the RightOptions of w); then ex gamma st gamma in alpha & e in ConwayDay(gamma) by A2; hence ex gamma st gamma in beta & e in ConwayDay(gamma) by A1; end; hence z in ConwayDay(beta) by Th1,A2; end; registration let alpha; cluster ConwayDay(alpha) -> non empty; coherence proof 0 c= alpha; then ConwayDay(0) c= ConwayDay(alpha) by Th3; hence thesis by Th2; end; end; begin :: Games definition let x; attr x is ConwayGame-like means :Def3: ex alpha st x in ConwayDay(alpha); end; registration let alpha; cluster -> ConwayGame-like for Element of ConwayDay(alpha); coherence; end; registration cluster ConwayZero -> ConwayGame-like; coherence proof ConwayZero in ConwayDay(0) by Th2,TARSKI:def 1; hence thesis; end; end; registration cluster ConwayGame-like strict for left-right; existence proof take ConwayZero; thus thesis; end; cluster ConwayGame-like for set; existence proof take ConwayZero; thus thesis; end; end; definition mode ConwayGame is ConwayGame-like set; end; definition redefine func ConwayZero -> Element of ConwayDay(0); coherence by Th2,TARSKI:def 1; end; definition func ConwayOne -> Element of ConwayDay(1) equals left-right(#{ConwayZero},{}#); coherence proof set w = left-right(#{ConwayZero},{}#); for x st x in (the LeftOptions of w) \/ (the RightOptions of w) ex beta st beta in 1 & x in ConwayDay(beta) proof let x; assume x in (the LeftOptions of w) \/ (the RightOptions of w); then A1: x = ConwayZero by TARSKI:def 1; take 0; 1 = succ 0; hence thesis by A1,ORDINAL1:6; end; hence thesis by Th1; end; func ConwayStar -> Element of ConwayDay(1) equals left-right(#{ConwayZero},{ConwayZero}#); coherence proof set w = left-right(#{ConwayZero},{ConwayZero}#); for x st x in (the LeftOptions of w) \/ (the RightOptions of w) ex beta st beta in 1 & x in ConwayDay(beta) proof let x; assume x in (the LeftOptions of w) \/ (the RightOptions of w); then A2: x = ConwayZero by TARSKI:def 1; take 0; 1 = succ 0; hence thesis by A2,ORDINAL1:6; end; hence thesis by Th1; end; end; reserve g,g0,g1,g2,gO,gL,gR,gLL,gLR,gRL,gRR for ConwayGame; theorem Th4: g is strict left-right proof consider alpha such that A1: g in ConwayDay(alpha) by Def3; ex w being strict left-right st w = g & for x st x in (the LeftOptions of w) \/ (the RightOptions of w) ex beta st beta in alpha & x in ConwayDay(beta) by A1,Th1; hence thesis; end; registration cluster ConwayGame-like -> strict for left-right; coherence by Th4; end; definition let g; func the_LeftOptions_of g -> set means :Def6: ex w being left-right st g = w & it = the LeftOptions of w; existence proof reconsider w = g as left-right by Th4; take the LeftOptions of w; thus thesis; end; uniqueness; func the_RightOptions_of g -> set means :Def7: ex w being left-right st g = w & it = the RightOptions of w; existence proof reconsider w = g as left-right by Th4; take the RightOptions of w; thus thesis; end; uniqueness; end; definition let g; func the_Options_of g -> set equals (the_LeftOptions_of g) \/ (the_RightOptions_of g); correctness; end; theorem Th5: g1 = g2 iff (the_LeftOptions_of g1 = the_LeftOptions_of g2 & the_RightOptions_of g1 = the_RightOptions_of g2) proof thus g1 = g2 implies (the_LeftOptions_of g1 = the_LeftOptions_of g2 & the_RightOptions_of g1 = the_RightOptions_of g2); reconsider w1 = g1 as strict left-right by Th4; reconsider w2 = g2 as strict left-right by Th4; assume A1: the_LeftOptions_of g1 = the_LeftOptions_of g2 & the_RightOptions_of g1 = the_RightOptions_of g2; the LeftOptions of w1 = the_LeftOptions_of g1 & the LeftOptions of w2 = the_LeftOptions_of g2 & the RightOptions of w1 = the_RightOptions_of g1 & the RightOptions of w2 = the_RightOptions_of g2 by Def6,Def7; hence g1 = g2 by A1; end; registration cluster the_LeftOptions_of ConwayZero -> empty; coherence by Def6; cluster the_RightOptions_of ConwayZero -> empty; coherence by Def7; cluster the_RightOptions_of ConwayOne -> empty; coherence by Def7; end; theorem Th6: g = ConwayZero iff the_Options_of g = {} proof hereby assume g = ConwayZero; then the_LeftOptions_of g = {} & the_RightOptions_of g = {}; hence the_Options_of g = {}; end; hereby reconsider w = g as strict left-right by Th4; assume the_Options_of g = {}; then the_LeftOptions_of g = {} & the_RightOptions_of g = {}; then the LeftOptions of w = {} & the RightOptions of w = {} by Def6,Def7; hence g = ConwayZero; end; end; theorem Th7: x in the_LeftOptions_of ConwayOne iff x = ConwayZero proof the_LeftOptions_of ConwayOne = {ConwayZero} by Def6; hence thesis by TARSKI:def 1; end; theorem Th8: (x in the_Options_of ConwayStar iff x = ConwayZero) & (x in the_LeftOptions_of ConwayStar iff x = ConwayZero) & (x in the_RightOptions_of ConwayStar iff x = ConwayZero) proof the_LeftOptions_of ConwayStar = {ConwayZero} & the_RightOptions_of ConwayStar = {ConwayZero} by Def6,Def7; hence thesis by TARSKI:def 1; end; theorem Th9: g in ConwayDay(alpha) iff for x st x in the_Options_of g ex beta st beta in alpha & x in ConwayDay(beta) proof hereby assume g in ConwayDay(alpha); then consider w being strict left-right such that A1: g = w & for x st x in (the LeftOptions of w) \/ (the RightOptions of w) ex beta st beta in alpha & x in ConwayDay(beta) by Th1; let x; A2: the LeftOptions of w = the_LeftOptions_of g & the RightOptions of w = the_RightOptions_of g by A1,Def6,Def7; assume x in the_Options_of g; hence ex beta st beta in alpha & x in ConwayDay(beta) by A1,A2; end; hereby assume A3: for x st x in the_Options_of g ex beta st beta in alpha & x in ConwayDay(beta); ex w being strict left-right st g = w & for x st x in (the LeftOptions of w) \/ (the RightOptions of w) ex beta st beta in alpha & x in ConwayDay(beta) proof reconsider w = g as strict left-right by Th4; take w; the LeftOptions of w = the_LeftOptions_of g & the RightOptions of w = the_RightOptions_of g by Def6,Def7; hence thesis by A3; end; hence g in ConwayDay(alpha) by Th1; end; end; definition let g be set; assume A1: g is ConwayGame; func ConwayRank(g) -> Ordinal means :Def9: g in ConwayDay(it) & for beta st beta in it holds not g in ConwayDay(beta); existence proof defpred Included[Ordinal] means g in ConwayDay($1); A2: ex alpha st Included[alpha] by Def3,A1; consider alpha such that A3: Included[alpha] & for beta st Included[beta] holds alpha c= beta from ORDINAL1:sch 1(A2); take alpha; thus g in ConwayDay(alpha) by A3; let beta; assume A4: beta in alpha; assume g in ConwayDay(beta); then alpha c= beta by A3; then beta in beta by A4; hence contradiction; end; uniqueness proof let alpha1,alpha2 be Ordinal; assume A5: g in ConwayDay(alpha1) & for beta st beta in alpha1 holds not g in ConwayDay(beta); assume A6: g in ConwayDay(alpha2) & for beta st beta in alpha2 holds not g in ConwayDay(beta); assume A7: alpha1 <> alpha2; per cases by A7,ORDINAL1:14; suppose alpha1 in alpha2; hence contradiction by A5,A6; end; suppose alpha2 in alpha1; hence contradiction by A5,A6; end; end; end; theorem Th10: g in ConwayDay(alpha) & x in the_Options_of g implies x in ConwayDay(alpha) proof assume g in ConwayDay(alpha) & x in the_Options_of g; then consider beta such that A1: beta in alpha & x in ConwayDay(beta) by Th9; beta c= alpha by A1,ORDINAL1:def 2; then ConwayDay(beta) c= ConwayDay(alpha) by Th3; hence x in ConwayDay(alpha) by A1; end; theorem Th11: g in ConwayDay(alpha) & (x in the_LeftOptions_of g or x in the_RightOptions_of g) implies x in ConwayDay(alpha) proof (x in the_LeftOptions_of g or x in the_RightOptions_of g) implies x in the_Options_of g by XBOOLE_0:def 3; hence thesis by Th10; end; theorem Th12: g in ConwayDay(alpha) iff ConwayRank(g) c= alpha proof hereby assume A1: g in ConwayDay(alpha); assume not ConwayRank(g) c= alpha; then alpha in ConwayRank(g) by ORDINAL1:16; hence contradiction by A1,Def9; end; hereby assume ConwayRank(g) c= alpha; then A2: ConwayDay(ConwayRank(g)) c= ConwayDay(alpha) by Th3; g in ConwayDay(ConwayRank(g)) by Def9; hence g in ConwayDay(alpha) by A2; end; end; theorem Th13: ConwayRank(g) in alpha iff ex beta st beta in alpha & g in ConwayDay(beta) proof hereby assume A1: ConwayRank(g) in alpha; take beta = ConwayRank(g); thus beta in alpha by A1; thus g in ConwayDay(beta) by Th12; end; thus (ex beta st beta in alpha & g in ConwayDay(beta)) implies ConwayRank(g) in alpha by Th12,ORDINAL1:12; end; theorem Th14: gO in the_Options_of g implies ConwayRank(gO) in ConwayRank(g) proof set alpha = ConwayRank(g); A1: g in ConwayDay(alpha) by Def9; assume gO in the_Options_of g; then consider beta such that A2: beta in alpha & gO in ConwayDay(beta) by A1,Th9; ConwayRank(gO) c= beta by A2,Th12; hence thesis by A2,ORDINAL1:12; end; theorem (gO in the_LeftOptions_of g or gO in the_RightOptions_of g) implies ConwayRank(gO) in ConwayRank(g) proof assume gO in the_LeftOptions_of g or gO in the_RightOptions_of g; then gO in the_Options_of g by XBOOLE_0:def 3; hence thesis by Th14; end; theorem Th16: not g in the_Options_of g proof assume not thesis; then ConwayRank(g) in ConwayRank(g) by Th14; hence contradiction; end; theorem Th17: x in the_Options_of g implies x is ConwayGame-like left-right proof consider alpha such that A1: g in ConwayDay(alpha) by Def3; assume x in the_Options_of g; then x in ConwayDay(alpha) by Th10,A1; hence thesis by Th4; end; theorem Th18: (x in the_LeftOptions_of g or x in the_RightOptions_of g) implies x is ConwayGame-like left-right proof assume x in the_LeftOptions_of g or x in the_RightOptions_of g; then x in the_Options_of g by XBOOLE_0:def 3; hence thesis by Th17; end; theorem Th19: for w being strict left-right holds w is ConwayGame iff for z st z in (the LeftOptions of w) \/ (the RightOptions of w) holds z is ConwayGame proof let w be strict left-right; hereby assume w is ConwayGame; then reconsider g = w as ConwayGame; the LeftOptions of w = the_LeftOptions_of g & the RightOptions of w = the_RightOptions_of g by Def6,Def7; then (the LeftOptions of w) \/ (the RightOptions of w) = the_Options_of g; hence for z st z in (the LeftOptions of w) \/ (the RightOptions of w) holds z is ConwayGame by Th17; end; hereby assume A1: for z st z in (the LeftOptions of w) \/ (the RightOptions of w) holds z is ConwayGame; set Z = the set of all ConwayRank(z) where z is Element of (the LeftOptions of w) \/ (the RightOptions of w); set alpha = sup Z; now let z; assume A2: z in (the LeftOptions of w) \/ (the RightOptions of w); then ConwayRank(z) in Z; then ConwayRank(z) in On Z & On Z c= alpha by ORDINAL1:def 9,ORDINAL2:def 3; then A3: ConwayRank(z) c= alpha by ORDINAL1:def 2; take beta = alpha; thus beta in succ alpha by ORDINAL1:6; z is ConwayGame by A1,A2; hence z in ConwayDay(beta) by A3,Th12; end; then w in ConwayDay(succ alpha) by Th1; hence w is ConwayGame; end; end; begin :: Schemes of induction scheme ConwayGameMinTot { P[ConwayGame] } : ex g st P[g] & for g1 st ConwayRank(g1) in ConwayRank(g) holds not P[g1] provided A1: ex g st P[g] proof defpred Empty[Ordinal] means for g st g in ConwayDay($1) holds not P[g]; assume A2: not thesis; A3: for alpha st for beta st beta in alpha holds Empty[beta] holds Empty[alpha] proof let alpha; assume A4: for beta st beta in alpha holds Empty[beta]; let g; assume A5: g in ConwayDay(alpha) & P[g]; then consider g1 such that A6: ConwayRank(g1) in ConwayRank(g) & P[g1] by A2; ConwayRank(g) c= alpha by Th12,A5; then consider beta such that A7: beta in alpha & g1 in ConwayDay(beta) by Th13,A6; thus contradiction by A4,A7,A6; end; A8: for alpha holds Empty[alpha] from ORDINAL1:sch 2(A3); consider g such that A9: P[g] by A1; consider alpha such that A10:g in ConwayDay(alpha) by Def3; thus contradiction by A8,A9,A10; end; scheme ConwayGameMin { P[ConwayGame] } : ex g st P[g] & for gO st gO in the_Options_of g holds not P[gO] provided A1: ex g st P[g] proof consider g such that A2: P[g] & for g1 st ConwayRank(g1) in ConwayRank(g) holds not P[g1] from ConwayGameMinTot(A1); take g; thus P[g] by A2; let gO; assume gO in the_Options_of g; then ConwayRank(gO) in ConwayRank(g) by Th14; hence not P[gO] by A2; end; scheme ConwayGameInd { P[ConwayGame] } : for g holds P[g] provided A1: for g st (for gO st gO in the_Options_of g holds P[gO]) holds P[g] proof defpred NP[ConwayGame] means not P[$1]; assume A2: ex g st NP[g]; ex g st NP[g] & for gO st gO in the_Options_of g holds not NP[gO] from ConwayGameMin(A2); hence contradiction by A1; end; begin :: Tree of a game definition let f be Function; attr f is ConwayGame-valued means :Def10: for x st x in dom f holds f.x is ConwayGame; end; registration let g; cluster <*g*> -> ConwayGame-valued; coherence proof let x; assume x in dom <*g*>; then x = 1 by FINSEQ_1:90; hence thesis by FINSEQ_1:def 8; end; end; registration cluster ConwayGame-valued non empty for FinSequence; existence proof take <*ConwayZero*>; thus thesis; end; end; registration let f be non empty FinSequence; cluster -> natural non empty for Element of dom f; coherence by FINSEQ_3:24; end; registration let f be ConwayGame-valued non empty Function; let x be Element of dom f; cluster f.x -> ConwayGame-like; coherence by Def10; end; definition let f be ConwayGame-valued non empty FinSequence; attr f is ConwayGameChain-like means :Def11: for n being Element of dom f st n > 1 holds f.(n-1) in the_Options_of f.n; end; theorem Th20: for f being FinSequence for n st n in dom f & n > 1 holds n-1 in dom f proof let f be FinSequence; consider l being Nat such that A1: dom f = Seg l by FINSEQ_1:def 2; thus thesis by A1,FINSEQ_3:12; end; registration let g; cluster <*g*> -> ConwayGameChain-like; coherence proof let n be Element of dom <*g*>; dom <*g*> = { 1 } by FINSEQ_1:2,def 8; hence thesis by TARSKI:def 1; end; end; registration cluster ConwayGameChain-like for ConwayGame-valued non empty FinSequence; existence proof set g = the ConwayGame; take <*g*>; thus thesis; end; end; definition mode ConwayGameChain is ConwayGameChain-like ConwayGame-valued non empty FinSequence; end; theorem Th21: for f being ConwayGameChain for n,m being Element of dom f st n < m holds ConwayRank(f.n) in ConwayRank(f.m) proof let f be ConwayGameChain; let n,m be Element of dom f such that A1: n < m; consider l being Nat such that A2: dom f = Seg l by FINSEQ_1:def 2; defpred True[Nat] means m-$1 in dom f implies ConwayRank(f.(m-$1)) in ConwayRank(f.m); n >= 1 by A2,FINSEQ_1:1; then A3: m > 1 by A1,XXREAL_0:2; A4: True[1] proof assume m-1 in dom f; then reconsider m1 = m-1 as Element of dom f; f.m1 in the_Options_of f.m by A3,Def11; hence thesis by Th14; end; A5: for k being non zero Nat st True[k] holds True[k+1] proof let k be non zero Nat; assume A6: True[k]; assume m-(k+1) in dom f; then reconsider mk1 = m-(k+1) as Element of dom f; k <= k+1 by XREAL_1:31; then 1 <= mk1 & mk1 <= m-k & m-k <= m & m <= l by A2,FINSEQ_1:1,XREAL_1:10,43; then A7: 1 <= m-k & m-k <= l by XXREAL_0:2; then m >= k+1 & k <= k+1 by XREAL_1:19,31; then m-k is Nat by NAT_1:21,XXREAL_0:2; then reconsider mk = m-k as Element of dom f by A7,A2,FINSEQ_1:1; A8: mk1 = mk-1; mk1 > 0; then mk1+1 > 1 by XREAL_1:29; then f.mk1 in the_Options_of f.mk by Def11,A8; then ConwayRank(f.mk1) in ConwayRank(f.mk) & ConwayRank(f.mk) in ConwayRank(f.m) by Th14,A6; hence thesis by ORDINAL1:10; end; A9: for k being non zero Nat holds True[k] from NAT_1:sch 10(A4,A5); reconsider k = m-n as non zero Nat by A1,NAT_1:21; m-k = n; hence thesis by A9; end; theorem Th22: for f being ConwayGameChain for n,m being Element of dom f st n <= m holds ConwayRank(f.n) c= ConwayRank(f.m) proof let f be ConwayGameChain; let n,m be Element of dom f such that A1: n <= m; per cases by A1,XXREAL_0:1; suppose n < m; then ConwayRank(f.n) in ConwayRank(f.m) by Th21; hence thesis by ORDINAL1:def 2; end; suppose n = m; hence thesis; end; end; theorem Th23: for f being ConwayGameChain st f.(len f) in ConwayDay(alpha) holds f.1 in ConwayDay(alpha) proof let f be ConwayGameChain; assume A1: f.(len f) in ConwayDay(alpha); reconsider n = 1 as Element of dom f by FINSEQ_5:6; reconsider m = len f as Element of dom f by FINSEQ_5:6; n <= m by NAT_1:14; then ConwayRank(f.n) c= ConwayRank(f.m) & ConwayRank(f.m) c= alpha by Th22,A1,Th12; then ConwayRank(f.n) c= alpha; hence f.1 in ConwayDay(alpha) by Th12; end; Lm2: ex f being ConwayGameChain st f.1 = g & f.(len f) = g proof take f = <*g*>; len f = 1 by FINSEQ_1:40; hence thesis by FINSEQ_1:40; end; definition let g; func the_Tree_of g -> set means :Def12: z in it iff ex f being ConwayGameChain st f.1 = z & f.(len f) = g; existence proof consider alpha such that A1: g in ConwayDay(alpha) by Def3; take s = { x where x is Element of ConwayDay(alpha) : ex f being ConwayGameChain st f.1 = x & f.(len f) = g }; let z; hereby assume z in s; then consider x being Element of ConwayDay(alpha) such that A2: x = z & ex f being ConwayGameChain st f.1 = x & f.(len f) = g; thus ex f being ConwayGameChain st f.1 = z & f.(len f) = g by A2; end; assume ex f being ConwayGameChain st f.1 = z & f.(len f) = g; then consider f being ConwayGameChain such that A3: f.1 = z & f.(len f) = g; f.1 in ConwayDay(alpha) by Th23,A1,A3; hence z in s by A3; end; uniqueness proof let t1,t2 be set; assume A4: z in t1 iff ex f being ConwayGameChain st f.1 = z & f.(len f) = g; assume A5: z in t2 iff ex f being ConwayGameChain st f.1 = z & f.(len f) = g; now let z be object; hereby assume z in t1; then ex f being ConwayGameChain st f.1 = z & f.(len f) = g by A4; hence z in t2 by A5; end; hereby assume z in t2; then ex f being ConwayGameChain st f.1 = z & f.(len f) = g by A5; hence z in t1 by A4; end; end; hence t1 = t2 by TARSKI:2; end; end; registration let g; cluster the_Tree_of g -> non empty; coherence proof ex f being ConwayGameChain st f.1 = g & f.(len f) = g by Lm2; hence thesis by Def12; end; end; definition let g; func the_proper_Tree_of g -> Subset of the_Tree_of g equals the_Tree_of g \ {g}; coherence; end; theorem Th24: g in the_Tree_of g proof ex f being ConwayGameChain st f.1 = g & f.(len f) = g by Lm2; hence thesis by Def12; end; definition let alpha; let g be Element of ConwayDay(alpha); redefine func the_Tree_of g -> Subset of ConwayDay(alpha); coherence proof the_Tree_of(g) c= ConwayDay(alpha) proof let z be object; assume z in the_Tree_of g; then consider f being ConwayGameChain such that A1: f.1 = z & f.(len f) = g by Def12; thus z in ConwayDay(alpha) by A1,Th23; end; hence thesis; end; end; registration let g; cluster -> ConwayGame-like for Element of the_Tree_of g; coherence proof let g1 be Element of the_Tree_of g; consider alpha such that A1: g in ConwayDay(alpha) by Def3; ex f being ConwayGameChain st f.1 = g1 & f.(len f) = g by Def12; then g1 in ConwayDay(alpha) by Th23,A1; hence thesis; end; end; theorem Th25: for f being ConwayGameChain for n being non zero Nat holds f|n is ConwayGameChain proof let f be ConwayGameChain; let n be non zero Nat; set ls = len (f|n); A1: f|n is ConwayGame-valued proof let x such that A2: x in dom (f|n); dom (f|n) c= dom f by RELAT_1:60; then f.x is ConwayGame by A2; hence (f|n).x is ConwayGame by A2,FUNCT_1:47; end; len f >= 1 & n >= 1 & ls = min(n,len f) by FINSEQ_2:21,NAT_1:14; then reconsider fs = (f|n) as ConwayGame-valued non empty FinSequence by A1,XXREAL_0:20; fs is ConwayGameChain-like proof let n be Element of dom fs such that A3: n > 1; dom fs c= dom f & n in dom fs & n-1 in dom fs by Th20,A3,RELAT_1:60; then n in dom f & f.n = fs.n & f.(n-1) = fs.(n-1) by FUNCT_1:47; hence thesis by Def11,A3; end; hence thesis; end; theorem Th26: for f1,f2 being ConwayGameChain st ex g st g = f2.1 & f1.(len f1) in the_Options_of g holds f1^f2 is ConwayGameChain proof let f1,f2 be ConwayGameChain; assume A1: ex g st g = f2.1 & f1.(len f1) in the_Options_of g; then reconsider g = f2.1 as ConwayGame; f1^f2 is ConwayGame-valued proof let x; set y = (f1^f2).x; assume x in dom (f1^f2); then y in rng (f1^f2) by FUNCT_1:3; then A2: y in rng f1 \/ rng f2 by FINSEQ_1:31; per cases by A2,XBOOLE_0:def 3; suppose y in rng f1; then ex z being object st z in dom f1 & y = f1.z by FUNCT_1:def 3; hence y is ConwayGame; end; suppose y in rng f2; then ex z being object st z in dom f2 & y = f2.z by FUNCT_1:def 3; hence y is ConwayGame; end; end; then reconsider f12 = f1^f2 as ConwayGame-valued non empty FinSequence; f12 is ConwayGameChain-like proof let n be Element of dom f12; assume A3: n > 1; per cases by XXREAL_0:1; suppose n < len f1 + 1; then n <= len f1 by NAT_1:22; then reconsider n0 = n as Element of dom f1 by A3,FINSEQ_3:25; n0 - 1 in dom f1 by Th20,A3; then f1.n0 = f12.n0 & f1.(n0-1) = f12.(n0-1) by FINSEQ_1:def 7; hence thesis by A3,Def11; end; suppose A4: n = len f1 + 1; len f1 in dom f1 & 1 in dom f2 by FINSEQ_5:6; then f12.(n-1) = f1.(len f1) & f12.n = f2.1 by A4,FINSEQ_1:def 7; hence thesis by A1; end; suppose A5: n > len f1 + 1; n <= len f12 & len f12 = len f1 + len f2 & n >= len f1 by A5,FINSEQ_1:22,FINSEQ_3:25,XREAL_1:38; then A6: (n - len f1) > 1 & (n - len f1) <= len f2 & n - len f1 is Nat by A5,NAT_1:21,XREAL_1:20; then reconsider k = n - len f1 as Element of dom f2 by FINSEQ_3:25; k-1 in dom f2 by A6,Th20; then f12.(len f1 + k) = f2.k & f12.(len f1 + (k-1)) = f2.(k-1) by FINSEQ_1:def 7; hence thesis by A6,Def11; end; end; hence thesis; end; theorem Th27: x in the_Tree_of g iff (x = g or ex gO st gO in the_Options_of g & x in the_Tree_of gO) proof hereby assume x in the_Tree_of g; then consider f being ConwayGameChain such that A1: f.1 = x & f.(len f) = g by Def12; reconsider n = len f as Element of dom f by FINSEQ_5:6; assume A2: x <> g; then A3: n > 1 by A1,NAT_1:53; reconsider n1 = n-1 as Element of dom f by Th20,A1,A2,NAT_1:53; take gO = f.n1; thus gO in the_Options_of g by Def11,A3,A1; n1 is non zero; then reconsider nf = f|n1 as ConwayGameChain by Th25; n1 < n & 1 in dom nf & len nf in dom nf by FINSEQ_5:6,XREAL_1:44; then len nf = n1 & nf.1 = f.1 & nf.(len nf) = f.(len nf) by FINSEQ_1:59,FUNCT_1:47; hence x in the_Tree_of gO by Def12,A1; end; hereby assume A4: x = g or ex gO st gO in the_Options_of g & x in the_Tree_of gO; per cases by A4; suppose x = g; hence x in the_Tree_of g by Th24; end; suppose ex gO st gO in the_Options_of g & x in the_Tree_of gO; then consider gO such that A5: gO in the_Options_of g & x in the_Tree_of gO; consider f being ConwayGameChain such that A6: f.1 = x & f.(len f) = gO by A5,Def12; ex g1 st g1 = <*g*>.1 & f.(len f) in the_Options_of g1 proof take g; thus thesis by A5,A6,FINSEQ_1:def 8; end; then reconsider nf = f^<*g*> as ConwayGameChain by Th26; 1 in dom f & len nf = len f + 1 by FINSEQ_2:16,FINSEQ_5:6; then nf.1 = x & nf.(len nf) = g by A6,FINSEQ_1:42,def 7; hence x in the_Tree_of g by Def12; end; end; end; theorem Th28: gO in the_Tree_of g implies (gO = g or ConwayRank(gO) in ConwayRank(g)) proof assume gO in the_Tree_of g; then consider f being ConwayGameChain such that A1: f.1 = gO & f.(len f) = g by Def12; reconsider n = 1 as Element of dom f by FINSEQ_5:6; reconsider m = len f as Element of dom f by FINSEQ_5:6; A2: m >= 1 by NAT_1:14; per cases by A2,XXREAL_0:1; suppose m = 1; hence thesis by A1; end; suppose m > 1; then ConwayRank(f.n) in ConwayRank(f.m) by Th21; hence thesis by A1; end; end; theorem Th29: gO in the_Tree_of g implies ConwayRank(gO) c= ConwayRank(g) proof assume A1: gO in the_Tree_of g; per cases by A1,Th28; suppose gO = g; hence thesis; end; suppose ConwayRank(gO) in ConwayRank(g); hence thesis by ORDINAL1:def 2; end; end; theorem for s being set st g in s & for g1 st g1 in s holds the_Options_of g1 c= s holds the_Tree_of g c= s proof let s be set such that A1: g in s & for g1 st g1 in s holds the_Options_of g1 c= s; hereby let z be object; assume z in the_Tree_of g; then consider f being ConwayGameChain such that A2: f.1 = z & f.(len f) = g by Def12; defpred OK[Nat] means $1+1 <= len f & f.($1+1) in s; len f > 0; then reconsider m = len f - 1 as Nat by NAT_1:20; OK[m] by A2,A1; then A3: ex k st OK[k]; A4: for k st k <> 0 & OK[k] ex n st n < k & OK[n] proof let k; assume A5: k <> 0 & OK[k]; then reconsider m = k-1 as Nat by NAT_1:20; take m; thus m < k by XREAL_1:147; then m+1 < k+1 by XREAL_1:6; hence m+1 <= len f by A5,XXREAL_0:2; A6: k+1 > 1 by A5,XREAL_1:29; then reconsider k1 = k+1 as Element of dom f by A5,FINSEQ_3:25; f.(k1-1) in the_Options_of f.k1 & the_Options_of f.k1 c= s by Def11,A1,A5,A6; hence f.(m+1) in s; end; OK[0] from NAT_1:sch 7(A3,A4); hence z in s by A2; end; end; theorem Th31: g1 in the_Tree_of g2 implies the_Tree_of g1 c= the_Tree_of g2 proof assume g1 in the_Tree_of g2; then consider f2 being ConwayGameChain such that A1: f2.1 = g1 & f2.(len f2) = g2 by Def12; hereby let x be object; assume x in the_Tree_of g1; then consider f1 being ConwayGameChain such that A2: f1.1 = x & f1.(len f1) = g1 by Def12; A3: len f1 >= 1 by NAT_1:14; per cases by A3,XXREAL_0:1; suppose len f1 = 1; hence x in the_Tree_of g2 by A1,A2,Def12; end; suppose A4: len f1 > 1; then reconsider n0 = len f1 - 1 as non zero Nat by NAT_1:21; reconsider f0 = f1|n0 as ConwayGameChain by Th25; len f1 is Element of dom f1 & n0 <= len f1 by FINSEQ_5:6,XREAL_1:43; then f1.n0 in the_Options_of g1 & f0.n0 = f1.n0 & len f0 = n0 by Def11,A2,A4,FINSEQ_1:59,FINSEQ_3:112; then reconsider f = f0 ^ f2 as ConwayGameChain by Th26,A1; n0 >= 1 by NAT_1:14; then 1 in dom f0 & len f2 in dom f2 & f0.1 = f1.1 & len f = len f0 + len f2 by FINSEQ_1:22,FINSEQ_3:112,FINSEQ_5:6; then f.1 = x & f.(len f) = g2 by A1,A2,FINSEQ_1:def 7; hence x in the_Tree_of g2 by Def12; end; end; end; theorem Th32: g1 in the_Tree_of g2 implies the_proper_Tree_of g1 c= the_proper_Tree_of g2 proof assume A1: g1 in the_Tree_of g2; then A2: the_Tree_of g1 c= the_Tree_of g2 by Th31; let x be object; assume A3: x in the_proper_Tree_of g1; then A4: x in the_Tree_of g1 & x <> g1 by ZFMISC_1:56; assume A5: not x in the_proper_Tree_of g2; then A6: x = g2 by A2,A4,ZFMISC_1:56; per cases by Th28,A1; suppose g1 = g2; hence contradiction by A3,A5; end; suppose A7: ConwayRank(g1) in ConwayRank(g2); reconsider g = x as ConwayGame by A3; ConwayRank(g) in ConwayRank(g2) by A7,Th29,A4,ORDINAL1:12; hence contradiction by A6; end; end; theorem Th33: the_Options_of g c= the_proper_Tree_of g proof let x be object such that A1: x in the_Options_of g; reconsider gO = x as ConwayGame by A1,Th17; gO in the_Tree_of gO by Th24; then gO in the_Tree_of g by A1,Th27; then gO = g or gO in the_proper_Tree_of g by ZFMISC_1:56; hence thesis by A1,Th16; end; theorem Th34: the_Options_of g c= the_Tree_of g proof the_Options_of g c= the_proper_Tree_of g by Th33; hence thesis by XBOOLE_1:1; end; theorem Th35: g1 in the_proper_Tree_of g2 implies the_Tree_of g1 c= the_proper_Tree_of g2 proof assume A1: g1 in the_proper_Tree_of g2; then A2: g1 in the_Tree_of g2 & g1 <> g2 by ZFMISC_1:56; A3: the_Tree_of g1 c= the_Tree_of g2 by Th31,A1; not g2 in the_Tree_of g1 proof A4: ConwayRank(g1) in ConwayRank(g2) by A2,Th28; assume g2 in the_Tree_of g1; then ConwayRank(g2) c= ConwayRank(g1) by Th29; then ConwayRank(g1) in ConwayRank(g1) by A4; hence contradiction; end; hence thesis by A3,ZFMISC_1:34; end; theorem gO in the_Options_of g implies the_Tree_of gO c= the_proper_Tree_of g proof assume A1: gO in the_Options_of g; the_Options_of g c= the_proper_Tree_of g by Th33; hence thesis by Th35,A1; end; theorem the_Tree_of ConwayZero = { ConwayZero } by Th2,ZFMISC_1:33; theorem ConwayZero in the_Tree_of g proof defpred Bad[ConwayGame] means not ConwayZero in the_Tree_of $1; assume not thesis; then A1: ex g st Bad[g]; consider g such that A2: Bad[g] & for gO st gO in the_Options_of g holds not Bad[gO] from ConwayGameMin(A1); per cases by Th6; suppose g = ConwayZero; hence contradiction by Th24,A2; end; suppose the_Options_of g <> {}; then consider x being object such that A3: x in the_Options_of g by XBOOLE_0:def 1; reconsider gO = x as ConwayGame by Th17,A3; A4: ConwayZero in the_Tree_of gO by A2,A3; the_Options_of g c= the_Tree_of g by Th34; then the_Tree_of gO c= the_Tree_of g by Th31,A3; hence contradiction by A2,A4; end; end; scheme ConwayGameMin2 { P[ConwayGame] } : ex g st P[g] & for gO st gO in the_proper_Tree_of g holds not P[gO] provided A1: ex g st P[g] proof consider g such that A2: P[g] & for g1 st ConwayRank(g1) in ConwayRank(g) holds not P[g1] from ConwayGameMinTot(A1); take g; now let gO; assume gO in the_proper_Tree_of g; then gO in the_Tree_of g & gO <> g by ZFMISC_1:56; then ConwayRank(gO) in ConwayRank(g) by Th28; hence not P[gO] by A2; end; hence thesis by A2; end; begin :: Scheme about definability of functions by recursion scheme Func1RecUniq { F(ConwayGame,Function) -> set } : for g for f1,f2 being Function st dom f1 = the_Tree_of g & dom f2 = the_Tree_of g & (for g1 st g1 in dom f1 holds f1.g1 = F(g1,f1|the_proper_Tree_of g1)) & (for g1 st g1 in dom f2 holds f2.g1 = F(g1,f2|the_proper_Tree_of g1)) holds f1 = f2 proof let g; let f1,f2 be Function such that A1: dom f1 = the_Tree_of g & dom f2 = the_Tree_of g & (for g1 st g1 in dom f1 holds f1.g1 = F(g1,f1|the_proper_Tree_of g1)) & (for g1 st g1 in dom f2 holds f2.g1 = F(g1,f2|the_proper_Tree_of g1)); defpred Bad[ConwayGame] means $1 in the_Tree_of g & f1.$1 <> f2.$1; assume f1 <> f2; then ex x being object st x in the_Tree_of g & f1.x <> f2.x by A1; then A2: ex g0 st Bad[g0]; consider gm being ConwayGame such that A3: Bad[gm] & for gO st gO in the_proper_Tree_of gm holds not Bad[gO] from ConwayGameMin2(A2); A4: f1|the_proper_Tree_of gm = f2|the_proper_Tree_of gm proof now set f1r = f1|the_proper_Tree_of gm; set f2r = f2|the_proper_Tree_of gm; A5: the_Tree_of gm c= the_Tree_of g by A3,Th31; then A6: the_proper_Tree_of gm c= the_Tree_of g; A7: dom f1r = the_proper_Tree_of gm & dom f2r = the_proper_Tree_of gm by A1,A5,RELAT_1:62,XBOOLE_1:1; hence dom f1r = dom f2r; hereby let x being object such that A8: x in dom f1r; reconsider g0 = x as ConwayGame by A7,A8; f1.x = f2.x & f1r.x = f1.x & f2r.x = f2.x by A3,A6,A7,A8,FUNCT_1:47; hence f1r.x = f2r.x; end; end; hence thesis; end; f1.gm = F(gm,f1|the_proper_Tree_of gm) & f2.gm = F(gm,f2|the_proper_Tree_of gm) by A1,A3; hence contradiction by A4,A3; end; scheme Func1RecEx { F(ConwayGame,Function) -> set } : ex f being Function st dom f = the_Tree_of g & for g1 st g1 in dom f holds f.g1 = F(g1,f|the_proper_Tree_of g1) proof defpred GoodFun[Function] means for g st g in dom $1 holds $1.g = F(g,$1|the_proper_Tree_of g); defpred GoodG[ConwayGame] means ex f being Function st dom f = the_Tree_of $1 & GoodFun[f]; defpred GF[object,object] means ex g being ConwayGame st $1 = g & ex f being Function st $2 = f & dom f = the_Tree_of g & GoodFun[f]; A1: for g for f1,f2 being Function st dom f1 = the_Tree_of g & dom f2 = the_Tree_of g & (for g1 st g1 in dom f1 holds f1.g1 = F(g1,f1|the_proper_Tree_of g1)) & (for g1 st g1 in dom f2 holds f2.g1 = F(g1,f2|the_proper_Tree_of g1)) holds f1 = f2 from Func1RecUniq; then A2: for x,y,z being object st GF[x,y] & GF[x,z] holds y=z; A3: for g for f being Function st GoodFun[f] holds GoodFun[f|(the_Tree_of g)] proof let g; let f be Function such that A4: GoodFun[f]; let g1 such that A5: g1 in dom (f|(the_Tree_of g)); dom (f|(the_Tree_of g)) c= dom f by RELAT_1:60; then A6: f.g1 = F(g1,f|the_proper_Tree_of g1) & f.g1 = (f|(the_Tree_of g)).g1 by A4,A5,FUNCT_1:47; dom (f|(the_Tree_of g)) c= the_Tree_of g by RELAT_1:58; then the_Tree_of g1 c= the_Tree_of g by Th31,A5; hence thesis by A6,RELAT_1:74,XBOOLE_1:1; end; A7: for g st (for gO st gO in the_Options_of g holds GoodG[gO]) holds GoodG[g] proof let g; assume A8: for gO st gO in the_Options_of g holds GoodG[gO]; consider FUNCS being set such that A9: for y being object holds y in FUNCS iff ex x being object st x in the_Tree_of g & GF[x,y] from TARSKI:sch 1(A2); FUNCS is functional compatible proof thus FUNCS is functional proof let y be object; assume y in FUNCS; then ex x being object st x in the_Tree_of g & GF[x,y] by A9; hence thesis; end; now let f1,f2 be Function; assume f1 in FUNCS; then ex x being object st x in the_Tree_of g & GF[x,f1] by A9; then consider g1 such that A10: g1 in the_Tree_of g & dom f1 = the_Tree_of g1 & GoodFun[f1]; assume f2 in FUNCS; then ex x being object st x in the_Tree_of g & GF[x,f2] by A9; then consider g2 such that A11: g2 in the_Tree_of g & dom f2 = the_Tree_of g2 & GoodFun[f2]; thus f1 tolerates f2 proof let x be object; assume x in dom f1 /\ dom f2; then A12: x in the_Tree_of g1 & x in the_Tree_of g2 by A10,A11,XBOOLE_0:def 4; then reconsider g0 = x as ConwayGame; set T = the_Tree_of g0; T c= dom f1 & T c= dom f2 by Th31,A10,A11,A12; then dom (f1|T) = T & dom (f2|T) = T & GoodFun[f1|T] & GoodFun[f2|T] by A3,A10,A11,RELAT_1:62; then f1|T = f2|T & g0 in dom (f1|T) & g0 in dom (f2|T) by A1,Th24; then f1|T = f2|T & f1.g0 = (f1|T).g0 & f2.g0 = (f2|T).g0 by FUNCT_1:47; hence thesis; end; end; hence FUNCS is compatible by COMPUT_1:def 1; end; then reconsider FS = FUNCS as functional compatible set; reconsider f = union FS as Function; take f; A13:the_proper_Tree_of g c= dom f proof let x be object; assume x in the_proper_Tree_of g; then x in the_Tree_of g & x <> g by ZFMISC_1:56; then consider gO such that A14: gO in the_Options_of g & x in the_Tree_of gO by Th27; consider fO being Function such that A15: dom fO = the_Tree_of gO & GoodFun[fO] by A8,A14; the_Options_of g c= the_Tree_of g by Th34; then fO in FUNCS by A9,A14,A15; then dom fO c= dom f & x in dom fO by A14,A15,COMPUT_1:13; hence thesis; end; A16: dom f c= the_Tree_of g proof let x be object; assume x in dom f; then [x,f.x] in f by FUNCT_1:def 2; then ex y st [x,f.x] in y & y in FUNCS by TARSKI:def 4; then consider f1 being Function such that A17: [x,f.x] in f1 & f1 in FUNCS; ex y being object st y in the_Tree_of g & GF[y,f1] by A17,A9; then consider g1 such that A18: g1 in the_Tree_of g & dom f1 = the_Tree_of g1; x in dom f1 & dom f1 c= the_Tree_of g by A17,A18,Th31,XTUPLE_0:def 12; hence x in the_Tree_of g; end; A19:GoodFun[f] proof let g1; assume g1 in dom f; then [g1,f.g1] in f by FUNCT_1:def 2; then ex x st [g1,f.g1] in x & x in FUNCS by TARSKI:def 4; then consider fO being Function such that A20: [g1,f.g1] in fO & fO in FUNCS; ex x being object st x in the_Tree_of g & GF[x,fO] by A9,A20; then consider gO such that A21: gO in the_Tree_of g & dom fO = the_Tree_of gO & GoodFun[fO]; A22: fO|the_proper_Tree_of g1 = f|the_proper_Tree_of g1 proof now g1 in the_Tree_of gO by A20,A21,FUNCT_1:1; then the_Tree_of g1 c= the_Tree_of gO by Th31; then A23: the_proper_Tree_of g1 c= dom fO by A21; dom fO c= dom f by A20,COMPUT_1:13; then A24: dom (fO|the_proper_Tree_of g1) = the_proper_Tree_of g1 & dom (f|the_proper_Tree_of g1) = the_proper_Tree_of g1 by A23,RELAT_1:62,XBOOLE_1:1; hence dom (fO|the_proper_Tree_of g1) = dom (f|the_proper_Tree_of g1); hereby let x be object; assume A25: x in dom (fO|the_proper_Tree_of g1); then x in dom fO & x in dom (f|the_proper_Tree_of g1) by A24,RELAT_1:57; then fO.x = f.x & (fO|the_proper_Tree_of g1).x = fO.x & (f|the_proper_Tree_of g1).x = f.x by A25,A20,COMPUT_1:13,FUNCT_1:47; hence (fO|the_proper_Tree_of g1).x = (f|the_proper_Tree_of g1).x; end; end; hence thesis; end; g1 in the_Tree_of gO by A20,A21,FUNCT_1:1; then fO.g1 = F(g1,fO|the_proper_Tree_of g1) & fO.g1 = f.g1 by A21,A20,COMPUT_1:13; hence f.g1 = F(g1,f|the_proper_Tree_of g1) by A22; end; g in dom f proof assume A26: not g in dom f; set v = F(g, f|the_proper_Tree_of g); dom { [g,v] } = { g } by RELAT_1:9; then { [g,v] } tolerates f by A26,PARTFUN1:56,ZFMISC_1:50; then reconsider h = { [g,v] } \/ f as Function by PARTFUN1:51; A27: dom h = dom f \/ dom { [g,v] } by XTUPLE_0:23; then A28: dom h = dom f \/ {g} by RELAT_1:9; A29: GF[g,h] proof take g; thus g = g; take h; thus h = h; now hereby let x be object; assume x in the_Tree_of g; then A30: x in ({g} /\ the_Tree_of g) \/ (the_Tree_of g \ {g}) by XBOOLE_1:51; per cases by A30,XBOOLE_0:def 3; suppose x in {g} /\ the_Tree_of g; then x in {g} & {g} c= dom h by A28,XBOOLE_0:def 4,XBOOLE_1:7; hence x in dom h; end; suppose x in the_proper_Tree_of g; then x in dom f & dom f c= dom h by A13,A27,XBOOLE_1:7; hence x in dom h; end; end; hereby let x be object; assume A31: x in dom h; per cases by A31,A28,ZFMISC_1:136; suppose x = g; hence x in the_Tree_of g by Th24; end; suppose x in dom f; hence x in the_Tree_of g by A16; end; end; end; hence A32: dom h = the_Tree_of g by TARSKI:2; thus GoodFun[h] proof let g1; assume A33: g1 in dom h; now thus f|the_proper_Tree_of g1 c= h|the_proper_Tree_of g1 by RELAT_1:76,XBOOLE_1:7; A34: the_proper_Tree_of g1 c= the_proper_Tree_of g by Th32,A32,A33; then A35: the_proper_Tree_of g1 c= dom f by A13; thus dom (f|the_proper_Tree_of g1) = the_proper_Tree_of g1 by A34,A13,RELAT_1:62,XBOOLE_1:1; f c= h by XBOOLE_1:7; then dom f c= dom h by RELAT_1:11; hence dom (h|the_proper_Tree_of g1) = the_proper_Tree_of g1 by A35,RELAT_1:62,XBOOLE_1:1; end; then A36: h|the_proper_Tree_of g1 = f|the_proper_Tree_of g1 by GRFUNC_1:3; per cases by A33,A28,ZFMISC_1:136; suppose A37: g1 = g; [g,v] in h by ZFMISC_1:136; hence thesis by A36,A33,A37,FUNCT_1:def 2; end; suppose A38: g1 in dom f; f c= h by XBOOLE_1:7; then f.g1 = h.g1 by A38,GRFUNC_1:2; hence thesis by A19,A38,A36; end; end; end; g in the_Tree_of g by Th24; then h in FUNCS by A9,A29; then h c= f by ZFMISC_1:74; hence contradiction by A26,A28,RELAT_1:11,ZFMISC_1:39; end; then A39: {g} c= dom f by ZFMISC_1:31; the_Tree_of g = the_proper_Tree_of g \/ {g} by Th24,ZFMISC_1:116; then the_Tree_of g c= dom f by A39,A13,XBOOLE_1:8; hence dom f = the_Tree_of g by A16,XBOOLE_0:def 10; thus GoodFun[f] by A19; end; for g holds GoodG[g] from ConwayGameInd(A7); hence thesis; end; begin :: The negative and signs Lm3: for f being Function holds { (f|the_proper_Tree_of g1).gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} } = { f.gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} } & { (f|the_proper_Tree_of g1).gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} } = { f.gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} } proof let f be Function; set R1 = { (f|the_proper_Tree_of g1).gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} }; set R2 = { f.gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} }; set L1 = { (f|the_proper_Tree_of g1).gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} }; set L2 = { f.gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} }; A1: for gO st (gO in the_LeftOptions_of g1 or gO in the_RightOptions_of g1) holds (f|the_proper_Tree_of g1).gO = f.gO proof let gO; assume gO in the_LeftOptions_of g1 or gO in the_RightOptions_of g1; then gO in the_Options_of g1 & the_Options_of g1 c= the_proper_Tree_of g1 by Th33,XBOOLE_0:def 3; hence thesis by FUNCT_1:49; end; now hereby let x be object; assume x in R1; then consider gR being Element of the_RightOptions_of g1 such that A2: x = (f|the_proper_Tree_of g1).gR & the_RightOptions_of g1 <> {}; gR in the_RightOptions_of g1 & gR is ConwayGame by A2,Th18; then (f|the_proper_Tree_of g1).gR = f.gR by A1; hence x in R2 by A2; end; hereby let x be object; assume x in R2; then consider gR being Element of the_RightOptions_of g1 such that A3: x = f.gR & the_RightOptions_of g1 <> {}; gR in the_RightOptions_of g1 & gR is ConwayGame by A3,Th18; then (f|the_proper_Tree_of g1).gR = f.gR by A1; hence x in R1 by A3; end; end; hence R1 = R2 by TARSKI:2; now hereby let x be object; assume x in L1; then consider gL being Element of the_LeftOptions_of g1 such that A4: x = (f|the_proper_Tree_of g1).gL & the_LeftOptions_of g1 <> {}; gL in the_LeftOptions_of g1 & gL is ConwayGame by A4,Th18; then (f|the_proper_Tree_of g1).gL = f.gL by A1; hence x in L2 by A4; end; hereby let x be object; assume x in L2; then consider gL being Element of the_LeftOptions_of g1 such that A5: x = f.gL & the_LeftOptions_of g1 <> {}; gL in the_LeftOptions_of g1 & gL is ConwayGame by A5,Th18; then (f|the_proper_Tree_of g1).gL = f.gL by A1; hence x in L1 by A5; end; end; hence L1 = L2 by TARSKI:2; end; definition let g; func -g -> set means :Def14: ex f being Function st dom f = the_Tree_of g & it = f.g & for g1 st g1 in dom f holds f.g1 = left-right(# { f.gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} }, { f.gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} } #); existence proof deffunc F(ConwayGame,Function) = left-right(# { $2.gR where gR is Element of the_RightOptions_of $1 : the_RightOptions_of $1 <> {} }, { $2.gL where gL is Element of the_LeftOptions_of $1 : the_LeftOptions_of $1 <> {} } #); for g ex f being Function st dom f = the_Tree_of g & for g1 st g1 in dom f holds f.g1 = F(g1,f|the_proper_Tree_of g1) from Func1RecEx; then consider f being Function such that A1: dom f = the_Tree_of g & for g1 st g1 in dom f holds f.g1 = F(g1,f|the_proper_Tree_of g1); take v = f.g; take f; thus dom f = the_Tree_of g by A1; thus f.g = v; let g1 such that A2: g1 in dom f; { (f|the_proper_Tree_of g1).gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} } = { f.gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} } & { (f|the_proper_Tree_of g1).gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} } = { f.gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} } by Lm3; hence thesis by A1,A2; end; uniqueness proof deffunc F(ConwayGame,Function) = left-right(# { $2.gR where gR is Element of the_RightOptions_of $1 : the_RightOptions_of $1 <> {} }, { $2.gL where gL is Element of the_LeftOptions_of $1 : the_LeftOptions_of $1 <> {} } #); let g1,g2 be set; assume ex f1 being Function st dom f1 = the_Tree_of g & g1 = f1.g & for g0 st g0 in dom f1 holds f1.g0 = F(g0,f1); then consider f1 being Function such that A3: dom f1 = the_Tree_of g & g1 = f1.g & for g0 st g0 in dom f1 holds f1.g0 = F(g0,f1); assume ex f2 being Function st dom f2 = the_Tree_of g & g2 = f2.g & for g0 st g0 in dom f2 holds f2.g0 = F(g0,f2); then consider f2 being Function such that A4: dom f2 = the_Tree_of g & g2 = f2.g & for g0 st g0 in dom f2 holds f2.g0 = F(g0,f2); A5: for g0 st g0 in dom f1 holds f1.g0 = F(g0, f1|the_proper_Tree_of g0) proof let g0; set LOr = { (f1|the_proper_Tree_of g0).gR where gR is Element of the_RightOptions_of g0 : the_RightOptions_of g0 <> {} }; set ROr = { (f1|the_proper_Tree_of g0).gL where gL is Element of the_LeftOptions_of g0 : the_LeftOptions_of g0 <> {} }; set LOu = { f1.gR where gR is Element of the_RightOptions_of g0 : the_RightOptions_of g0 <> {} }; set ROu = { f1.gL where gL is Element of the_LeftOptions_of g0 : the_LeftOptions_of g0 <> {} }; LOu = LOr & ROu = ROr by Lm3; hence thesis by A3; end; A6: for g0 st g0 in dom f2 holds f2.g0 = F(g0, f2|the_proper_Tree_of g0) proof let g0; set LOr = { (f2|the_proper_Tree_of g0).gR where gR is Element of the_RightOptions_of g0 : the_RightOptions_of g0 <> {} }; set ROr = { (f2|the_proper_Tree_of g0).gL where gL is Element of the_LeftOptions_of g0 : the_LeftOptions_of g0 <> {} }; set LOu = { f2.gR where gR is Element of the_RightOptions_of g0 : the_RightOptions_of g0 <> {} }; set ROu = { f2.gL where gL is Element of the_LeftOptions_of g0 : the_LeftOptions_of g0 <> {} }; LOu = LOr & ROu = ROr by Lm3; hence thesis by A4; end; for g for f1,f2 being Function st dom f1 = the_Tree_of g & dom f2 = the_Tree_of g & (for g1 st g1 in dom f1 holds f1.g1 = F(g1,f1|the_proper_Tree_of g1)) & (for g1 st g1 in dom f2 holds f2.g1 = F(g1,f2|the_proper_Tree_of g1)) holds f1 = f2 from Func1RecUniq; hence thesis by A3,A4,A5,A6; end; end; registration let g; cluster -g -> ConwayGame-like; coherence proof consider f being Function such that A1: dom f = the_Tree_of g & -g = f.g & for g1 st g1 in dom f holds f.g1 = left-right(# { f.gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} }, { f.gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} } #) by Def14; defpred GV[ConwayGame] means $1 in dom f implies f.$1 is ConwayGame; A2: for g1 st (for gO st gO in the_Options_of g1 holds GV[gO]) holds GV[g1] proof let g1; assume A3: for gO st gO in the_Options_of g1 holds GV[gO]; assume A4: g1 in dom f; set L = { f.gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} }; set R = { f.gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} }; A5: f.g1 = left-right(#L,R#) by A1,A4; now let z; assume A6: z in L \/ R; ex gO st gO in the_Options_of g1 & z = f.gO proof per cases by A6,XBOOLE_0:def 3; suppose z in L; then consider gR being Element of the_RightOptions_of g1 such that A7: z = f.gR & the_RightOptions_of g1 <> {}; reconsider gO = gR as ConwayGame by Th18,A7; take gO; thus thesis by A7,XBOOLE_0:def 3; end; suppose z in R; then consider gL being Element of the_LeftOptions_of g1 such that A8: z = f.gL & the_LeftOptions_of g1 <> {}; reconsider gO = gL as ConwayGame by Th18,A8; take gO; thus thesis by A8,XBOOLE_0:def 3; end; end; then consider gO such that A9: gO in the_Options_of g1 & z = f.gO; the_Options_of g1 c= the_Tree_of g1 & the_Tree_of g1 c= dom f by Th34,Th31,A4,A1; then the_Options_of g1 c= dom f; hence z is ConwayGame by A3,A9; end; hence thesis by A5,Th19; end; A10:for g holds GV[g] from ConwayGameInd(A2); g in the_Tree_of g by Th24; hence thesis by A1,A10; end; end; Lm4: for f being Function st dom f = the_Tree_of g & for g1 st g1 in dom f holds f.g1 = left-right(# { f.gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} }, { f.gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} } #) for g1 st g1 in dom f holds f.g1 = -g1 proof let f be Function such that A1: dom f = the_Tree_of g & for g1 st g1 in dom f holds f.g1 = left-right(# { f.gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} }, { f.gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} } #); let g1 such that A2: g1 in dom f; set f1 = f|(the_Tree_of g1); A3: dom f1 = the_Tree_of g1 by A1,A2,Th31,RELAT_1:62; now let g2 such that A4: g2 in dom f1; set L = { f.gR where gR is Element of the_RightOptions_of g2 : the_RightOptions_of g2 <> {} }; set L1 = { f1.gR where gR is Element of the_RightOptions_of g2 : the_RightOptions_of g2 <> {} }; set R = { f.gL where gL is Element of the_LeftOptions_of g2 : the_LeftOptions_of g2 <> {} }; set R1 = { f1.gL where gL is Element of the_LeftOptions_of g2 : the_LeftOptions_of g2 <> {} }; dom f1 c= dom f by RELAT_1:60; then A5: f.g2 = left-right(#L,R#) by A1,A4; A6: for gO st (gO in the_LeftOptions_of g2 or gO in the_RightOptions_of g2) holds f1.gO = f.gO proof let gO; assume gO in the_LeftOptions_of g2 or gO in the_RightOptions_of g2; then gO in the_Options_of g2 & the_Options_of g2 c= the_Tree_of g2 by Th34,XBOOLE_0:def 3; then gO in the_Tree_of g2 & the_Tree_of g2 c= dom f1 by Th31,A4,A3; hence thesis by FUNCT_1:47; end; now hereby let x be object; assume x in L; then consider gR being Element of the_RightOptions_of g2 such that A7: x = f.gR & the_RightOptions_of g2 <> {}; gR in the_RightOptions_of g2 & gR is ConwayGame by A7,Th18; then f1.gR = f.gR by A6; hence x in L1 by A7; end; hereby let x be object; assume x in L1; then consider gR being Element of the_RightOptions_of g2 such that A8: x = f1.gR & the_RightOptions_of g2 <> {}; gR in the_RightOptions_of g2 & gR is ConwayGame by A8,Th18; then f1.gR = f.gR by A6; hence x in L by A8; end; end; then A9: L = L1 by TARSKI:2; now hereby let x be object; assume x in R; then consider gL being Element of the_LeftOptions_of g2 such that A10: x = f.gL & the_LeftOptions_of g2 <> {}; gL in the_LeftOptions_of g2 & gL is ConwayGame by A10,Th18; then f1.gL = f.gL by A6; hence x in R1 by A10; end; hereby let x be object; assume x in R1; then consider gL being Element of the_LeftOptions_of g2 such that A11: x = f1.gL & the_LeftOptions_of g2 <> {}; gL in the_LeftOptions_of g2 & gL is ConwayGame by A11,Th18; then f1.gL = f.gL by A6; hence x in R by A11; end; end; then R = R1 by TARSKI:2; hence f1.g2 = left-right(#L1,R1#) by A4,A5,A9,FUNCT_1:47; end; then f1.g1 = -g1 & g1 in dom f1 by Def14,A3,Th24; hence thesis by FUNCT_1:47; end; theorem Th39: (for x holds x in the_LeftOptions_of -g iff ex gR st gR in the_RightOptions_of g & x = -gR) & (for x holds x in the_RightOptions_of -g iff ex gL st gL in the_LeftOptions_of g & x = -gL) proof consider f being Function such that A1: dom f = the_Tree_of g & f.g = -g & for g1 st g1 in dom f holds f.g1 = left-right(# { f.gR where gR is Element of the_RightOptions_of g1 : the_RightOptions_of g1 <> {} }, { f.gL where gL is Element of the_LeftOptions_of g1 : the_LeftOptions_of g1 <> {} } #) by Def14; A2: (gO in the_RightOptions_of g or gO in the_LeftOptions_of g) implies f.gO = -gO proof assume gO in the_RightOptions_of g or gO in the_LeftOptions_of g; then gO in the_Options_of g & the_Options_of g c= the_Tree_of g by Th34,XBOOLE_0:def 3; hence thesis by Lm4,A1; end; set L = { f.gR where gR is Element of the_RightOptions_of g : the_RightOptions_of g <> {} }; set R = { f.gL where gL is Element of the_LeftOptions_of g : the_LeftOptions_of g <> {} }; -g = left-right(#L,R#) by A1,Th24; then A3: the_LeftOptions_of -g = L & the_RightOptions_of -g = R by Def6,Def7; hereby let x; hereby assume x in the_LeftOptions_of -g; then consider gR0 being Element of the_RightOptions_of g such that A4: x = f.gR0 & the_RightOptions_of g <> {} by A3; reconsider gR = gR0 as ConwayGame by Th18,A4; take gR; thus gR in the_RightOptions_of g & x = -gR by A4,A2; end; hereby assume ex gR st gR in the_RightOptions_of g & x = -gR; then consider gR such that A5: x = -gR & gR in the_RightOptions_of g; f.gR = -gR by A2,A5; hence x in the_LeftOptions_of -g by A3,A5; end; end; hereby let x; hereby assume x in the_RightOptions_of -g; then consider gL0 being Element of the_LeftOptions_of g such that A6: x = f.gL0 & the_LeftOptions_of g <> {} by A3; reconsider gL = gL0 as ConwayGame by Th18,A6; take gL; thus gL in the_LeftOptions_of g & x = -gL by A6,A2; end; hereby assume ex gL st gL in the_LeftOptions_of g & x = -gL; then consider gL such that A7: x = -gL & gL in the_LeftOptions_of g; f.gL = -gL by A2,A7; hence x in the_RightOptions_of -g by A3,A7; end; end; end; theorem Th40: -(-g) = g proof defpred Bad[ConwayGame] means -(-$1) <> $1; assume not thesis; then A1: ex g st Bad[g]; consider g such that A2: Bad[g] & for gO st gO in the_Options_of g holds not Bad[gO] from ConwayGameMin(A1); now hereby let x be object; assume x in the_LeftOptions_of -(-g); then consider gR such that A3: gR in the_RightOptions_of -g & x = -gR by Th39; consider gL such that A4: gL in the_LeftOptions_of g & gR = -gL by Th39,A3; gL in the_Options_of g by A4,XBOOLE_0:def 3; hence x in the_LeftOptions_of g by A2,A3,A4; end; hereby let x be object; assume A5: x in the_LeftOptions_of g; reconsider gL = x as ConwayGame by Th18,A5; -gL in the_RightOptions_of -g & gL in the_Options_of g by Th39,A5,XBOOLE_0:def 3; then -(-gL) in the_LeftOptions_of -(-g) & -(-gL) = gL by Th39,A2; hence x in the_LeftOptions_of -(-g); end; end; then A6: the_LeftOptions_of -(-g) = the_LeftOptions_of g by TARSKI:2; now hereby let x be object; assume x in the_RightOptions_of -(-g); then consider gL such that A7: gL in the_LeftOptions_of -g & x = -gL by Th39; consider gR such that A8: gR in the_RightOptions_of g & gL = -gR by Th39,A7; gR in the_Options_of g by A8,XBOOLE_0:def 3; hence x in the_RightOptions_of g by A2,A7,A8; end; hereby let x be object; assume A9: x in the_RightOptions_of g; reconsider gR = x as ConwayGame by Th18,A9; -gR in the_LeftOptions_of -g & gR in the_Options_of g by Th39,A9,XBOOLE_0:def 3; then -(-gR) in the_RightOptions_of -(-g) & -(-gR) = gR by Th39,A2; hence x in the_RightOptions_of -(-g); end; end; then the_RightOptions_of -(-g) = the_RightOptions_of g by TARSKI:2; hence contradiction by A2,A6,Th5; end; theorem (gO in the_LeftOptions_of -g iff -gO in the_RightOptions_of g) & (gO in the_LeftOptions_of g iff -gO in the_RightOptions_of -g) & (gO in the_RightOptions_of -g iff -gO in the_LeftOptions_of g) & (gO in the_RightOptions_of g iff -gO in the_LeftOptions_of -g) proof g = -(-g) & gO = -(-gO) by Th40; hence thesis by Th39; end; definition let g; attr g is nonnegative means ex s st g in s & for g1 st g1 in s for gR st gR in the_RightOptions_of g1 ex gRL st gRL in the_LeftOptions_of gR & gRL in s; end; definition let g; attr g is nonpositive means :Def16: -g is nonnegative; end; definition let g; attr g is zero means g is nonnegative & g is nonpositive; attr g is fuzzy means not g is nonnegative & not g is nonpositive; end; definition let g; attr g is positive means g is nonnegative & not g is zero; attr g is negative means g is nonpositive & not g is zero; end; registration cluster zero -> nonnegative nonpositive for ConwayGame; coherence; cluster nonpositive nonnegative -> zero for ConwayGame; coherence; cluster negative -> nonpositive non zero for ConwayGame; coherence; cluster nonpositive non zero -> negative for ConwayGame; coherence; cluster positive -> nonnegative non zero for ConwayGame; coherence; cluster nonnegative non zero -> positive for ConwayGame; coherence; cluster fuzzy -> non nonnegative non nonpositive for ConwayGame; coherence; cluster non nonnegative non nonpositive -> fuzzy for ConwayGame; coherence; end; theorem g is zero or g is positive or g is negative or g is fuzzy; theorem Th43: g is nonnegative iff for gR st gR in the_RightOptions_of g ex gRL st gRL in the_LeftOptions_of gR & gRL is nonnegative proof defpred S[set] means for g st g in $1 for gR st gR in the_RightOptions_of g ex gRL st gRL in the_LeftOptions_of gR & gRL in $1; A1: S[s] implies S[s /\ ConwayDay(alpha)] proof assume A2: S[s]; let g; assume g in s /\ ConwayDay(alpha); then A3: g in s & g in ConwayDay(alpha) by XBOOLE_0:def 4; let gR; assume A4: gR in the_RightOptions_of g; then consider gRL such that A5: gRL in the_LeftOptions_of gR & gRL in s by A2,A3; take gRL; gR in ConwayDay(alpha) by Th11,A3,A4; then gRL in ConwayDay(alpha) by Th11,A5; hence thesis by A5,XBOOLE_0:def 4; end; hereby assume g is nonnegative; then consider s such that A6: g in s & S[s]; let gR; assume gR in the_RightOptions_of g; then consider gRL such that A7: gRL in the_LeftOptions_of gR & gRL in s by A6; take gRL; thus gRL in the_LeftOptions_of gR by A7; thus gRL is nonnegative by A6,A7; end; hereby assume A8: for gR st gR in the_RightOptions_of g ex gRL st gRL in the_LeftOptions_of gR & gRL is nonnegative; consider alpha such that A9: g in ConwayDay(alpha) by Def3; now set ss = { s1 where s1 is Subset of ConwayDay(alpha) : S[s1] }; take s = union ss; A10: S[s] proof let g1; assume g1 in s; then consider s2 being set such that A11: g1 in s2 & s2 in ss by TARSKI:def 4; consider s1 being Subset of ConwayDay(alpha) such that A12: s1 = s2 & S[s1] by A11; let gR; assume gR in the_RightOptions_of g1; then consider gRL such that A13: gRL in the_LeftOptions_of gR & gRL in s1 by A11,A12; take gRL; s2 c= s by A11,ZFMISC_1:74; hence thesis by A12,A13; end; thus g in s proof now let x; assume x in ss; then ex s1 being Subset of ConwayDay(alpha) st x = s1 & S[s1]; hence x c= ConwayDay(alpha); end; then A14: s c= ConwayDay(alpha) by ZFMISC_1:76; {g} c= ConwayDay(alpha) by A9,ZFMISC_1:31; then reconsider sg = s \/ {g} as Subset of ConwayDay(alpha) by A14,XBOOLE_1:8; S[sg] proof let g1 such that A15: g1 in sg; let gR such that A16: gR in the_RightOptions_of g1; per cases by A15,XBOOLE_0:def 3; suppose g1 in s; then consider gRL such that A17: gRL in the_LeftOptions_of gR & gRL in s by A10,A16; take gRL; thus gRL in the_LeftOptions_of gR by A17; s c= sg by XBOOLE_1:7; hence gRL in sg by A17; end; suppose g1 in {g}; then g1 = g by TARSKI:def 1; then consider gRL such that A18: gRL in the_LeftOptions_of gR & gRL is nonnegative by A8,A16; consider s0 being set such that A19: gRL in s0 & S[s0] by A18; take gRL; thus gRL in the_LeftOptions_of gR by A18; reconsider s1 = s0 /\ ConwayDay(alpha) as Subset of ConwayDay(alpha) by XBOOLE_1:17; S[s1] by A19,A1; then s1 in ss; then A20: s1 c= s by ZFMISC_1:74; gR in ConwayDay(alpha) by A15,A16,Th11; then gRL in ConwayDay(alpha) by A18,Th11; then gRL in s1 by A19,XBOOLE_0:def 4; hence gRL in sg by A20,XBOOLE_0:def 3; end; end; then A21: sg in ss; g in {g} by TARSKI:def 1; then g in sg by XBOOLE_0:def 3; hence g in s by A21,TARSKI:def 4; end; thus S[s] by A10; end; hence g is nonnegative; end; end; theorem Th44: g is nonpositive iff for gL st gL in the_LeftOptions_of g ex gLR st gLR in the_RightOptions_of gL & gLR is nonpositive proof hereby assume g is nonpositive; then A1: -g is nonnegative; let gL; assume gL in the_LeftOptions_of g; then -gL in the_RightOptions_of -g by Th39; then consider gRL such that A2: gRL in the_LeftOptions_of -gL & gRL is nonnegative by A1,Th43; take gLR = -gRL; gLR in the_RightOptions_of -(-gL) & -(-gL) = gL & -gLR = gRL by A2,Th39,Th40; hence gLR in the_RightOptions_of gL & gLR is nonpositive by A2; end; assume A3: for gL st gL in the_LeftOptions_of g ex gLR st gLR in the_RightOptions_of gL & gLR is nonpositive; now let gR; assume gR in the_RightOptions_of -g; then -gR in the_LeftOptions_of -(-g) & -(-g) = g by Th39,Th40; then consider gLR such that A4: gLR in the_RightOptions_of -gR & gLR is nonpositive by A3; take gRL = -gLR; gRL in the_LeftOptions_of -(-gR) & -(-gR) = gR by A4,Th39,Th40; hence gRL in the_LeftOptions_of gR & gRL is nonnegative by A4; end; then -g is nonnegative by Th43; hence g is nonpositive; end; theorem Th45: (g is nonnegative iff for gR st gR in the_RightOptions_of g holds gR is fuzzy or gR is positive) & (g is nonpositive iff for gL st gL in the_LeftOptions_of g holds gL is fuzzy or gL is negative) proof defpred Good[ConwayGame] means ($1 is nonnegative iff for gR st gR in the_RightOptions_of $1 holds gR is fuzzy or gR is positive) & ($1 is nonpositive iff for gL st gL in the_LeftOptions_of $1 holds gL is fuzzy or gL is negative); A1: for g st (for gO st gO in the_Options_of g holds Good[gO]) holds Good[g] proof let g; assume A2: for gO st gO in the_Options_of g holds Good[gO]; hereby assume A3: g is nonnegative; let gR such that A4: gR in the_RightOptions_of g; consider gRL such that A5: gRL in the_LeftOptions_of gR & gRL is nonnegative by A3,A4,Th43; now gR in the_Options_of g by A4,XBOOLE_0:def 3; hence Good[gR] by A2; hereby take gRL; thus gRL in the_LeftOptions_of gR by A5; thus gRL is non fuzzy non negative by A5; end; end; then gR is non negative non zero; hence gR is fuzzy or gR is positive; end; hereby assume A6: for gR st gR in the_RightOptions_of g holds gR is fuzzy or gR is positive; now let gR; assume A7: gR in the_RightOptions_of g; now gR in the_Options_of g by A7,XBOOLE_0:def 3; hence Good[gR] by A2; gR is fuzzy or gR is positive by A6,A7; hence gR is non nonpositive; end; then consider gRL such that A8: gRL in the_LeftOptions_of gR & gRL is non fuzzy non negative; take gRL; thus gRL in the_LeftOptions_of gR & gRL is nonnegative by A8; end; hence g is nonnegative by Th43; end; hereby assume A9: g is nonpositive; let gL such that A10: gL in the_LeftOptions_of g; consider gLR such that A11: gLR in the_RightOptions_of gL & gLR is nonpositive by A9,A10,Th44; now gL in the_Options_of g by A10,XBOOLE_0:def 3; hence Good[gL] by A2; hereby take gLR; thus gLR in the_RightOptions_of gL by A11; thus gLR is non fuzzy non positive by A11; end; end; then gL is non positive non zero; hence gL is fuzzy or gL is negative; end; hereby assume A12: for gL st gL in the_LeftOptions_of g holds gL is fuzzy or gL is negative; now let gL; assume A13: gL in the_LeftOptions_of g; now gL in the_Options_of g by A13,XBOOLE_0:def 3; hence Good[gL] by A2; gL is fuzzy or gL is negative by A12,A13; hence gL is non nonnegative; end; then consider gLR such that A14: gLR in the_RightOptions_of gL & gLR is non fuzzy non positive; take gLR; thus gLR in the_RightOptions_of gL & gLR is nonpositive by A14; end; hence g is nonpositive by Th44; end; end; for g holds Good[g] from ConwayGameInd(A1); hence thesis; end; theorem Th46: g is fuzzy iff (ex gL st gL in the_LeftOptions_of g & gL is nonnegative) & (ex gR st gR in the_RightOptions_of g & gR is nonpositive) proof hereby assume A1: g is fuzzy; hereby consider gL such that A2: gL in the_LeftOptions_of g & for gLR st gLR in the_RightOptions_of gL holds gLR is non nonpositive by A1,Th44; take gL; thus gL in the_LeftOptions_of g by A2; for gLR st gLR in the_RightOptions_of gL holds gLR is fuzzy or gLR is positive by A2; hence gL is nonnegative by Th45; end; hereby consider gR such that A3: gR in the_RightOptions_of g & for gRL st gRL in the_LeftOptions_of gR holds gRL is non nonnegative by A1,Th43; take gR; thus gR in the_RightOptions_of g by A3; for gRL st gRL in the_LeftOptions_of gR holds gRL is fuzzy or gRL is negative by A3; hence gR is nonpositive by Th45; end; end; hereby assume ex gL st gL in the_LeftOptions_of g & gL is nonnegative; then consider gL such that A4: gL in the_LeftOptions_of g & gL is nonnegative; assume ex gR st gR in the_RightOptions_of g & gR is nonpositive; then consider gR such that A5: gR in the_RightOptions_of g & gR is nonpositive; gL is non fuzzy non negative & gR is non fuzzy non positive by A4,A5; then g is non nonpositive & g is non nonnegative by Th45,A4,A5; hence g is fuzzy; end; end; theorem Th47: g is zero iff (for gL st gL in the_LeftOptions_of g holds gL is fuzzy or gL is negative) & (for gR st gR in the_RightOptions_of g holds gR is fuzzy or gR is positive) by Th45; theorem Th48: g is positive iff (for gR st gR in the_RightOptions_of g holds gR is fuzzy or gR is positive) & (ex gL st gL in the_LeftOptions_of g & gL is nonnegative) proof hereby assume A1: g is positive; hence A2: for gR st gR in the_RightOptions_of g holds gR is fuzzy or gR is positive by Th45; consider gL such that A3: gL in the_LeftOptions_of g & gL is non fuzzy non negative by Th47,A1,A2; take gL; thus gL in the_LeftOptions_of g & gL is nonnegative by A3; end; hereby assume for gR st gR in the_RightOptions_of g holds gR is fuzzy or gR is positive; then A4: g is nonnegative by Th45; assume ex gL st gL in the_LeftOptions_of g & gL is nonnegative; then consider gL such that A5: gL in the_LeftOptions_of g & gL is nonnegative; gL is non fuzzy non negative by A5; then not g is zero by Th47,A5; hence g is positive by A4; end; end; theorem g is negative iff (for gL st gL in the_LeftOptions_of g holds gL is fuzzy or gL is negative) & (ex gR st gR in the_RightOptions_of g & gR is nonpositive) proof hereby assume A1: g is negative; hence A2: for gL st gL in the_LeftOptions_of g holds gL is fuzzy or gL is negative by Th45; consider gR such that A3: gR in the_RightOptions_of g & gR is non fuzzy non positive by Th47,A1,A2; take gR; thus gR in the_RightOptions_of g & gR is nonpositive by A3; end; hereby assume for gL st gL in the_LeftOptions_of g holds gL is fuzzy or gL is negative; then A4: g is nonpositive by Th45; assume ex gR st gR in the_RightOptions_of g & gR is nonpositive; then consider gR such that A5: gR in the_RightOptions_of g & gR is nonpositive; gR is non fuzzy non positive by A5; then not g is zero by Th47,A5; hence g is negative by A4; end; end; registration cluster ConwayZero -> zero; coherence proof (for gL st gL in the_LeftOptions_of ConwayZero holds gL is fuzzy or gL is negative) & (for gR st gR in the_RightOptions_of ConwayZero holds gR is fuzzy or gR is positive); hence thesis by Th47; end; end; registration cluster ConwayOne -> positive; coherence proof set gL = ConwayZero; gL in the_LeftOptions_of ConwayOne & gL is nonnegative & for gR st gR in the_RightOptions_of ConwayOne holds gR is fuzzy or gR is positive by Th7; hence thesis by Th48; end; cluster ConwayStar -> fuzzy; coherence proof set gL = ConwayZero; gL in the_LeftOptions_of ConwayStar & gL is nonnegative & gL in the_RightOptions_of ConwayStar & gL is nonpositive by Th8; hence thesis by Th46; end; end; registration cluster zero for ConwayGame; existence proof take ConwayZero; thus thesis; end; cluster positive for ConwayGame; existence proof take ConwayOne; thus thesis; end; cluster fuzzy for ConwayGame; existence proof take ConwayStar; thus thesis; end; end; registration let g be nonpositive ConwayGame; cluster -g -> nonnegative; coherence by Def16; end; registration let g be nonnegative ConwayGame; cluster -g -> nonpositive; coherence by Th40; end; registration let g be positive ConwayGame; cluster -g -> negative; coherence proof g = -(-g) by Th40; then -g is non zero nonpositive; hence thesis; end; end; registration cluster negative for ConwayGame; existence proof take -ConwayOne; thus thesis; end; end; registration let g be negative ConwayGame; cluster -g -> positive; coherence proof g = -(-g) by Th40; then -g is non zero nonnegative; hence thesis; end; end; registration let g be fuzzy ConwayGame; cluster -g -> fuzzy; coherence proof g = -(-g) by Th40; then -g is non positive non negative non zero; hence thesis; end; end;