From 871544260257c016fd2a1142f9ae4f20db3b142d Mon Sep 17 00:00:00 2001 From: djvelleman <110697570+djvelleman@users.noreply.github.com> Date: Mon, 9 Sep 2024 11:18:51 -0400 Subject: [PATCH] Add tools for searching Mathlib --- Chap3.qmd | 2 +- docs/Chap3.html | 2 +- docs/How-To-Prove-It-With-Lean.pdf | Bin 2293490 -> 2293709 bytes docs/search.json | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Chap3.qmd b/Chap3.qmd index 9570b06..b5c64c9 100644 --- a/Chap3.qmd +++ b/Chap3.qmd @@ -4021,7 +4021,7 @@ Usually your proof will be more readable if you use the `show` tactic to state e The `apply?` tactic has not only come up with a suggested tactic, it has applied that tactic, and the proof is now complete. You can confirm that the tactic completes the proof by replacing the line `apply?` in the proof with `apply?`'s suggested `exact` tactic. -The `apply?` tactic is somewhat unpredictable; sometimes it is able to find the right theorem in the library, and sometimes it isn't. But it is always worth a try. Another way to try to find theorems is to visit the documentation page for Lean's mathematics library, which can be found at [https://leanprover-community.github.io/mathlib4_docs/](https://leanprover-community.github.io/mathlib4_docs/). +The `apply?` tactic is somewhat unpredictable; sometimes it is able to find the right theorem in the library, and sometimes it isn't. But it is always worth a try. There are also tools available on the internet for searching Lean's library, including [LeanSearch](https://leansearch.net), [Moogle](https://www.moogle.ai), and [Loogle](https://loogle.lean-lang.org). Another way to try to find theorems is to visit the documentation page for Lean's mathematics library, which can be found at [https://leanprover-community.github.io/mathlib4_docs/](https://leanprover-community.github.io/mathlib4_docs/). ### Exercises diff --git a/docs/Chap3.html b/docs/Chap3.html index f2797dd..5a74872 100644 --- a/docs/Chap3.html +++ b/docs/Chap3.html @@ -3399,7 +3399,7 @@

To us

The command #check @Or.comm will tell you that Or.comm is just an alternative name for the theorem or_comm. So the step suggested by the apply? tactic is essentially the same as the step we used earlier to complete the proof.

Usually your proof will be more readable if you use the show tactic to state explicitly the goal that is being proven. This also gives Lean a chance to correct you if you have become confused about what goal you are proving. But sometimes—for example, if the goal is very long—it is convenient to use the exact tactic instead. You might think of exact as meaning “the following is a term-mode proof that is exactly what is needed to prove the goal.”

The apply? tactic has not only come up with a suggested tactic, it has applied that tactic, and the proof is now complete. You can confirm that the tactic completes the proof by replacing the line apply? in the proof with apply?’s suggested exact tactic.

-

The apply? tactic is somewhat unpredictable; sometimes it is able to find the right theorem in the library, and sometimes it isn’t. But it is always worth a try. Another way to try to find theorems is to visit the documentation page for Lean’s mathematics library, which can be found at https://leanprover-community.github.io/mathlib4_docs/.

+

The apply? tactic is somewhat unpredictable; sometimes it is able to find the right theorem in the library, and sometimes it isn’t. But it is always worth a try. There are also tools available on the internet for searching Lean’s library, including LeanSearch, Moogle, and Loogle. Another way to try to find theorems is to visit the documentation page for Lean’s mathematics library, which can be found at https://leanprover-community.github.io/mathlib4_docs/.

Exercises

diff --git a/docs/How-To-Prove-It-With-Lean.pdf b/docs/How-To-Prove-It-With-Lean.pdf index 2d09bc68f108cce2494da23932274a2637197a1b..a99c3625a33adba236b85fd25d094b12ece1d4fd 100644 GIT binary patch delta 61192 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

>Qb2k7(jZ5zqF@U0n;cD+vlnt zKLk+z&ElCD(G|e*`IKqFKb`=+|A@t*k-meVfS7{HJjk#>#i|6zU~EFtbjT)P2s;-v z7`B%Z1Er0TlYlMRNMECZ{M{fo!A~JlrT@^ql_a(OhptVTbmedQkXoS!_vn#ASp2&u zPc2AApU;~P6gh&60k(1_eGO^7o>TbgOB(wx1^aMP;NPgRs36@1&NtGu|J|6gX{4Y3 z6{>GO>D&uHTF|i-3MM$Bf>h~cgSuwYUw`eN`NQ{;_Cb1#7X+8%qz6bZ!6Ph@!Xf^{ z$F@nj0uRf>!wDKYprCtIQviTGZ0!H1)6iFNP?N%J+R+?htN){L?c*lZhaDTM zH2`hwEDAs@L6lvW7?GrU5>~J7Ggz;!M3X_>hy4jQoNfBPzn^|xnZzbLU>%v>#qX!{ zT4J&yHMzqf**o-?O_jzejuYScXIiYxkR2Kc=+n5|4xuL6J>aW$Vb)#2O_?U$Dkhm9 zZiKYf{m41ArD^G3YfyyJU0qWZF%RR6zo|JB5HjOQWcIglMuiF{n*6>jan*QgvU{%qGGQVpOCoU)=^3^2an-pLxii9FqONZ#9Www>S$O7zP?YL+y#oZRO8>qp6Kn0Vbk*5#!B>) z?l@6)RNxa(E$zXI=5~b2hcm$KNYm=kcEX4fYivo=xrVmthf#<`yM|jt?)T+0nD0p! zFu3h$#lABk#9+j;LfufOg8y?Z3uhVaCfY~z-IYcqJQmI;PK7mqy0Q;}*U1durX#Wm zi!GMWK^*899K9(!9OVkFj8}X*GQc2RNZqQkcmWN)JShctc@T(5=Cr9roaFyXTs0M` zq_aqr9JADz34wY7Udxp_K-AgvW@{+toogiQpmv-YVt=ARz4MH%W!f#1R$^1NNh1db z)BM-3R-5>-{x(05h8Rq_p+8H;6G7nyX<1`ie1`@O37QphLW}8he6Hsy1w{7qOubfU zD`7-1y`_8-`~f!^6sQapyM+pcYVRMY3^N7~TL4}DJy0304-K{eh8*$^{-YZ_W)FKO z!!DclwreKbFh2<(H?w|Z?;T3A@*?MW(wP!GXNTSH6t~Vos*Pl#TF?y~jKz1$Kzvtj zNn;>}>Rx=@hq;qI+M&A(n2_;20@i6S&;+Or^YPx*jPSjq(HTsIRm-k*LhqPC zfA6Aezjr%LR%b3Kw z1H;+;-tr6~!yo*l7&G)F;=*k!wGWZPm0WXnV0>=Ch=px6%ddqJ%ZrFo`$HaG65Z0~ zOOrXT_0G<%wY}S$Q=4-$uRp_qTc`WLVGF+7qxr$K4ecf-nC0Y zeA*6)8zO!SCzBZEAN;g`mns^Te8_Mdx_7&fTl+~WN9 zx*W9CeLLNLd$C1z^I6{#TCPKsVK?IDjr_s*{>?TL%_pU=D3gH!38I4tnRAQpfpw4W zl00kJ1Sk*3H0h@eg9`#fRhBamOb98KcIi%@q$}=T!ir)QUSEe@+*u|q)UFNSe`Q&P zHn^nyw&L(?Y>2)tcGUD5xRXWWertMOwZA;yZyHlCqj21aA0FPaZBQj=#_HBH)s1pQ zv7ap7{KQYY+xS?9sh4(rzibc5|B<{z-ya036kz*ntW0k&4Smd?x zacd*`?bXcM@9Aj+?m+N?$Qt^}$8&MEr10V^;F-*-`Egpnu&2kh;YFjTEU5>mU2#ds zSLJ9gvN=r{@0h~D?YibkL7LTb*%oYc1aD5F*X^q|wN9@b(LVZkyrTaT$bynBDorjS zJwCo6%;v3nk;hQ8O8@6Z@K602qrph@CMOjsNVsP zR>UmZ)1$*9%8bcqWKpE8?95N>yZgsw!zp7QQf|K(9X&QURi^~Z(bzx;f-%hf z!fuiM*5`Evb;GY*sJkfC6{ zsCW<)+4p}cUW1>k3>CzlheHcylp-TV1Z_w|2G+KUWZp=iGcCwwDB5Hp|HOZtDVZKJ z$Yc(O4)l(e0t+njk?bAPi_3BkvY#j*6FmSOI4Y3L106DB^#4Fe3w|9(wt@8Q6hx?v zjRh7%!OnWkhiv!^kCOoG7qG`0n>xATgl>4AallN>%jpsZbXo%J>+Wo zNwSUSjKQqG$YK%ydZh>N?2rv2za%<$MwWvN!a5+O2WLN!`MyL98i;{}sg6kAg9L#^ z3x0=9K8EoUFgF!>&9h57FeVeZ#WN!YFl3|~fdYaJhtT-&j-2Af;Ws&QedHHJ_!{KL z{~W$CChz+@gdNX>U?#RD&q9A;yXr+w3Yo`3Ac3jBkQ1W3xHFC?A3^%dhZd}sMo#;8 zSpA$~Mjm;|3m>p!1vxhI-!lalG?2q1gL0@LT6?OCJO|~aC4)#eafmd3u|rrU&qabr zqG#_D+vE`#FWv*L$W{OGy@R2kM0@crib-MiFYF;=3I*hswoZhWLgnAtF!|wNftXkD zkip|D6wNPb*YHyiqkz`dA&Fc_Pz?WT40lv0g3uw219S|e z^W7*O5nlWb`cgoiI6N03VkkxGU;X`@HRM=k{ymnU1^0ZXkVbgvm^iX1h#_6)-wq<7 zl>h@ASV|G~B5c82KPgaN;4@WjM*SpE6N-5=QwMsGXSwwKcU}>U{~O*R$8DjXotb z15TKd&S^JBH_l`pBdMRZM-I;_b)*anWe<{GlcGlEzAnZ_Q{@{i+I*b>8>Q4uL0dQw zPD@n&&GcZXWxn)D3rJu4XCnmJ+oOOLS%|8UC^-BOm06SMRYrxVd1S(Z8WG7_o0U3| zgI2MExo9py6q$@1v$q)x55GFTkr9!6J7xo0UR5Guq*KCWqJeyYotjDrS=cULu4<44 zlSOIRik2oHb%9+$YV`#w!iWodPnOg-B4cD0ry}^b&2dES{y=(%3YD$WA;iy35ha&- zXYVH?q%g9kJTEXmL@BB(rPmf9N?HUV!LLohX}(&U3Q`JQ6=J@SmhBAR{R;cZD6@b| zD6pcB(wNduV~l!XTwsQ3iH*ivvdI)X9a_+0jR;Q$Wt4)7XpN{{?t>DvG8OC?SLS&siXTmqli-d67Iqghm-RP`gM}2;*(}=+Ykpe#OXM7*W?JRu)hJBC>~fftz%ztk|5IM^AZ<= zS6n!IW+gi<{7F^5!SAkqi!Kr4$q!7hU@iTs;_AX8%Sd1`cG%-~Y?5i%Ghp5gKL%sv z2naZ7O0>on>5{jMBp9n;?%WH^%!BcvdX;E*!<1!V7l0odhfp#eRFs4rmml_#Qj1Xn zjEOYChD-@OkjGihrjnMDk;B6eb6wFZyOxapaJ9s%_`&0D`UjHcV6Xp z!_V33>waTPLGKSc))&(Oc}V}QZk?x-GaV-&F|tY!2}cxkJj}e{1z34E*l$)nd1nv5oZZmG(Kxk z!qN^5@O~jzqTA7e_D*>V{&tlqQy|w$Sxua0Cq#w9MY@;uz0g_h5L#7l2Z`(+B?|3W zf&UbrP5^>Ku&|o3lj+L4U08{3uN!DQd>DCS_M2=W_oWR5iZ1FKiV21vY5)Z)Q*m;oi)=va)V4tq?r z?m0abx?@DNL9co~s!4xCODQDnQm&I1oRcQxIG&$z`Ra)bwFoL~xwW|kUq5)fz19AO zh*jh*{E#PbocNZ-@*Eyexw`mqJZB5saMo#SxYZ5?5YmeKHe?i!WA*+pQo(&0X4(96 zFEA!wgsJf+A`i&-u(k)DBu}}1xR~!gthurHb9}JYYFSPu@`%&(aN23k;ajEU`f$-b z?KGQp0u2FIDv`##N`|C@onCd-(%zxS=!~p*8bbcJ(<~= zh2egZqdT={)C;w7_p_F0G1rbxFY}S(0YeKaAJkkZrfpRr-IKKj6&_7-;=ry#J66TL;e;; zMAuLFiaAhJyWZrcb#&d^lkMbO|Jszt_jdQ#p`lFbIB!M(n~Jxp0eNI*;N(E4YHulvT|8n$b@v4f?+7g?pB^fB}^~;^0ypgAT$5LOwp>DP2s&@G7N7sU+zIN%s zrDiUs)?IG{4N=Qe{crotH`$d;&CZ`+gPJAOgEKlt2~rb!GAbB|_6gobO1VCWM!(I_ zykRCkW4zmTXf$IgNm$Na5@&&=HlT3z_AK{=Xz9FB&wV*%I#<8xVB}YA#3Zmkn=kFs z9;^lVb3}Z9lWuB_51)YH5#o8}hkO0TlD4m9CDm@*#}kZ(fs3$|wkzP`7VRMtXy;lh zV1o_*uniXx#V<)5SV;up1b_G`3;i82|L+PbHG}FR)+?hdETbulfe5OWkGomtZfe9v znT#Hp?RWD{4mC8l*5okhxp(TsMQQ53c zgYTouw@T@x6%nOqcEQVaKlLt40)@D3qbxvp^ssT>fhA5PG;&1Dau% z`E@A?7RDd8QeP(>?(^a;8$%eR{{Eg;B-y?jN0O)VWiuG`lzXo&W!3ya zj3!R*e52ATFx~?p785NR`Z^j0!SPZ43IA0ztmOAQN#p5Sdl92qfu*|9i_4GhEXdm2 zJJkh^ zoi|$;X}qH;^DwVHXPKOWJ)Qig7k~wdi;su5 z?^LBpT-1eiDt6KmutYMB`L?&|vY6wbGZCWnHaRm~+hgE0+szE3z7Z~eiWI&a+i8k} zjXrG|L0U{@cS8;vb!@9mdFsrg5tg8Bh)egoq|ZRV^G_R`} z-^+VurWO19!i*>VUP19n`qK}|bO6dlL0fg(p;I%E)@|pO{HTBbhu}~6;n3chk|;q! zAG2Y7iq0O@CM0&u0CMASsWYF_MnQYl<#pytLt?%GroKj)lRl}{rM0<&sEw3#<-ll* zP3dYQTp#MP<+L&$$|@cq4pII{0Gp^cu8(!B-&c*sD2xnDPI1#epO;TuGi$#dJ8#bT zeU$wIbR3dqor+-d@S4w*;b~&+vZ&!EH0D6&qqh7V=_%accI3G%v|$(0_RFr|Cbn$R z&$4$}U1TkIZhYbQ=)&~o&x4iUJ~71Bew**^%Sm|Rs~@Wp29PH9bT>J;*=LFE1<%5) z$SEJWKfBRH>GuxXiP}u}%;j^fYPpJJ@X+TI0Ee>;+t0Vmt9h+|#caFgAPJ)FFLF!B zEbV-%ZCHQBsUyh$c;YRrd+Od}vgtJo#S)_Kv2?~fHXE_+>O7%mqzJ1^zdU{FMQ!ek z5s&ZvlTsl{-Rv@UtD4C0`5Y@H#)GxBq+0j9OkGgI|Ur!XZhmpf=fEg+@-Z^Lp@sbR>#x5?Du4b z1NPs*cuRDlp1wQ;Ns}`*;4iU6cebf=-sif^PZ-J0=c^!pAUX~V7k5G>B`pju8|eKX zY!VO>YI#{F|(wik|fjR@?Bz|Dhm&CrPYOB)`Ekyww1no(Qn8e*v;VjxGIC`<{uk~1O zBp4L61V!<%EC`8umHndJ=jPjY5`Sqcf6-XbPPyc(u8wBa#0NvmNfP8r;4`nxe`7xR zz#ZN!^?f_!vy(|~{FYJ3;fe|&nlssU4@Gmks9cQz0nQ8_LId261lurBxowH_5MWsx z_p4uRNV?{{XWL-K%Qhw5o0fl$UicEpFPiBVdpocF zx8RQ;jU}%S*?ixP2|~UYoLaN84c@bSF&)d+cXYIi8-`;;DgB9J{I1-Sy$hOMTg4N4 z_`^0GMZEZX3a4lpgKc&}V0u@)(~0)BM*tNk%A4#prX2kmEEjW*aj!Y5qOPY3MNfv7 zkVM`?6V6>c7gL&xaMSK#93m=-T^#;!a#k@YX|XocQ|o~hh0MHISmr&qcOqf*s#hPe z1LG8T@iOvOD?>clCEnP^+VRucj>Xl(6-&=CRs(d{qmA*x6wTo*fQX9yMmsdZv^@Db!LftwHzvG7Dl*UE; ztsg1;=MU?$d{gMemB6re9VUj4T!8=pr%>`2a+=?qfe5yQk{HlIW~mvJ0be6uA)JWq zLZdmx_p^}kW;oq*u`70Fmg zsRX@ql)ZBl{tC%S_+|>$Cd4M+Nmt!KF!0jytkGsE6W`nbDEJdW1_ihnU(Egbh=V#s zFN2_sV!&9it7gDslSJ%Yw#hcN2z)u}+ zf4Vx-Ab6{F{z@;0FV^jJ@`1B~cG}5~z9&EN;XQ@m;!~9HY0Bi{&&&~;ISoEmM4pj` z2$+4I-NKKU2%4o9q#yRNWaET_s*l|K*w2%{O6)-`lHCauqW0-lFrf@CcJYk2Xn7wr zFaan>iF{R@14qS~1r09bbh-B!GjcKN-9~Flhab=+6HU^Jq=R4GuI9s}wXB3gOvjx6 zLF9}XQUy4s`6!7QMO)AY@C%AJD)r)Y;rU7vS_Tb37@`=BB<&i~qB)RQ< zI&sHJ;n%tg{gLZ~waW|VC&5~v-p7HfdR<({N@rpqohNz&(01;e2-S*ufz~g!Jk1 z-1YIsugSn~MY7rL!RuQAQ5bCwhU3xOJ(a1pK`P6C(IWcTa(I!|1z%Q|34E zrQ}bLzX-LYew3=cy^`i5@BFzw3f{P^YXyoJl=XV_NokBEV}1~Rr}0(*i}rgMejzIz zUQg`ef|7D2PsZijz=bekDxHpr52$$7J|&+Dm+W7UE?Ac?iw@Wp;xJ;w%w9xrZEPna z^4rZWV0p}y{y-EuBrpGtZ+o_#{N+6WvKYb(Ed7DX_yE1+nFsR&$&)2@wF7B8^mVC* zHBTW$MVGOJHY%6&J^8-DoGoO*R6NGecGR|PkDgfkHp$QZ{i{ZqS47m_GZ)p+6I>7C zfqJVkdzJ)hCn<7t1=`gZcWkz2?YtWq2*aAht7)n4rH}=^1GX`9BTJtS427&@f$|6C}$k;N=~7{&Y;Ixu;ZzH#H3k@k3b?kT*o zx!+*GVtCF>0sFBvT4>=*?>Xv9bPk$#%NOv{&E3M#+bM5w`gy?(y z8X~%V$=;bY%u|&h#2Ef|1O^t(R8I>OAd1~uFmsTLh1dr8;M7rM<@X(E@a}G_2`Kd7 z-k@K$-aC1>MpDIaILzT|JUzOFnIE2k=KBKVyZF=sNiiq z8QT=N_;}_fB6hp?K*1P%@8ZqZ)Xze1zK~mLeYQY283&#mJoSOSx%brKzdaG0XWiE? z0Sf3{haT)bK0Gi~cTveWUiAXWSAb1>_g1C_45X%h>CS(gZ@gv;RWFQxmm*65o-i9{ zuH-M=vSQr^KuRkq#MUmwvS>{}?d;E+Uk#&Y*{bjKk3Bv$6_8`BIj1*W)J3mt4U#HG zD1r{k9eT^Jo9~;_TYNQpjfg4Fd)wUk$luf6L!HuoYRYsG#EK%`n>Tsby7g`%GyIxs z*b95%{4@NMVkpNIw8oNfOitTAQO$gbC1(<^5EKum%rAUYkb5c_iRA2it8-OHpN{zm25Gd|v$LZTt=38aN5+`9$?Wg} z1+UuJe$c1d<2r7b`jq@s1V%Z3qP^WEwwvbD6_pHbh5I^nUGiPQ)-#qzcA?r6OJcuz zK#eRZ1i_O>Vxpu2g<+zjdbNG~)5raC!C26cj)>>GWOdIYaqkL`*9!}!fvin){8nwr zYA3H6=>=^qV+-D?kV$_<`I9o*DATT_{=N3c&2ndQ)Xl3-U+w|jyc(cS4zq(S0&|no zL}m`Y!5eE<--m?sI%p(^WX=}ka2nBUYyW&1;@kEfjXAxXbXN6V;=x!ejm?J>oECQu zJ3-Py&bf&sbcY3>a0O%wbu_yPdKa!VvqHW1-tXk$xqjds6*Cv0(|> zn5;rufgWSdE<>@UV>`w7Q`@%dx6{wV);gYcOPAJbZ|qw9hhe$%t=FJaCTmVU4?nLd zh+ji4(eP~BhHUK5qxgq^sG^>chEDUu<&}s-#uu>Fd(tH(LL=mp!h(gfJ>cW$lT9AH z`m49I#f)E5!oRnW*LOCxhR8wdoe@VsvD^sbXE`%+>LIVj%^JZuGBUM6fkerpl%9OeI;Rk;*uQ-soO7E!5(y&98;){WeI$iPXRhugR-tD@PHzR?E4(V{)>TA{2Ej} z+X3P4JiqElt>Rx2MYSWh*w z%8~fUR4qOcQ=w*@(?bL)giD!hxUjt7A#54Xo>^obmTRC@ziHuSC1)4?dhrb2U@7SJ zMc%IW>a2|>j!Ldvo()*^graoYhJXhUEBw6}sT&^qNc}r)oS)D70QAR?+I#W!$;znc zg3`tHD}_s&mZ)`16E^S&_|{y3uox3ITk~ql*>S&Pk$xy=f*&xuxlY&M>EO@tiTGgi z{bUWC@fLx&J*&Xt4xIFg+;|&#wkgFTd**^UW76VrdZ}qEdo3mU>7>8+>~Znq+%Cc@ ze_>sL!PgH(Y;rVvrcyDt^kavv*#$IhYS>23Q(!K2{i!+Rvt1v6skq7Q0&<$2Dw0^n zkh&C70{oc)3RLQ`OE%qJomW$i;E&7G|MD~jX~rs7n_n~w%@Dy1>{uw&tmOiuCL~^BgOfLyP3Y8;EdEE|5Rbj z*8*ZPNoae=Qs6l3Rh6Zxv&@0!Qposx&IoMClHkGPiSqbd^^> z+QeVo`K`@2Xu199(NI#PpCzP@6DG3t&te3&Wy}5f5r`{moa?gb1Gwd@D&@jEAo-@$ zN|i>fJ5?^d)0YG}?%Y#6o?ojWw|IMi`E0*#eyJX&&Oon@S%Wo={Y|wv?brQG7cMM+khZ5q;S;j{&t*Gq22s*zMMF($QSH6Xdj0hn0xSIBz41+~^ml(#9a)V>wD5CIT0= z(=NZBKSQ=&4s$yqszzP(i!CLIL6e_n_f1rKvo28v*lN_E^&`7Tl7mcHLH7t&fJF)VVGZ5JilCjble* zIY^A28PeTgXRi!dO^zhS7mK83Zfy z=>=1^MXa3|3teOk<_UJmH)m_Vn5R(T-)>42*MFhH4+RPn*kTQGOE6vZ>yhRtb**Qb z;)ZJhZrO@7#F%PXq1Q4yT{QBn{R6Oj{W7zV0bFfa7hTE-#NX0AztZMpc8!ay*{QSz zI~R%aSylp85N^1J8;Dnxde$ZUqS*0!g@4!(4RV_^T@Zb^WzCB0zQrMi9H%hbHfjpV zs?yu_TwvJOSIGngFi!jD0soJxcL44r*xH9<+qP|OY}?kxwkNiYjg1XA&c@i78*IGU z*ybiTxj0D+bEDLMMKT@i$*+f@!5)j}%4XSzRoL9+K&?l5w*!JhYo2k3yIc^S{sn5qJYtm00>-faq6WFv{Z@dt> zcbL7^Y>d4(;C!UMyzRs-p&G|a(h=X~)Ow|UdDu_`Q=*XA!|NQ$Wf9wE3M1zDROJ%~ zQo#oWy1igJjs-ZZV#@qIf6xBxI2ckv>783^ZRuCaN@b@9upcZ;3?kOkn+_V1l@s{5 zH|E+smVfV9nboq0TYQ3Wd<`}GO8W5U$9%8X{8@(uM1}?sJKTfvbud>O6RR$#o}dd7p!R zXh<_hjeKx7Hz`Rs3HvK%nUChrCVx0YLUzAsW+HlHpB%uWo=#O?>!rIW3)a?QGG*5kgfR zw=3uG@)>2L1b3Tcp+H|WD%(QrEX%orZGgVh{MNd&I5I4UVb zkOY)`CHyQ)#7&G3DO8UpvC!wD5|t1r3MfkO6>Y;8j$jh>dF1S8<&(GtQk1SN`{chN zNS?yc6LYAH#1EsMT^FQ|Dn#>TjL1nFxia@!oEVWL~dw9x6RDztwcG~X>?p3Hp&w2&0 z?!pswaR2;r%*G`tONdngo#{Sr32BfhN&}_`%&LIW*WmN6y#3Tu?!q3kZ}Hj4#( z2FSFaNWWaJLgmVgleDQt_!D}>cpS@dtGN!6J`&@^5<(N1b>KPhW8PbM5=o6uD(&Da_#?H~yjwQBPoK;GLif(yeOB}2t3L7_kiTn&R`B@&}Qo>zvL|L$kO{aEj1JJJ)A%NOR6X}lHmdIvPd))l2Sgnrs;AqT?gey_CPkwH+OJ=w z`Vwu3IH132DOlmmX}o?Fn``>RI);9?6vQtke8BdvF7%X+Vj{I>+)lo7G%7q+g*)C6 z&B633|I;^#f~MZh-6Ggim-%!wy69hUazaIp{!#+HnKM+xH!-pK>YZ?Uz3EdT_Ks?S z8Tj~^qu;VJ$xZr;okabEp_}+dKx-XmfS*_g*Tj6~B_l19KRb2U|C6wS*89t&?2(wmrq#&D25kwhXxkv&?oLV1~-e7h0(chrnz zWf9Yc+BY!izsW73CkMea#8&_0QOQdyP>DkgkoXS7$gPN4e!^q^9iWII1|XZ#O_!qA z&XmZBCJCZgqLEWxveQE;=5OqWla-WYYZ8ZG%KJ|wskD>G^%AL(xVLS@b#hjdBH4*< zW%XFX>c4WqYGo(N5ir3$57^S3&T(0tNj2KU!XTRdfma=Lu!;JelX4&7GF3;;!wBI- zHUv=(c~)e@mC%GcVOI~k37DE$-$+j;Q2uCyI+Ri6qsVCDK*SMl;fro{u4op$aM9QR@+RUHl zud*0op^OdAQ}GdoU^rV+IIxNqzM%8%Igqq`S&sA?@Tp1--E2n_vWNQsU5b2+Ek0I0 zwwna``3e#B_HHTx&IJzuQNf4LA7EXO=;7nF3Ge{~&bE0TU&p4iX!HF728Thn>zfTC zABUjF&74sA{8lL7`S6fFN9XQe!^hLuwsz|Dk)ZI;{39-?chFwY$NSyA?PC|l1qS-Q zqGQfuxAUWQh`noPpbbmNMQWQmYu@22AQqCuI;(=3_puII73_KU@f8X1{|P*wkBL9n zHekfbWa7>oMK0}VL-}=xAoTeP2l)GSydHZ#1}t4noecuo(^Ch8LN`~}FBJ;eZi|}5 zB^vJ~uvusCpyTUvT!2aE!SaRwqE}vxO zEceD?vV%;?`cIsYJnipcP`;7bZ>G&P$L0NT#Db>rw97Mwx~ixz-PpBjKGwLFS=PC? z9`)m#n`^*%SDBNxVpBoHfJWD*{iqv+czoKrhL~h3$1i5ZO<>(oqeC(g~kaVXTg>%PzWdJy0{v4TQ5gl zj_9I}=U6?-{lt;dw!fslI=b=;qibeMW6G^j;*TptZas{*za2CveH{dWmV&RoX*fJ( zRw$IKbH9DlOeJ)Nl1wo~f(D&OZ=<0F-T3^r)bJJQVNmh9{Fwemh(!mgv0kuFZX$Yc?CC%H zMvRpwOuoohu=J7g?J4)rvLWtwsI9*Q000K}xQmO!gQP?Vv#M(M1TAX(ndoZ2(Z1o# z=s*=oAmbAY={hI+2JlUH!3+JVG884N~y7^D|`?j#;Kwz zJ;IpEXeWl#?#I&NuIOUcgQFoa%0PT6_9}Bce`RN>Z(3ziqjZy~T9kz<5#QDaT+x9h z+waj&h^?&@4tOW_OoNf+z~JZHh^Jr?;XJ-BU_P(TQo0^zS*hWho$DT^M5`tRZj4D8 zD@|*X?Cxkad>uX&Ox>wpRq3`x@2$?^z#!^5X~j^NuDQ-i=1~7wRzYMdqrt=IZ~QFn zPqqW22__$>CCaigrQ3{6q6X5+QVrBU2ox1^mDs3)$$wudUFn<*@lFryak4BvkFX5b>8qvWYEOd}D&jy1OA9D}3$*WG84Ze(0zp>m-- zIj()1RB#rrTvC=6>{-0|GT4_)c9P1aq(P7@`;(_T$pV^a*iXBBWR!l8Dzi6CIGs_Cu-J3l#qr)IwQr!{WM6V<3uxG6?L@TxMYNjAa%lPWcChLuZ31pM^%$*!{)9fr`bSt@~9AJ&ejGNp`LtVML+n@ zvjGddDya5H6^exd|5BtTuRI+@^+j5VZI+Xlx}eA}GKOnIeO!RyJEH4jbD}$$ZN#!F zSYj0+(~{fLWy3+Z1|wO#6ZR0@n=C_ou`%VbIn(rOnUzuGO=1}Yz8!Zef+gJqorhXm zN40^p#I-#WSxvE@tvv&bK`3{J+5;O zb*!DJQ;LY z3F@nJUL|NRD!+iU{()f{-o20bJ;DTY)efQHg%y~xwr|74ns{Z4g~r_1g1`Sl&@ID~ zO3eaCh}bysJvBG+`H91yG5p57aCLwLlLHF)?eFsGBN|*6?y7!Kr9Q|*2O`-|VqYx&T zvFw-mVG|i}lJ%x;9H{EQscv}+94x29sqvEpeLif1 z?*svy#GS0_tI$H68@nq{(_k?oL+vHy_E~5>fULDIwOoE+?YTT3SI!@G2WE2k78PEB zUYxIkn!YV#y}`9TH)e$m_9rVek8WyeJtbCdN?%P4ZdUjg^hvv>&{tqF+xb%ADW|D1 zX*S3d4dI7~&4QWbnG+ob{~ch2?_PJY_25XeAcpCrO!bbVXYW}dMZ*sP@OU&+P~A5; zK#D@#Xt|U{rh)Sx9!CZfw#L0dOQs*rSJhlo*{r#0Q}IfLu{qa~WC-?wgI^PUcE=Ww zD0;-rZC|i1Q#zh=FF@~;w@#;R43hXW6LGgSfpPE?hei)d2h_3eiu1FD7==3bKDlal zGO@nw5gl-Qj>dVMc`n-W9+{yL3pj2r0IpPJ%h3-Wn4BYxF~6;Hjg4a22y;6%F7Bat za{-Q+IC_iJT*W0M)V#~6vHa$>pFtuh)($hL1(njbe9vvqKI=l}4{+7DwzJd1x1jdT zgWaHyAfG`0r}O*0*@j)$$Cs~ByX7j6&l%m}yk`F`mQ_=i_dwr4d>gB9sko|%}gATu$& z;wuEh8u-qdw{4AczMyvST=P|QR@m{QEIn_V_oAkZuuDz5w8H$!;NK>hVuen^3iRCf zH{A5SUN^u=*kipA(Z{5`swBJ?P*+KB;@|3ew&}T(iGX)Fo~5& zgjtzA%b8_+w2X)U+^IiJD2I#Btauerh>c#mcjXWLt$bX01?7Q;px$l)NTJ(@pgy1n z2;307ym;h2=0W7Z2PLQv(Q*jUbW((69cZLIlCpNUcNYq8xg4!8zE1AC($q7bjMEpt z`3%&zlWzAB6*#_Uf5D0JQE@AXl#ut_&Sj9H$}uhw}sX#@jbbDXNva)fRj1( zyuftGr5XBaew!GXk_rHL8!#QaMlz#=S{+?N(cg}dV75aT@=G)t;TzPMCENJjJ;JEK0 zoN(`ZXm@kZ=XRmqJL)%OAp9(o=ndKkve>kW)XtAHn64PO z<%ygeyI0>Tm?yWD5}Nv9|Glt7rEp|g%N^l6Czr)}*Uq3<`b^hKJxf6=qHTHp-ggm1 z)z?Jx)yPCJai>whG{G@J+J*jf#{2uCzK9-eM}}8U+clD+SF6ijhZ3#nfe%f6wTJyj zC=YA0QJ%?Ck2QpoUF6}xZEAb2R9tlJDlI|#Usm@jVl0X2kQ8F&c{zIo1~CDH?9S7W zd*9eSrf%wsz4q3io4LEq{%<}gEla8Dq$EyQeG@_i>l-JvTU zAJ3o0g}?87xoo3+Tt38i@k{6pZqJmq-nA+JmZfJqFE5h1m#O@v!g|;p;pr4hR8Rad z((ZfZ_ixl^*3loZSG*4S|I=u2f4b&=I%!a3iJ+5{1Kj^to1rJ?wcmlh@roq~j`R;| zhrqaXbC&n$F#qxru1ZoIN-DjldT=b+;-944wcEc^$?s8_r9N?#SbYZkUANv}Vl`Qw zYHuYI7sh@EMeo$-k^JRLG(@r8OC)CKS-dS)_LD-Tj_DWCmTjCg8=V|Mf&2mxjqFB1 zb(1*t82;H!Mv^&?-te`Q!K2@^T_U#?vBNPQ6;JT~TZOJ0?0$ZZRtvIOq9F4j)EDjI z`EhiAB!S3lqga7fCjq_z{@YL%PEx*Y)Zi)Sv?y4HI!Q>CC9`u-1+AY!v^&|`RW-$I za3@x$=WjEYJj^XFG$ng#$#+QrO3;Q0f7XV%&PCpR7rIJ!FHSxyU7R(!(=}=IVWQo` z+Ok(mANFP!`jNqRPL*4O7c!}43C@c#V*&Pjje~Vau>9K1@@>&(`KV*zr2`gT0RJ}< zykES3#{w+RDi@=j#~}h2il88bFlP@7RxA%8o>Hxv za8n|aZzRsFwZcc6@uw(eyQ1Qt=^$fy!cQAP=xSw7?j4;jb!KU0TBbj`3DJ;3)8c*j zC3IsQxVq#Fji%oq$X54&iE6T6jNfS@D%o(fu~~~S&_fo{GqANaBFo{1=R&w4!HKnN z+<4CbX;tkI~`NReB^=8VLZVvzL!j(yI~1n=|{_4W4<(2Q2HW3?7_{zZE@ zZoor3I!p9Um)w|uVphJCsQ?x7tRqUp_2paTAk&=7n#VAiif0*9wAqB@YX2`Jd?d+6 zYorR87DA20Iq>K!SJdVJUF3JR21zK*Msze$BJFT!rV#8#n!z_diXW*4T3e+g8RMl8 zYs+{Q*uQwB>6BCS0hw@Z(+z?&?FfEHQ>Ef~bo&n2oY!bEpUIYZ++RO)I_Y;vX7k%Z z1JDWz!0Ab~OK*GPB~hF^k-EvSJLXuB;Ig!ZA?7oD;B{9#E!`_TiG9R0JND79eas+P zgPGk@77X@XNPXDr@fs0i$RE`Yc8p2M6S0ld7^3~+k;F-+fSYpi==>|Og~6XErMa$B zl3ZB)&XQ1O2aaSEWMcO5%oq0|aFXedA#ep=b~7&0)r6X=;T#%1VLL9=KZ9}Aq#r^E zOZoP)Sd-~HqF!S8_DQxTqMI3Xxup@R15AkT%liEN3CUqmIQy`HDg+KfF@J>Pi1YVZYf}O1JV=SEumeKrcO$+j` zZ1D0=Vw1bNZnzy3eDno}Q4S_HO*!i+cFh9&0&fn;&;2uknDs{dT>$pY07wz4e-KOdd4^ExUo#xTn9w3u;oqKiYLpfwRe#}j&Y96F7hDs%gUSFqktT*% zvl?92zI7NSrC7|#wx@N2f}I=WkUtHG%zd#YiXLK?c^Gozh*WCkX-9|=`04vXvje?| ze@AGL`P6$ctGt6vH{={C=6Jx2)S3N$YJ%9!06~mssR%<_!l)kF2;q@n1?6wib+hBy zO8e7tWK^^$;=J10KVN@+a+3<2j7~WGanehX6`DQ8kbZKOpXhRhAb2h}_OJ1yR(=Kz zzf|@AEM&_`vsm$dF{v3`?A)JzMj1^q%RK*1%@{s0Zi?vcKMmFTud>UV{VE|s&CMHj?;P$k}11yUG%~jTxB49DYf{aG^2zs0t4`BJ{cr9bI%!{kzL2 z_C1qsFx7DFn+e!OXH7Z7_G2L4$3bZGFnZ*J<#pg`G) z=BW<)Q=Q8Un z*eXqFjI#zpHr10uw!*cEW1EHs(nBcwjY?i~=i^HgDBT|{X{X!ql&Hl*vRc_ev1b#ggZs?#bfH+NW zrb2SjJH$9^pk^ke?YSQ<&l!pWq}AJnzjtc25cD)WGBCRZGnU#c*d~#5w|#H2u@`G4 zN^&}v<~x-oXkWb~bMNJO*M2;S514y$-U$Zmws6ocd}Y(>za`+CsK~3y%c<4`fdpP% z-Z`2x3jux0B+v3lC5WJ>A2B#(B3^tdx%W>XlwH>ax|>C{@WR6YipFcD%*{F0?z`7) z(2L^kAtZI>%kfa+#Z=K3ZeGsqz4i=NWME4vqU}fRr=7LrRze_WM5uHKH88R$5J=h? z7)Q!W^j)T@op7}N^*l6E#gYGm?C@6J4LCWpYYwmuH302 z@5i6Es=Ro$cJw!4p7{afZK`nECgduvF`<22BF)PU@PM69l>pD)Zd(p!(z?}8%rb-D zgZW)rXXdbR0Lq!s>%oFAB4VMn`E9-6o&j9+gZ_XCC0u-)n5u&kR1uv)ZCX=rD-P8C z_dOLqdxHi`5~e$zm_)~5Y)==y_@yW@b5jy1-{Rda zu%ZkZ%j6uGW_fJQ8jb3(E%H=#c4yTsNOt`Q0O|5TTc|-bM@Lk*h8%)gIffmy z?l*!n&0LK``KiPqJ9QhH2_$h0HqxRZbj>}gHOm_g9_DK|6tY`jt!(vIG!eCz z{s8?e`o_C)9vqv4hZA_MWKaTAT5#Uc3fo|WS~<5i1vN|6LkrjyzWhquC+WU*`g8g_ z<$toZ!47InLNsbs7{T;kd%&55C6MiEgwu%JY&^pei*`(vkN$m>ywF>H_+qP7#;A>nQ}m-GfL})i2SV7BSqVgU4pK0ZCYiNV= z_kn}p-XAbfC=a_j|N1Lw2N8sC0Z}&q8?14+1%j>ImkkD5Mv&l^zTVfOf;1Y;xdG6G zu0OKpwDqn0hfQ*@iKjM*-Gcg~g+E_fFEilfPq4}h6AX4WHG+my<4*c9YZ1=Z7ep{M zn4c)#kmLFOq1YBKWSik^dIE<0nlboWSO}V{5^@rDJ0x}l5ZV4A8JypFFYaSdi8Mt4 z=SI`D_uEU8Adur}7v+ZPu@_eL2MBl`BmDraT)O;$bP6vuJ$sMjg_<}K79YukB?zDq zn_DL0>2|65dIlHW2TwLx2j5?rMKt4N71NK2vK}E}-!+u;L9;_m$+k@7X9Z(JfQSsv$IxlQo4Md*_Zn^~I7Jc?C|g*2yVA1x;g+1YWv|qrr#T zqm`nrD||td#2A^nuqSMnfJtelY~q$G;giD$SztN!uJGmwIfW2aie@g{Ss-LndMzzB zU`jX#p~wgwS4&BgFWYsfxd7lK{B(Crg^9JizaglPW1*dUDdA8E?k(u;QhpNC-sPep zMZa0bZi&!@T-&tEScsgOIo7x@JX4@aJw8}QlkPr73uzyH|Ffl>nLgW6a`8}KM*$BZ zr&(v;5%ZnfW^eEHvZTM*QBUpf^5fGM>OQsOWWE>Q1u3@>qulcHpd7HU9KhI_2JQjs zCc4AC!@Cm3LR$nmUD7#^2kx?UW08fpr|YM`H9br_2VTa3iVtVLbfQAoL$;+8jRbKen;Mc7GXVxILZqFZ!bzFH{KhYXWP6zkq7A~+n zIQH&%421Nd|3T!zN)I4>D86@!W>27$3MF{0nchQP+CTH7nIK^87$?1?X?3KIB>%8) z3C#g%mPj>|B@f5Al3jD6Por2e=WJvBb|8%^k>sT3O8J}D5Ln*bT*%<79y|6uKi1eQ zkSN%A1O_s^k5C{kk8#EC%rVYTk)hgkm>%@L3TT|=|qyqUJ!d3uop zZGVF>uYqXXlJe->BBxYAdNMBv`!ca1fmr{zq8@6)@K2?05hd{?TC4oLYaHmemN$cTj4dO`-8H zR&ZBMv6))b8VG!=Zzv}WBE6hFX!@5E?L6Xr`m5WtAxGwGcjE8Ti+#GsROlj0a2h$V zCr7%}-R>87F%TB`$#A!!%+Juk_}lJas`uw$kr$Srqbr`@32l!W z?$?jWap?SMq>pLV^--@5FDejJv!ZS>#NDfD*WI>dr;U=o)2aQVAB=jWeF77zO@i+n*B<~2#<6^(fw??yxJZ`Ey zM#@}PzqPZQCjg9)gSL4R!2*u8NS=klv>xPXxDErW#G(?A1BeKR0_6BywJN2y2D2~7 z!%!&$wc|t5`M37C1W5fT8m{xEN2p^LN0^eVY>ovI7n%ZJeL_zZnJ$!<2)z5$6b|ry zo=j~Du-gDd1pLW02~{Br3(>jZe~Hw>AUkj{1zbKA#kM zp9FbChJ=g7bJXdn(D0DnhbESsuG6aM&u~rH z2@;jORV0JP!k^)E^$u_Zbt@m<8v;h!3n=Vi`F{IhtTvq682Tw*)EDF$a;jtAY_RNI zXiWswDX}PcoOlhf=_cVtDLpcL;ZU3Af*wfjvFzv~vWTi`vbBUJ7=)g9?$yY3y#Av8 z0bM{sNOfrq-##B3R|?!7S(7#hZAZOt5x+J1W=FLUU%;jFw9fFCNg=-7FFGCVdT?+5 zTF&2%leiG}@C*n1s**}Df_o-a$eDi9C6u`VC8JB8C6PA~tuX|H@JsQMeEpC!dF8V) z1U)KtG+#U~;w4Kf^4FMEhrUqGSKTtHijM=wOqpO~ocP^z3&NK5Db1ZQpwYUu0op1z zDeA!`M_cM07*s2g#sOmf|@*sznL3P)8+4{4~2VEjd%tCQ?Y*kuBR$kyi> zHTgq=_-DqVK;}Ns%PT36=>SUsor-dFz5M|KJpw_`3Jm7|o`dyBo-GQWUwY1SVS$s; z#~|aijMvRuumzE)`;5LAqIs2f-5cwr);DeElO)Kdhn;q65z6zN!s8Y!mda}@)>ofl z6rWvJU#Il;^?g4wKH%z+yJKx-hkGezAM||Uf9d)}FS4>zy2LtXAH7=s(CLM2lFtn| zJ-zyowgx&HEk}5^jb=*iK(C+S0^7|)M%R=W#ul?f?~Pnqw4+ zbWOIMJ@?&&NQUz5FSKf(7eU9Q3ab2FhE(whF&5|G^Y&m{jzl1fhupEoThR;^>f!z* zLn;SVahYx}i-yTVsq;+e-${anS=R&+f5y1S#sp@1whFWSp7h>j-Von?0L>@073{fJ zd+0F-mm+qbE9Zj3u6nbe+Bq8(l)#t` zZ`aiUwKCnmwtLtD^9P6)R*pt%q93MT)4SHTi$qQ;JpJ}I5FcUknvRW5Xl~|UE>X@9 ziY`v_E+$qgpvBq)^<#KXfgMY7FRl;Y5clxL*R;T!d`@-kw%etzIIxDrIIYOMdMbn=<8?BscO9At2eEffT(u>SKyb5^U*rs zL0RZ0l}g%-!80MGqmE;Mjw27K@#(vUSRe6?upMw+>dTIG)jR*MO6kUIy&QLIn$7Qc!yN-3^G$xj~Gi^kYMA9+dpn ziK_Sy!mRrdiWybpbjqu@6EZogeu?KciK(}D)#_zj_xfN=B4UvH(A#4BE-%P`n25Va zIQdcO%W<9;;{xw_ne(4<|D%}GuQoSIyuK>JQV#{yEjJs1x3-x_sm==wL1!PNVP0;} z|37^5{m<@@hbs%6ft(oN=KO#0`=^0X15IU0?`*>khdn(>Q4!cU!MJ?-&sDlujO~N~ zc41ONg?U9T>*hb8M*}G_-nqHW!_|qAr=54Yf*QXQ$fFfM%yjK#gHnfg`;6;E*dm7? zf-Vzcz55w5|G;a4pS4xlB}r_){s1SD`Wio5T80GJ;6O{`<6V@P9Qo zb>)ha!}F0`%uX&W{qQ{UmBcjr_x#+7^~_(1tvhrnP}<-5_Dv@^xgjJJ4LL~`Hvhg< z=G*uUQL3??*5~2gij8FkB7UL5#7O^2kG8RW!3yENlDY2|!(iHF=#2xcA0-1RxBbPq zD!d*LD-%I;pr#7Pq7Z{%WF8<)KkT3u8ZzHVJzrH6a!7^3O=Q_XmQIc|>dc~jpR+4p5-|G|F9$(A&;_=hq) zy)c*@?v$wPe6gt#GwCc71oD=6nG~%!K?|xqydhkRUzfKE;khgaYCNoZgL7q)zZ6yS zLGo5*xZ{M8Pm-l)slO!hF4O!Izz+&l1YzeRZKgtv+FaeHJj7K#cGY-{|7NKwpv}_( z?wrshH_Wqt!)6vaQ~O;~WY{^GzHYE9P~g*`?=#t@I&;gwR?AX0GZ|4mNd}^n{-Q*n z%cE_}3>g(PFOp@Kon==on1+Cq8Z@ojJM^VE#iO&sxojT6B#hHj2qJsJA&)Z$4}rpy zwu3Z)^=xC5(HX_!*DErciqQ}+pl443)(FxubT#tR!pw5+kdSSK^JF4p63^6rv51xA zgHMLUMoNM=R!s4LWkq0M{9~Y73l2gv0D3xAXPpaG$MB3r9{QwBP@>=^CyiTeG1Z8ka1tJ- zKmk`4F$ygOHKi+&jT+K`Z0hbYzido@RWN)^j*F~ZK_nL<8#y~>;&&-_dHMY-QF5Xv zPB#=V8Y&LMu3xFa;@H{xaE1@bAla5C&$Zd?IGSe46p564xl$tiZz##`09d0tJ0?mX ziMl4lD^7&VnPI#oAB{kQx)&v+QhF{w`FylJf?FnHE+WmeqC}cr;x}3*DTYQ@2^t~} zeuz9sJeyzP53s{b8}bRLM#}1EB1+SSx^OfcD4Bi@llRko>rb| zG$Wrv84>JzaQsOewX(}6KU$nbGT2Z5=?DyS5*t=RvUpSlg@;x?`3YGIbMAP5(eYDC^Zdm??pfzJm9lPz!8hpen7 zk5A8wV_8Nk-hIHw8>{$LccVqI`9>}kOQUFm9j~(gs^gL`3(Z7*-X3V#Lz-T+M(yP+ z4W}`lt-IMHEDYIR(H+$3bI0s*j=!-w2>p{ryP&z>;&OR7qrp9S6ymapDkh4vIgbR( zLpw}r=3yix$1v&Z$yjcZa%I?>$0q?AwL@^)IAR)adp}Ss+QErt6baJ~gRairD3V|Z z@T_U6xsCjis#MhCTX0pFnB_(IjdMQwV;9A!BknKv#%5}p(bZ5%B3O5nsdzDKL-^CB z*XG2wKBf4&qv>LVW{YX(qw1(degMNsl<%FkFZW4PBq|sB#e@ErxHrtC#|Yf6RPfzF z$*a@czZ}58bFP&3$tssdB?jJ?{l5`z7dj8_rwvI`^Oe5QOo2{$iXU--ms2@S;?{K@ zW=tQ9gp=pYpw_0$Y36VAtJv(7tXRWF1K(ZBD=?kGmX+P_3L0jw{4-AO^^Z$xiw~p? z>HlK@!*b5=UTkB7#f)9^@byruyVw!@%};7DXAIC5?&6j@w=ZI(T+KvhS7N5@V4w_K z-^Fp1Q6lY(*YwvmXk(6XhEtbY^iY^wa-QIHY6mUn%}}^j{h}2T%S2m15-%5PC-QiQKr_7ZZEd=;xs#{Z~^~= zS`9Q;bZNT%w8hDimZBa4Ylsxq|N-g`r|ff=%?O|pHpu4A@vehnEvLP7MC+ia65j{xyW0=SDoLd z=WRR$%3N1Q$kz|zVLZs9#i#DJc)0>@ku<=!;^XCJ5|+8Afr6y-gH^fT0!^SCrl$_; z6CRl*Z+q$~Un*sW?XerfhwTON(QkS-t>ka|K}%47yP;D5Kv6vODUt;mJ=Au^k3n&q zW;GAhonbnZFWhxkKJi(~;XPz7TwFc>1svambpv#$g^Z7^0J+Jo(R8b92J)`E^C19Q zJljJ`>B?z(y)%R98~KTLyRb2tolZNO!`2VPruNsRNX{RdHw%@BKi-`n9CEuFc^7Hv zc9$v;8Q%>`N-Gc?G^BQol(3JDYmN|v>Jb97?+A+Z%Cm!7(MJ=i#%>zc4%e5jSL+T7 z8@ybR?v@7X^-F&Ci>wzZyn>Im(QX14lfsv?5lJmpE->J~kZ4BF;B&X|w1GAKpPrcv74^Hb0-BtKscJz`Bx z?AGk91Laz@Zw$U`&Q<2`4qW6NWw7g(4yBi1Jm<91TqveRWcd2?E!~+D*0KO~zS(^h zDRUL*XAiR@PFc2P4HF$T6RxS!kzdK$h zC73-ntSp! zNVb9`Jv$Kd{9T5F<|zkdB)7OWb9aXPtiuu3&3W>AHfzj_J)d0QIhp}jVck6I{f)xR zqGBx3Zf(5uJ^nP&*lfI`Lf4_t;YeAv``HOe=tZm-`ZZ?AW@$t5prtajrYlR68Kr4unS^5dwwaeV)0X*{0OnF?t~?H?qsOq~9$k)A(F-A%sq zU%bS)T6ijVZz{4hwf~sBmqo^zEyJ3VX0sUkY7N#IVOy$D)Tnlo)dgxZjC%8uYN|l` z9jZKm6tz)yDvq=qZ}ITHJVttIR}mFI!?=cgKz+EHyl!py=W#udPNp6zi@qvPR1H-c z`xz@JosUxK&Knth(0!TEsUC*=lZPK_wW0rQq)uH1ET4 zcs;DrqWq$zjM84!G0vfM+osI!*Vo6ytJFKfT_;>Xm^$(k5=f(Wd3X8B`B>;#)@soc zDMuDbM9QV{=rQ)F%0V5RG3i-esXj?xM{owy)Su!t8&{g^G;Q}3=$`+m!0DUmW#@9% zP4kax;7!H&q5frK)TGH>A1oz_$orX;OOf=LG6w0^jaW!wvaI_~uEr`zoP2qmQo+yk z{5lA1(rs*8>exM@+ta>eGT4cKFO`x%4q^C{!B$mAJ7lA9Ir}lcai?>e4Z#D##ZkKNepB+IxMxVxUTb|;;{V?|+-^dp0U@vv) zM)cO$^)cxnjTmD7t4#=}<)QZlzeC1w33(n+w6%7mAJksC*P1uv%5R=zS^K(Cb^ME^ zC4$=QU4ut`Bbhsz0YS^KhO3 zSaAPSyA{+HC*PlL6g1BArOvqSQ`}?6m4=sZ59?chy-SkO2+Sa=&g%a5aDB70#bnK| zu8I2QD@>)zvqA3eQN9~kuXC|j4X@o)qaxT{zGlR!|Fk#$F(T>gBq+!Ipw!BJAd{FT zEVpsr-8L@OMdMz^jnO;zH7zg4Ok=vhyl%Gjf0!Tq5r~%ty^q)6-fxDF3n_KV| z^cHD9nFSN#J^jl*^NXoXGl_#Tqg_Ho72k#G3|>pGQkpKdNGw`IRDm*w$Uj(46?Qgx zOU>L4r*<^jgI$4@=oP0(x(%Egs_8q8GpoY975;qKB>x@%Qz)~pnc#bYJ+imYC%qCC z{!R=5)Ad{kpMw}^rubNKrr-V`vrF0i_LF$n4stDmXWwVEC&EY-hxPL+;`KUL_?lhM zY5H^KN`h#>49IT^EL8YUtp?7|HhMX3rvwEb3qUTP#)n-E2@Jg&J*69+dPa_^J%t$g z8!8(3>;6YPtk>o`e;p56(9)2I4`#Q6kSx<#jY3JN_A0lLb-!Q!?iimy9j6QG!v92l zcG#!`oArP1<%1Kc<7~Tx_#idQgaT*$uU_DjV0q>xX#0MhSdZZU&nTGI=*ks|zBww*aslB6r*Q*6I?vn<%*6 z;AlbG=(+v+U)MJm2o!Gn(IVJ@^eZ7qZf++4THZ$Tr@88@PA}Z7t6KJ*uGITLPL{6F6GHnoD7s9uOGJNLLavBj-s#$oyLz>bey{5%${` zmbh-p-z0otKP*h$%f=^7et9CEr7OULCRb3Oz8G=n9F}A%i}tQ`B+I(llNOJe+z?8P zwJBOmLZ}o`!;a1zuh5V|`D#2*cW|&dOhho!+8L}798nfC(Heki74f~YpY1Y$k{3E_bvtk(14#u>tN`Kg4dm3y92262^ zZi+29SYyh;e9J3oM=)3{Q3+c%HOd*zI0|#TYpNTjWiSkD>aBS^n|R2yIwYpvoO5)L zTvC6St-y?YZMhkXy+aHRv^K?{4~N*S#R*JNLlT$9y6LqF8PTBfKuD|_K>4~mMB9){ z;+3xI%4D^IK}&=tczW#SfT65m#d~@jkF?pfec+!C*z9-N`DF1E{H0;Wp+QJrMKiTu z)&86WtR#*e=wwAmv3__nbAyrbB8^w;$T9r9Y5p9<#xXdLI@}W){2)ynS(3lU12&Crd%;dt2q6& zyXnqhsR)t4s~ntyYoZuNwxx42aon(aU>U-C&N|DCA&Q`2lpJNrA)=GW&TEekcbYFd z%!>Snp*qQ}>@kyf<)3{ZB#+VL|0C)tH6azI;1qCfoR`2YpoOxj_HGw6Q0SGjm3ou+?*Pt6S^bT~dAd49nI z0zR4) zy@ec-pRbY)@{+|=QVa$Vn!#2YeOPN^hfvp%bb6ac(SulW*BMl;zwuFM|7wD%JiyZT zLC__soBNzby4nPu!P8U+X!>V$h{WOmD*%9Z+6jN{eDEdeT1Tbd9iU!F{c9J)bX$)!^XzCF_+eF zb0Dwh8=RWWHh9^72L)?bE|@zKODJL;i-3vl&-Bt9p0qDDe~Hzf!@qHl1LDbcT;LYrrMri*np_L`;!_+{ z?5SWUD0Ntf5F}8W2$G-9DoI)*_@6tuZ9 z6-GD;j)4Q&;@WKcSdS%e;?o+2W1UFKA2r`}0Hl!1{Vv2RQ3xSq34_p;doSuk3}3Ye z;flWXivdee1~RLLw6$q;nXxvY!*06)Nd~7CtJje5KRQWJZvO#YP1gdXPmC>=0$Yh} zDy!W`li610iwlc!P1IiGI*OEb>f2P^ciDQ1l&+2ai^gyL>7KB;zjJXt%N39Nl%-il<&aKEDRSp@ifJT%Wll#t?< zrj7d{D}hO@*_7#QN=)3W5?r>ZluGfCD}9g4UWvJ>OFu-!|Ggb|O~i z-QnG~<27eY!eT@?eZViP{^_+)Gq?l@wTVOr=nhI=e=k1#vBW-V2P>1vN-kU&+Z39mPPlFkkbvR*d3=skzl04=(FfEGQdqRq! zxSkkxs7oG;XgUpvUm2?s&L$MtVGxBS_2Xfgx8E#XYP>^s_$BqhEU6HYcyrbdmG(@%bK>r#Z)87wW)7RGLQ8f#LVD}TZX9fSU>yN#d z;C9h7w*c3|J9)zEHvN*NF11?g^CUJ@YxhC$MOyJJEk!{kKGr%a^6xKfht4A2nMaqR zOQoFgCB}KaiEM5Gn|lw9(6K;5GtgY~^fmoC<5FoL#lIazg-~uJ#8~-GK3@3}`jbQvGkNKO$;ga6f25`vMyHg+0~dWPA!K?E3;2cd$eH!lo*iN#}%F6aN)K#!qo^4_#_sk zmifMv!t3xEqS__wr*QxJb1UzJ6A&E)5@bgKiZ$2pmy zfILOQ^8owwt}`XDf0bpr`ruuQ7G z+k0oJ-RFzDrPHl)0FOda!va}{pU_VvI;yxW|9{N0i|hmcUN_GmI=i@Ik-0i9+MG8~ zx*+nJ~8)O=vq9Ga|L5B-`{4t|BO_g{ZG7yN_aDVW?2T$ids} zxPPmu|8)TU-^wS)e}<1_P1kI+VGKc)&%h9UkbLyF51$Lhoua>XQpFTtL^~z-txps< zZzUwh@6Kpew0{}UYY~h3m4M?jWzIP4BhBca>h2O1LHEf0PGXtuS7iB5#Fvpl#4CA5 zvZ}o#*KcpwTqlS|gffic45Nr5}$aIix-$(|S54c2fei3* z5$9aHl#I6aot^o%irdwBQO>u9|+TIA-f|xC?iLoe@SvHHB#8 z02Vi#LIsf%mqaX}&vTSEepf!FOc^VPy+vc;)_+_6%@oal#v{-_2UE=g7{eiUEu;x8=jL&}D5O;m~pMy-{ zUtE5hPfh&^!rkG|2YDxPbjvP8e#ncvyRZ1@RE=B0>u|J=dzBmUpmyVyMAE zvD|BkOxY`4kuzMxnql?l9P+H*QSHg7Ln}AA!L|l=UnN9H^$_?P7sS6iJFNb8VdI@a zW?+V`MkdzhUHgE{M}ApAs~y=As87|>xNqwxU1nit^gRl&uEaZIVFZGMb<9mNhGX>% z6KC$HYDY9=>BF{(<27UD`@{C8w#C411<}qZN*{VMfa4|*&VuBi*3_+G|8=ki%LYMS zKAZ^=N0pbe5T%pYsUgXsf*=H0h=;VmgBn&(9)>9Sh|eKBBf%A;34wv13q7Z!mzXp5 zk8KN4E_C%aaZ=tt0xcFIs41z3H(y)ccuT9~I^ME+ zZp!oQ!KkE-l?pCWRkT30O&(diS_p-*?ZN^E_h;W0QctM$;~faqT72`vx2ei+*C!6v zM6UaLd1C%gPdC@MTQB$b7-WcK-4tR^C%wIaFMpu*5Y}GqPoNs;$z8KB=;dLT6mj!q zN*^9kG~jL?%x>1(y@I=f7WZ7$^vP&Qh>{F`7(_RA2-P$pg zrwc1}^sCg!zi_KyM`y)FK2mD;we4LYrHXA=K z_^@|NQd?(5&-b+LnOtIl%iB(4{47WnbVMd1)9PqiI6>~Xn7R6C097sE3Lyx~=qB<+ zv@BA8{>_b7SF6gvL(t7D+H$VyM+uXS{TeBw#Jz|JfN5g51*nY=bY36e}NK;Ye2^>H0 z!aXdBkf%7t(rkSmA3|WlPQfEuHZOBl!0gfCTFTtJZ&&H)KAXyBI*0F1USG-_OS8*p z(p6OXj@S#RruP#dS{&o?cc>-1>;}^0IB30lycJHO#6fY@vqEH<%z#z|pIr&qYaJtS zE};6wbV>MJSJFA^w&IA6d~;hn|F`z+B-f?zpYkqo&}eooOn_PD3RATGW$(q6;jLmr zky3J&hDoxS;xlr$;_i4xxaL`yzqmJkqUY)soTMma;meUuE3Px|OKzL*c~YK`3MjDH z5qLdHG2C7}|7*$WVi+)l#M3r`%9_@yN1DQD!OwnInH+l#B zP_GFp`OD-Y4h>IAKQXGXn&i4MdMiB(f*~$D$2JG0$LZdGdX5SIoIZ=JP^5KRI^innk`2NNP=6 z$@rdz{|s+3kLrPNH0 zrhmI(d!l=J<7p`c%7itVYw`AZQ|b3@?w#Plw{(*a2Z;LHZ&|!P>>@Z!Uw=ACt!XHV zQFAUYjTuhTDRH-5CeTwOOb`ODGNgJG{=vI-KNr9(jgvHh`l5EXmB!R|&Da)xJ(BH< zIV#ln+3nn6Dr)0@B`Y!QHLD|JQapcs=<#SL#;as&caX()4oVl@XZjw;-Qm8$ATmG^ z2W#e0ph}8h!jGy3R0C&A8J9qmI%vG1u(416ysX4hT)))QEQ9=NkrE=sDk(zTS-z5A z;n!}BnM#esb3nwuV(`v0gg!V1xIIY1e&~VZTGeJ6ddi^)VUxME%}1 z1u@u@T-U3vp_{Z4W0s1pq7xhNI&!;je8OwBJ}R7KfHD}UuXm#cOpuB?bFn)zIZV)K z5e~VB~cRLVoX1(78@|g8Ff`G*H6Mk4d2}zX}ch@LAmbTG*UM>+s zMf3y*BT=d6{HuL#_iXQZQK_YXA+7a!-oTRl z|GyF5k#0&65FX!^k$%&`c9I8yKJsFmU7+fM;&~nQO&L9B(Hz+*hslJEpy(389(uBe%2pNQg|&7fE9P3D$*6YW&Zt z%dc-*+oFB`v2p$_$NgV=rXc5k894?1kDfUhzuSTxb{mM=-B(v}hem`L%+iR0xPo8` zKT0|B$-#RlrYm3yQ0%wz6a}p(=DVEgUZMXKZCOq`b^raHVK%uSS(cLM0HJ4*6n?J& z7_)gb1yd`5eD*s_T`8IAJ3q*_$_%wD{1esN4GCPoD^TQJ1UX2W_oj_nqp8iisE8vA zW9U75SfM^-@}430R-2Rij=NBQokzBjI)s0{dJV zg$&79YY!yoFHqFKPk=5#J1;xHdT8^V?7J#yY%Ia*2TRs@+30MvRdM+R`qdHde(O~Z z0dkz-q!ma)zr^s!fs{P&d42y+%X|#c^ybwO$D08ipK87_^Ql?Hbq@MPSs`?w92$@h z9ufEFvSQbvL^xM6GOZzRG7*mr<1w7LF7?4K2L&h+OQ3=BO3lU0T{7Y;PUS6fL9t!P zMDZs$ruNl0r0HKUybUX$`dXSDTngl!wGxN(=Hg1fvG2A6O2KyVl&;I?Wj9g(;tc6G zvd&?ASYl`I9L2}{rqU?`MHg039e^#!`IsIp92=spE$|EX`rlEOI1I>;x^By-bmb$a zqmn@Ap5BNAjd52%X@j4(E}{9~Mk%vdIihuQSkc88td*!PtEP0(FTi}@o~2z5O|P&NL!Ho~jBhMR`zwY3x#m|4cs@(IvJao%#PZ$21EncM z7PtM)VU2ZTGa@)g>!T&6hllL)cSKl6eBoDfQ3l76<}I=PrGOwaAqj}%7ro8SZ@ z4vh?({jhIk05}VH-~A9%bTaIx7!>tFO!A_RBHE?~omUqMu+Tb^JsuW*3##Lr?g4En zGl-^+V<m1em5TN5u}0~eGGZ+JwNTl(S~M` zy7j41TwMn~#C}my>DMQuj2AlTYYDd0F z)_q%bc-<3Bz?~XHtE)1NfT|Zq9PNm{h6JWP)zRk^=W`ws(jesWqExB`oiqF*5BNg~ z+z#iqA$D}(A6rMBkshzW5YgZ#m0CsvA9Zk8U|2?H?bw|*8JcTl6w&E=slKE|}{en$dJPeG$6AgSipWkEO3cP=Ag*rjYBH`Rz zP3OJbY?<}?KOBj@Oj7g)+&^?XUUpsVne_z94Y&59Nqx@E6MH^5S~BYa?XZeq`M(^L zQcymq--XKsmi9|UA4rw=KJ9_bbcW9PS8EbpyL?1N^5jt8=UT7+0YWxkYE7YMRb+9g z5965MU9fjHTy_MEfjchqg2tvz&4Jz$TL};C^J@0b7r}w#*W+4dR^_!V^UkyT*E&eg z1nXL2RoC-q57bTttuCFCKu8Ip)5BY*YxT8U=ih7CE!bW-4VNSDX^lWtSv2T(bcr#> zasCoy!jT>r^^O21`D=+LY>2GQd@Jt&f$0ndz^PC0dI`(OM*QDqxTCWQU_7F&VTg%&<2Oy1VXKa)`#KKnsM8&p2eTqJ) zpxhN1bB4Xg4(XRMZi^JY4R;%`hs@=+F%Hj38-u^wsu-iP?G4GhM#xnqObAXQ={zj=XHO4%xc zy0Va}@$Ck>8iy$RwO>fjQEjI-`cUU8C{}6XcK(mn3{#O{=9yyQ<~kaqyJ3C_uN`J5 znjd1^Z_!2#K}uC%1rW^-`_kTDQa8oltHjdYZf-`_Ho=y6zkL)V#`Ypks@1Zh{@M+) z2fg2$wcSf{h_BhJ|5a}!l6<%QsLCZKN36N8_TBL{yx6U@?d{Km?QG*}CAJl?v8d`L z*Y7k?E}fN$>uAp}!~F!G-8>)WqhzHU+9l|XjC;Eu@0`VAy=mA))KVI1 z5-iOqSg+(D{f#{-|Mc4Y$U7{=5`N|dK0YuMDS)VI#xp#4sUGbtf8(EaPW}HzOLT_q6%L`HGaVSbjqDs_Lm>p7Q=J;j&TjlehN>XnqFnv>c4Hgy z^_ux>Ng(lcr^y+M6I}qvtoI$i(DOnL-!$aY+_dmBPY$9H>*A3Yv0FM$VW6<#*1U5X zNU0Wd+2jMgL5WWA2`2Ci%PY+!xn}-T&s3y>Qx5~{=54782;XH}2wN0z3Z85<%?c)J zmB?0%*Ui0_IOgkU2-VN=gNlW~`-I#>_v$m}qslLoQ#pagM`r-Glow=RAYIfLjs<>q zEj#sq!KuVLA@22bN7{Q2FM#TEj4sG_(C<3>2}jS@;z=eOlpxR<*=dSa-W$ohfkp_G-Tw48u3i0%$Rk&Q zs;C$vh+^&)JtS97D$X8K&|6C(hGV@qj0O_bcnS4>MrGT=6qX&7fYiOz(HHDdXtV`EPr-y~b zFYrL{0JLMA0CFIO!%97{5y8~K_O59Fx(bnJ0c97+gCG?19!fS(dxPOiiufMAm164^ zon9|{ETvmrt);=(c2*#lqooy%YA$JUbqulFOG{6CQrl@Iz7Zk!?~A`X$%Yg=eV@r%63o6v) zQS$)nw`(04oc}Pl=Fx8O$6%~&AarLuJzpGqePeaKAqUR41mJ-KJ^<)Iyj=gGtD2;$ zBz)n(5DfA2`=lL1A*J{3sZ3SH2=iriBYdo~P>kQP2v>)Hkpb_eQfWml=BfC&H;u5Cpttvz zSj^Mq5?EYn#nj`e?PT+4xOGX=NaqnZsrGiWQrf#$c)hl;_jpaKRJT&Te6ZFQawM?6 z_`T#b{$>8@^ilmW-*)(11pw-F2r?h2pQ^wl0!$}xuj7Y?>0fRXT0ptMCCK@|<0ed!H0(n-u!gsu@otwnqla1=f{?3qv3@u%c%Iq13gy!Q z4yAgZl~o_=Lf`|vUeUm>VLm$A6{LWt7Q+Pr$$3Uw;7kfWGQWc`ejSk|{ZQBwtFKcq zhZyj3)GxG7gskFl?|R4m$9p{%)4cke({)fyEjXE$vL0}~YmNm8t1Jjar@l$E<0-Oz zgEi&2!Lf=|b)&iUXK=TtN_wrFKzFI@CexSecl`Sb>;lU1C%4!kTtmo*Ht}(t7zvWe zBniW*B!seGy+Sc%CqE+1oN}^v8%3gV(gmXva$AhlzGT=5tF47?M)4J`<92JX(hG56 z;Y%aT&d$fDa%yP$uF?iBTQTvsTt3>iW>n>foq-{a9&g=I^ZdA1+t@%aZ}3-Qmj5oE z5O~!DfDO`!fpFl3Z9U@$tXmN`siZJOeyt8Zo;u~4s+-OsF)^_=(+4zE zv*a&+QTH{L z)oR|NAkB_zr_amf^IF1i>3F-{+~{{Lfz7Ro({0eMPfCX+#oMaDKxe7ssMg)nXJ52E zN4GYb%XlQy~?xB3NnS}nN@Ss*gC)WRW|IZslKP@XJ~YK};mu^Vk*#7OWu^+EC2d5FIF%$?sfiHDk&(yJ ztMbsQc1}?4rXXRCh9EC~!cb^#P~uIk{6tHG$t_PV?LAViWELzy->=aV?D9)mV66N@ zJT-kXk`)*UdoOVZFr0+DJt9vW&owm-DWd?zhEmh_C*@xd$OVYgkohD{MKT$XS^aAC z9+|N?|IkcN-X-5%biChm^;N2rFn=D>mp>n~@P1)Ff8J&8ZBBR~a85xqLRG0(pkp{j z-7ytrQPxo1@jys!w>xso$SRS#!A}rp6kDj9EK1v_;z-8_JD#QaM&N?VcXZB!9ApYA zY7M!(RO*(aI7_Awank+%To`||yGIgNB__8&vsh=JK2@g7`D;47k{0K5$(yNsmFqOM zL`zr52A^>dBj=j@un^V1+|% z0IWue=Q>#g!GPwEE`GkMwsSJz_^P6CL%!(7k+r2CVnr_KDE@QCFPY~8EQbv(8#Mj= z{QK3J1Nn{B+@;&cP1t^J#|~KZ1t(Vnzg|7IVkPvu_;$8R_^JF?w5RhrJH=|xq_#lI z0v)xbzdPq|DLR>S3wV);&e#gEQQSaG^2(hZ|yCYj+zWicD%d!?J4-U zXSgHehsRGb_#@9@dgsp3_ai+vg3syqLG{vzAK62)q)W?%D7v#xzbten)yRp~UcA_8 z*Kd%X7uyC!0<$Iy8DiYj!srncHPvB3hTpjm`qVi4*iAwd)h_c(F`l^85yaFFR%wV4TysT9^oPzLmH5Ul(6i5;OhxW&_f@%7_`(V8OGHe5v`)5 z{Dz42iE%rM_$c?4lhh<*D#T}!Etqh$lCY7-A{7d#7U=W2w=>k!Df2=JB$dNJs#tW@ zi6#~;s4Gz@8Z^GuGd>oQ&5TA=Qe&JNtmYO2_Z%t^^b8`POj(e6k~BtW^j~KlEkGdJ z42t39qicY5+0%RT*U2-5?WM3=3xjN{?b^qh>8Z)1yxdr!ypl z4deh+DxXu!Q2%fhA(1J%T0Hh!X#^mV@UP_oR4ERkHtK`11qc(7p zbXDg+dz~B3e&)l3SzB9g-Y=hDs?>8%Qa*XD=^&8|lyf#0D|t2JM^WdH?t~?keX;xC z`l@4elbd%o_R{R2aL2xN&j(G&eR^YJl;z%1dU@U2)L1+1Q6{ZIZ~W4AO+)ot1=wbS zXvYuwy%06nkK0eNkv0Co8DehWCFh$xwdtVJ!fAc}Cyio#bbIx-cOjWr`lnSU8X;9@ zMdiU97=L9hd(;Si2OKr%`^1%?{5;LJa^hVPs3>fLnKyhSkr~U?@Yh7BIM?O8$cLOA%=v6^>JWKuiT9Gq_}{_>83t1KyCjt- zLrJLi8KslAN`A;MqN%pSJV`s5K0y%rOL}(gLrm zp4dd%c-P~4iU zYxkla#>kNB4G|>Q?Xpzg;I%=Rg-b(e`yvE2`nU28h>FHG#s|7tac~ZM&looXl&%h@6>> zl6e3kX}bQ!_x?m39Hh7qG)GiVmP$EPB#tw%$B1RmCSHXyrtgMgp;Cf?oMTnhj*xHP zewiw#&L}aHs$5PFhA>`2uk~Pp$!CjD!s%w9yGn-I&%P#b_8p~i&t?X*N2`5ikLKNu zftdab4Gs}}iC(SG>)oON&z;a{bX|S#)1u-?7!}!omWyWp(P4h6_buUE1elZGYsB?- z$9Ol70ykpr`Cn%BX;RXHn?FH?ud{-Q1Fg=1pmpm(Oj`SsVu^^LK)rU(9=Jf{cG)yanL?vmqc0aV!BptJFZz#QA< zwRwh?HStIn+oRgX&X@=je)5CihvS5!k?R{4^39l4v2y2m_xzw^mcP1`D-JZ@aN*HH z(=QUgk`JV;dUP#|u2wKBr)z%i@=v_JAy$Nd=-3Zy^fqN-(;U*XxS0b|FAiquD& zz6&GtXJw(-SG?OtNJA+DNz%$IbSX*9%q!1mO;g4x3TPpwDNmRE>cNP_UoM5ISEIXu z4WsFA1yg#qz|?b>z=xh0O+1c~!CNc91anUgnCb_0bC`b`MMD;}QAf2_K!E-UZ;g6i zoUtko7Y@AevrFc-V;-IQI7jhlDq_+i8+(4%>J}r# zY`k(nWMa(AW1o+$d}ONh^!dGaf*9CyhtFdXVSMYPeEorKS?{{$dT+j%HQ>*0Or7qZ zRLeS6{5a3)!vzK`Ct9;2gmM%td6Qcpv5DI}kc{4US?ji{dMszier zVUrNrY?h`erYshmbbVDH9v1$^kNOawYk~Gk(aEgr=`4#TvS<}-*W={bH+h!h=y05f z6UM}z1vvbJ8ym1A_vTSF6fHDrHuuzw;!V6%@8f4JY5BUKk*#U`NTZ=m^$4W`j3L?m zOzQHXg&!@I7tZ7h@PM4ierqz)Ov6O-*3!WxLqy&rtCT}j<7HqndjK)ZC=oJ{ScLc* z%;jE0%m6dnr-aa8gCgk>Cr}+_fkASlam_<=L`!*vrP*2zHn#`h$ua&&XHJCe<6fjh zqGB~pv;+60)Zk3b)!$0+?#&NPBO%Q5QJfxZXSVln?G`&euH|l0`O1Ye_f|Y#x7(>s zV##d1f@;c8|J}t%U7#w&jXm`9=Dl+$2l~b(vxupVPH4(13gBA24E~QahvPczV|iKFzzcumZ?|sq33Q|ite0rdbX-N z+Zb`AzjVk*ds%jA@@29wFVlTpmX7Hjs6yBpu6Wog_%W3xzbDmbst+3@O9&f;f1 zqt&b5s0BF*92g#)L6oOI zWuJ0zq>ClhrNf+xUd>N57)jC+RIFaIHgeNjK6P_*1+pq7eewEptQ0dGt#?o#gYcN>z*AGg)Sf2M2mSDm`ss+_w{*G^ zYKvbE4V&p4LsrCXa#&pmM-(22hd}p$p!TTU#f&q`^Ixkk5et$x_&xr4)y!nM_Bj7w_MLPFnYb6`hrENOe9vA9~R?M&_D>3s1}rD z7m=~Z%M&|M=Lh6TOfGL$*4AV^&{y+uEB)49IL(;g6`0M}=4MCf1GYg4USR4HkMo)~ndTZF=hY_PD&>HyFMdO)vCjZKRb=MT6{g3D`P!KX*AK z#{2R^H{7glfC^KsLQIM5e8G$0r0BtLU+)yAc-FrHe0fbq3*zSfkFXb$+N{uKu;_@Cgb-?K-OwfseLq$L2xEz3Z=RAojgI9gR^ZnisG}S9nrW4jv-n zH3!)UzEjSXq@wh&oZQX$qpV+Gpu?5iJly$K&lYCH#kGq_c~6pg-FkT^NZ)kIY9#VA zLGfNGqU1Y0nP)QDedZOW~94Eqx_mbTzLT`FeNGc4Q;=g-%GsEGO6P-B$I#f+iZ`52 z65u1Os^F0ND6A5S zOf+XYrTHdm0GE4?z-j@`YfgS6awW|avDBUxv&r=DlBvQ!{3uW66IVQ*rpJZTXY&eo zq>R;9*;cpgVLIjS!N35hg3js%palu=|3|LRfOI4K9eFIMVTk!k;5*K`Nk9^O-`5`q z4IIK?Wz*l2^=Varq&N$)Ut6^g*{h-G$0Rs+>x+wf+G(qXt^6C4?gE5I&X+(h;oO*r z?@f8b;2o>YxWVT;?+jht=x1{;-Tv2&%bO;{RrAH{UHB zC*1DrJ#8%ch)qQt)Ze);Z9=}RjUQa`h$hUpb5u?u9j&}idP=231s6-W_wWJ@v}p(e4LT~p z)N6l2-^lUl&6U2P)ON^5tbNoj!N zmi}k235WKnJ;*@u?lL@pVS8FQE>!G{m;UMgn-3#%a_(D@sHQavsAn{(<>Py$m~1vH zs~@^6c^M#~?fjX8)>l!qhhu$-jI^w77umvgr;}l8YvLvme9aq!HOY77hzC3hY6ViZ z3RNlg@>O9D7n$RfO~-BJ;it)(EkKYMiLCsqy(F)CbD zIomMP19;_|mZAnuJ!zvVOynRvHu6H8@8!=NmXg73?f_=zdYrh#8P57DX|=J6S3lFi zpJR9-!sZ(4ff-8=J8f*`j0<0tTPCF#T3Vo=U7AvJBk7@B3JC>aq5bfzBuZP$S1DxIE(5W%Nu8mhIKWiEJ%mjN7nSR%uH5EsP3u+pLa5=Cd|Ev9%QO|rav03 z$z(s~e>n;8pQy&C_dAG?Pu_paL5voEo++RQqzcWboJdF6S0xVs*>g?{M@u z4cp&71Xfux3HgN|oC_LA1YveQ_&{Rx?;{ZEDVgB!fvPaABN$YFY8>5bAp1o={+j5{q z5I%i!JDJ#El+$#(pRw+OI2JpFPRH`~A7gSFX$`O&P&g z%``=s$2Un^IiGJ#VnnuQ&DCr-KGLFgDJP?3j^i9mUw~dDA&NRG5@I%C>CY}t0MAAF z-0Is)8CWgW(h)GxXv9sh8DRRM*Z%o~*b8|H@WS-z5yQM1gZ|&AM9CjO2fnojV1fFa zLO9U7_n7^UwN}>J`B)M2ULboy8S#Jc( zD|q5Xos)I9A)(Uj6QM;Dm#AYkmB=L5wO$P28ZXGb-0Z@QcV)H^avNP;Q z+(fd$-PNB*YEvC$iswi+|!0xiiTBx?*)Q0qlKsc(ij;`?6u1IBXi z$+(-u?9nmA_fY4*{#jKTY{TPbbAz{vO1--0X(28w<*NP9kuZQ2H&amFRzhjayU_bp z)4DwJ;Fi`Sz$1LvMv8yVJIS6OT~5DecfP4u=Q9wAH;i2E+lE_AnywIR!QLpLDtsa5 zYpsZq=N7#E1``*Nnr7tye&3p+yS*POjZ-40Tcnh#PL|F_Lmx-}Y@)l*Pp|F~UaTl+k4s?ekI7GQShyQUl> zXYyrAQiJ2OWqNtvJbWd)t&yoe+HxjMGS~a6Qytu-PwuBdB>yv8TwTb|HgU+`*}A2w zAOD8V_Wlf{(VTO)i?^J2KcPCGz|ue{vLCz!HsQpXoZrzXsI3d;y6gDT$W~_Y0u$%& z3a+<7!-ePO5aej>3k1lLfPpOJ^kBA3fD8-|82XP;YfUCV9s%4phffE_Fr&f*Gv@*5 zp&v&7^u^@?T4-Q7Ia18AX~A{_0A)B%Xn-}eOStuF001EY|6}`l+yV$eBe4G&;qnu3 ziw_+>i%LQVj=up2K}Y}70~W9&#A?O61w>(k6F)*}h`Rw`gBOvhm|=KYVNj@E$-owt zXtZF~Oz4TRARQIgf74JxM`geU!}Sjdv^rEVuw4I8Ak=!SL-mLZ&NZV#15apDl7P|8 zsQAH4`Bb!E8#5|CFh>CuZfm_66`dqFKa-LU{G3n41wA2oJ7Y!#dzI7>chI=;I_CYC-2}`%z`B|g+TeDPNHpFWx)rE z(#niqu>P^Oo)awD;tKka4h&i0e^AjRKncm8#8Px=&xbD)K8Yby#a&fNS;H|bnCI)- z{eT&?XfOM2nEkE#t&K}`qdC=q49;5|?_m#8cv!V9`YBxrvu50zX`sns9G|nRCkbf z`w$vZRQ8dvNRXpncnT17{C@9qB9j1<+=1e_C2W>q6c6mUX1up{=kEdx@CWq!J{cn$ zJrX2nxKWhQ69~wYdT!&9)dAaeqtF?80cf^}r)22<$f)`7IZ%TR@7wT5AY}wLRla_z zg`rVZ9aB64MqF^aPUuGL5YAWREADIi>Ublho6v_-0;^P{t({ur{7qXO?usFxfU{DPlC2x1 zKXEv^1_>mR8OoJQBAPi%C?5z+Gu`V0rZ}EsI!`NNh$~t_5A5t-ZLkw_b4W zndaRZvc=~eOU~x3k@T)KiX9@&GM*h)YvuU7yJE&{75|h!OhWz@2&ueR`WUJTM?}A9 zOlA?2BvY*A#al@%P(vq{=FP~(a=UWb3HkNT_QpYE7V7VPF0aS^FYIoTKsCR?OM>AI zyB~l)anZB@%ixS-6H~St@NqxKldsn;AzxOYKR@i2=XpQ~<_vy6j+E2quZHTjjw#lA z)}cWJF5p%;2u5t{(RqK%u+mnnUIU)yqvCJdM#xO31vR1`S&J@NCv&`g9LZvWbNHXe zs5Q`?tk<7L6jJ}C1Pa-ok8C|1#ejNvFf&iOP@^JUPM&O8HWPOb=8jh8?t?&Bx^y=y*he*Rk?on*KqPl2tM=J0__ zC(7g1QesixDWlx7ZFeHrqEyBmCB>pbp!cH%e(JwfsN$DDj@b%dLwrzPQHnz%-;&l=r&|9-|zK&2c;Yg^z2R|S)3N&9ck-YYCT{4d)qA@PbV%h zJY&W?P2^&Ad5s&%LMz5H%^6U!dZLHK4+H~3OA{!-htO`RID}`Zm8b%RSN;be_(i94 zSi#fy+mmTh)}fMTeQK2C$eMl|yI12FQ;?W~{nvQ|gAxJ#I2XU_r^Vb^vZ}@0!7D03hM~7Tz{M{YvsQQBR4hM71AXtl(Uib4$z8?{JVNN@H?&Wc{ zKkigs8p53Aetu!=>7gaGSWB-V>Tl(<+=%}~|Y#`<tvM#XZnC#I*YA7gs$aOTXH zt~Gc^kn}EBt|5o#5%&?8k{P!Guky%2mSYCSA>YpBkk4Ew+>AO1+mCjRej@`jg7%$RVccu&}-2Yo{XyKEosKqB;KCe(7t)9LMA^nUzHc|ZEUq^s8- z-1QI(e212>==Au){Mp)m25Jd!{BnC)i3G}dzI_^BiI@iIy!w0%m29Cs29b+S2nm}R zlTX#`VZMD$$|{J|9HZQb=K$eCoG}}H%>pycPP?u5gw8(5?Jdn)j;0K*_+QlSKJ89k zg9h(u(Z|R38pZYqm16yXmp%q)c&hYzot;ehZ@s+Cn?_?+tObf21i3R)&#OksQ@tBX z3?Wl}$G)ERcNtw|^lJy~9y3oz-NRY$0Q?v^05@=Ge-^8bgk|PB# z;MqrMB>4zuV%YO!(&bK!e322>Sd>LdTb_>OOHp#iR_sYmIu&Kzk*zvb&rb z)=qqyE1FWmGBKF7;WOYH_XbZi*C5X-4HxDN9`edEUU>DFAcnm~&K$F#b`fnw9itxM zZH0Bx5Y%B*W2qh{4emr5N-KNPb!`NxKa8&V{@2N98HV}EHVe*WeaGd%W`2jVB#@^{ zP6+f=U0r5&nYDihLhlGrfVT_Z#vi*w2zGo@2W{a7@ z*s||L##Rhs2E&YD#yjtS?|<+4>$$G8T-S5X^ZkDA>pstOKfW=1H|J`-R8B|V`|sJ~ zx51x)3%@E)c1UM>_h^`Fek>lmsaX2vlErYMwS2hcl7_%;M(En(>=lUG;lqwu|buIdPCb(@7Ue<#+9q18^ZTqSn$s9+yQ>YIiS2(YM1jTx>R!>qWG?ZV^$;2 zkqeTymsoY$tT9y4`7RbQ{@JImmOcLqJZ;_pZ`~dV|Ny zlrO3r*t3CZiWhpm@cDML%f)ZO>)yJuvC-W-jv=6!h%@5}YS*-!dluQLZSF?im!V&8 zzB|f_ICCMo@-r8PzWo^0`9lcdo^AGUr$Fpie|E(e@5iHYP%9(3`+D+1d0gq$j~zlT zI24Mc%DjGb=AqwO;DveY;xZr2LO^KgqmgX%^j$#sw>jScEH;K*(R-P@Q8FgJr;H-E zC8O}nij)PDe>D-m6?&!gzFFrVP0<=HoB5SDFG3xPxPm|R{Pc@{mT_}@g6E`C=ly%b z0)Ju(?A{ljZu_Qb40Rd{yprd}YrO5vnJdNPVJtBF!CNO{?`~zwX(Z&;U#YjnSENSO z{#>8y0MhvLc8bRYUY7RoyVO_*zWe@2_N0xR&m2cdS=HC^`wz3N?sjTci~o0P_w$Hq zrt4kx@P!k(HHnM2sKw_4EfyR)BO+@565_dqO}RaNoU&BN$fShP|AgC$|Fj#W|Bz8W zF9SO;cg+s}dCIr+lBO;s9&dZ^<@fU~s|jBYF2_QF^zx78X95?BjndWXpY-*2wL;_@ zaf-5^QyW4DxI}L2nz*%VDcRnsKVcrRd{@cOsom)w%-QPAa7q2zC9)e&NhvCa5cy<=gs*I z^AkhnrBq-M6T|7K5p8V?6A*kU$#r?GH#Up3aL(Cs(kRVhBlBwJ!Nu%UCBB0PH$+#s z(`02F#Gju=#C$n0eOn|Su0AY<@VYKZe-mwZS<3I?ow2hM2Bni%w=6|HVf9h2C69Xu z+MDqeJZG-=l$PHfj{O%OY9=?utIDDQo*q?J{%Vj3)a$4#Kw+!sl3*s|7ghpz?h?|d#j|R)xM3gO5XiJVPFvS(7_>lpmIFcrA)rM|I)gKlWk7#@IN^dQX)7J6D#-O$(yk42)C zkd5&>)z`1$BYO@G(S1oGyZ22KZvgHfKTE$Oe%@j15}7K>p4Qj-iea4s=zAZ{ z`b_pjnqhf-S4RIS+H5VjQ#DM3XJ;EvJ8- zm6503`y3px@4j8x$1I5I@5nj-F+W${=Eif@7YtP$A0GWo5gT7%b8BaF`+V-=RTWj7 zb??3E0Wrlc|CL|Kg^tJYv5!}-?@C|22<-Mv3cGzC4$6<0!hbS-Zo$^QY$_)GQD3at zI9Fet=JMFZxLZNJ?{Gc>k{c!wu1`VXOY;d956?Tz z%aKFv@+IVzrGyiVKVY>6o+}?nE2jh7&qAsx`*XEuqalx})znbMpuk||W=24z_l}+S z4~rk(Yz>MH)kx#8BG?sV0*(|bFr$6b{dAwA@80=1OyN&%@xW1cwaY$?eci&{+?DIJ z%)2%7$wn{thYnwj(v**%UdEEpwho}s4Er|u`copZWz;xa-hcn{`7O)!Yx z#Q+Qj`Czxuk{7=H|`4~IK*_hbJ-vF9_RhVo&{Xrm) z_=|r1LXoiVnN1k~E+3G0DNv`X2p|HfM7j|c|1@jpp>S$k0=35TRkJO5u7_pRDM@xX zvlEiU3w3w2yiUJ?EU<50=Fu&Cb^_BWy>C-%^d0%p*Z%dW?~n4uN?gRcM-u4mG$1o$ z6dE9a9bofg3v9Z4pT|4eBy^zk=*-sHL72{9n$IB1Hhs9|J?h`v*z$3A zFPSbf^kHEuo59>5?pcQqu8JCV&VA6g&oz#5%UfUQr@-Zpl8WQ*mtKY$RKM>~k+7|9 zME~cP7)aY%__>ye`eJGRY^<#PxWejZLh`SM-<%xxmMue<%A;t8W+=!XJNo)l9n0UZ z;; zme{9*>NVD`)M(Qetb&gEd}vcU$1mNjc2RLY@-9z*)CPryQvW>pbsvY!Q6^iq7ZOuQ z)Ws|1&KKvaD|E?kF{>OKbJ8EV<*Ks(5gyhQc3;vtEf5cRVtsdZ*)8nofIJU%Y(X^f z_sm^)tIsK0*U_`$roCpjxZbq54amb*RxRA`g-fKY=~_*==9KZ6l1`_r1ye-cUpnT^ z+v`dFkSi|WpmI}H`MlD3UzZo0y1I&wgJEup){orW6^-xO=_=pUbk$JRbWziKruOWa zi?g$vhO&mbo05vNrmBmYyE6Fyy#lo)bAeMu(aP@Td6o0Z_Nn?*ehJ`zAM$@E3aMoU z24tvQuK$G`oDzKxcQb~_#*r9?zTD04xbOZ?!tjnfE`xVU4_r)4gFvWXpY z#qlv9pv@0ZT#Wky6V7TYvk|uX*La-p z>nLFp9(W_`!BF@oXCZ4L%g705Zfk+bh&pE}Yd~Z&a?knn^f~p21ZRP1LG{Q1XRc}f z`iO4|Hy99la>HVBQ0r`4eHFS>HgS&==JBW^c5ce+MCgfh;<0%1G;2_HZWi(rZh0(T+ ztRk(!EwvEI6YRE2YqOXreffOF9Cmix1z4%9gTpdWvP*}338%3A`rlY$-bRU`?NYK3 z9#X)&s3QM4zNTXppja90t}7*u=>RPr98XzNaYZfu@v>pQpO43_!(Om}c@i5s6faZD z1mI7)4>^19njHCbIA(X0xo-bNQ5&FWX#R$76gybw-Y7i-!z&?o``-yvOjB zWfcW8g$1Ory-|8%p_cG-%K^vizOq_Uu<&za+hHh8GBlj^2e65}U_X0v9yo<#BvA~= ztW*~+Q(7TKmfT5w#MSS(juf-^3T$GX^x4KlU?d$q!;!fNM+3)qmG!M_oA{|=t7R_* z*lsL-YGi78LxJ?Yk-|+*pc--=`6Gy#gv{*$VX95fp)k!dw2U>3Qi*REX;_|BART9f z%&KmkCuw{~d9s0wPn0`k zSE{p#_&IV|RG2vAh4HfM>a;7lmg;AcVK;fmK?^?mEc@-+8eNbs6E^d)KAoaM?xWh6 zXw#+-wP=AyEwc9Sv%7B$`!0znti2pRl%**g)ySgXejB2WFz#H@nbSXy9$BoX!xNb5pRlww>&D`Obi=SJGko{jSdb;dt7ydY_!i&yj zB29870*Y%tda*Ts%nw_z#T)OByFPm8?J-alWyd-u4r;hV#E&f&u=UP|9D_N|Buf*C z?O7Sc&^rE3`2+7(M+HM@SDf8WwjADM*kb!5>S%`-Z!&TR?rFkUyi0T=tifAkkN+i5 zYRG4G+dg8yZlNXhxDt=uP}YctW~sA{W$-c;mngtx5ULgHK*l zBMF*(+0h_=A#1~jABl65r3s^3BTOWx#JsWRiC1^i?+&d=q|JEoxFoD8_`*sP;i^~C#n&$w=+<$j(`%p z*NFf24C+QfYt*U=ov z6Zr8*3|I$3B}5wk`w>HZ62V0?Ybh!cj@$J8M!;=PqQrZ)@iAcjsTnW!x-RY3L{tW{ ze}4WQC8=Grd2mTKX0zLZ@3qpWQ9pA3ntpB3mV~0f+ z?udL5}wKLPHJP;lLFzCk|+9*W4`2+oB<-YZruER<5B$;)sItC1ra^EQm% z(YtMJs6{b97r>?3!a83O`v@YWzrw%4bBCNX+0Y`^Bw!0EMCZiJM2NU__leWgLcg(c zO~M_G6kDh4NSzSG{4H#P@Ariyms~)A?iyOl3LJc)D3GC~Z^B1NR^lvyvb`yMM4UeG zV5i^2j77|M;jwWH!Fiwjoozg2ICmMLAQ-<10S*a@+jQaHoDKR3x?0%q?Z8?zr~uo| zYghVLmlz#n;f8$;d6EBn+Akp9;Vk53epnqkH!rmVYJ1f;n_@v8rFwEb7~Bbqkxt63 zGhJ+v&NZM4guV%_q1aqjUSXi-xp zO}j#^Q{Lxc1=cnmFRb{|^ZE<8qCPP`_51e+^C5}`L!BmeGvN;SzTxKWqec|Jucvl{ zNQjNYX809r+qQGWzXUXC2ep3$X|c+q;I7-wU_)2X{KykI&pnU5zEe&B$a6W*Jh4oV zeHJ2}P6wdRa35!J>gGGh{s;U34#h~9Rr#vJ|L*?Bi{jDpYLWu%j_liQEJeQVc3=rIBJtc7wZ`C{n8_m&rnK z3ll)xE=+|c-qKVAG;W|-ky7~4QOGfdVoBzPdzl=+il?ZPAHeNQj+d2*n*=-3K8o>x zohU`nAtegm5VOn8CNz@LF&fgmf>fs81b4POcHtqP7=pR(i}Q+Pa5jTK z*Le{Orht+NEa8~}lNUopo&aLBF71km^R zO2rV!-O4ynef+WRCbQxdIBZ;*A*_Q>8j)D)R^U%1(pk`QVWToaT?mMQZ(?r!JwhZC z_9&`N+~ar19DlMpH8@U{6M?ds=}z+>p;wH;(N!sp4K^hF6uGzA?ivsCx$WDL##WEE+ z_Yc0j2W6dv+U+Hjje7%ypWFmD?lYC%L<=Ip4l~LZ@1Rrj6}y%dYPZ~pZfhpnEPdYD z8)!+SmIGe7xg@yqmg76C@BNI6Xsd$CE&&C9>M@*mcxu@grM3N$@{DGv+o`exe}xJ7gD2w%1)66|y&HqUMGPdY zl765LQhAwtS6tXr*qucKc!^=fMQ#Q0`3}TIT3}1HL9#g9_cr#OM&0wjU-6kEzKa72 zwyQcs1ws%BCG7J9hqz9&Z>clTso%xNFi!Y-jo>%X4TX^QS-XJea!jp5nOc_u%_e3O zhL~E<79*m$=&U(jBW}4N#QQ*GP;F_2ax^}h!9#Q&IZX%9l+Qpb!iM}?>rca~UN(x;!sVwK4cG^=^&8nYO_2QJcaF?>RPp#><1{|TnCV&lTDn<>U1mit+ckFzIZUo zE^jbwHg6EFv+%HyYdyY!eOV_WJwW{2H0f;>H zsFgtN6;7K6CtEcyv7+|k)bU(HuG_gnbe-E5e9gdJTvMUx2L`h;jNL{AxtV&JnzqBi zIE#5xNeDSc_DYo2z7MM>nerbe7wj4??$mt(J^G5vsN$jXIq<44&}Ts8*<7>9JDWn# z?F5*>IA;6oeEX{aDPZu*+MOnV`*19gCi^Ua_=;8a9#bhZAaocN^@Yva@EEDF0twa z)g0{(6DFJjts@;IQ3c~2bq&uqtO};u>xv%9)om-qw_hh~SKTOL^)~nt+YnAG(;41a z&UU`>@1gG-N)&oQE#%JhTV+n%N-c~`; zf}jZ7vIYWL&Yr}8DM{WR>Wsyi!_K0wgHJw;8C#ok3PJ&~nCQ{d^K3!wdQ86um+t-I zf}Dchk{Y1_S;(s*)|mZWjHG_2vvH|jJ*Z+A&?;3M167_mtrQJD!4nlp&=2dg?{&Jb zGJWa=aR4`a%ct%F95KzYGFk_YHUELj5&UN7qnIspIBc|lbcRglg84x#v9}ZsE^59n z$bBM~kmP=#4ODziYO`vafN>+`G14!iGS`+D;Jtu)W2ExQ`OclXE^t1ygNS1%T|n|P zM8VNRgycoR(q)QPsBwA>cBSF-o$SiuWi=;--m@+0RL z?2e~W+y9cAsGN=b>-`Yk!4d-ATfty;KM;00epF-$bZ67`pmFPDKs4THW-6!Euubvh z7v4e?PvW%S?;n3i*`r?76kq>ca}w0I<4@`gm@`rcr`eHzYP1cc2$>-ox2{>?>R?j# zL98>vPhi>A4U652#-%Dr72`TrJ@N+s06N>dB$@HLFp;oNe>Ymbx_W3ZM_7~_L0e!e z`fwr4L4m8!f@eXD|e(cPSiGrB;-bGs}C(`O9!T`rD<~wnFoyju^3zi;_@nt zW)ekUbO-dR3^RSe;SlpfrHQ3(vtqbXe=f*VN4WK+x6RzaQ(SU>eP^I9OCUt7*h@=8 zj;~bZ*2#)x)!4rqJgdS*D*reU!+WaZ66*)0igc!W3d(XS+=8~lVdwg$gjNN5RW$`( z^x<(HI4!dcM@m9SOa`yWBQoHf##<*u4kmk-E*o@5>~D5c!{8^RKW|_ta-oJ0mbz|m zchap*$PYto9>I6yO6a={i?txn^vVUV_o)4d9kwYbI>MLWd!W$Jv_$y%FsPGAnCbO! zcKwkvPL67fXx^Ar8mwVfc;T8qK)vErY)zm*3kX|i(Y~n+=$jC2U~1)l!R!VD&v*~I)DpP=@+6z@>p z-&`UidkIk(_P#}9wuhw*q(TB)q`lA7p#mx=PSr>F ztf@IGyw5Sxwg|XVe5H|YhWJq5$5-m>`#oXsb~bKftZo7z>r%rje67S6ikwc3=M+L` zUir5!{Bu_yKG-7BQ8Kd2};uLqPd!x`+o` zZup8O=25yzTIqs%66-t)((C=hBI~`SM1O5F@}+66bzR*^@QGZmhTU1OG4`b;pRiO6 zLX2f^y!`OEGe!3)g*QYv?A{c*dMm5!Hr?Qk-y9$`|3>?EV7=JG5iw}r6x1hj=1N_T z(d};n$jAVm7rxjtm948VK}qiJTgZ~HUZ@=QJ-wvFHbb%>>E?L4(NK)VLV#u_(`lb^ zKaQS|`(ZSpVM6=$j{Fm@QMzoN>o{vW-%8N&*z~o?&p9`?y$sX#`o}Xq_W{G58NTt- zCS;b+%`PV`ZI;tvQ*TsFE)~BjBWE zEp7ScOBKHvd4Tvs8X_9A0fR zRXj|W#nGxxdY_SKTdCsk=FHr#R6>g;|IR4TdSmZoQp#M%5VPrQG!0t0J#cCBq?$*q z$iLHS7Ozf>hxY4g^7BOF79VSJCWbHPtth=<6s~CHL><7ivp78N3|t-8y*r@&lnYQR zG}~oYvorIjtKKo&JsEU+U~jA+Jg___uRAa|W~w*f^}ntBv3{L_TAedVI3^&y><}wY zO2uFq#NuB*8JWdmJ{j28yf0p6xEFZh)7=w1E7ILj=!gupVl9^pzI}dhbjEIx>mRjH zE;TC?|8mZxMoU&O#H6-bb=3e+$-Iw)r=1XR4z}idF=)siZj@?QI#<8w^ns^V;lDt9MBsv6&Mg0`NuyXt92SsQ*;&1I=$M~ z2|L*zn{l&R@J8(Q#gInvis+2KD!!L7c8f2Wb{;-2Mx?c(<3)g8%s zT^wGItGZ5ju~c@^U!)LqOZi&FE6YZj#O=!Xn#6%JG1;;O;8Yqj68Z#_d&<+mj13f? z@;0<5z*KZu8gSV#4c#-8b~;H$_bjx%kfb@DB|h+$`GOPvj639uT}@@iMpF22X2(mL zE-?E|Jpqnnb{tiHAg-9Vzp4?i*)UVaMOh64cFf<3FIzFOTI3uo$}8aHAsQoovUEF4 ze69qj4i+CN*+xv{cdd9{%ITW(9M9^S@qA|QT59euezAnlPkgA@945Y7%;&;vjXW2} z74vz0V-9-Z`qdi-%a|Q!AdRcJO}Yy7kM*!MY2k$CnU%H=u&a_hCGE^8Op?8%l>^2< z4kvoT*s_@aO|)RrEu2%g6WFGveG|x&fTmBv)}-}Tw%PJ`wQF{+RcaBo%N1(9w5#K1 zUL>SW5}qgcOul`d08Bo2X102sC3s8{{??L|b$QihuCQX+)hetD->SJ=Ukp=wXk8fL zsGmTcpgJV1OjtinSU?VbtOH)iR~X_kC8=-xP`hidk8}0jw>@K;L!_INjkPpzxs5ph z_TT(c5{hxs?vD^t5}1tEVj2P4Myq(0us6p>8(S5h_sPs#b5=pI-<;T|+18J9*UqS= zepTtO`^T3nJQtMk)v{v*@m{ln0J!|jsVaV(yf5U}8!z+l`qicWOiTsMcE8+F=u^|Y zpdZ75NS8;LPZiXBCLBNf>7WkuBY-{!OjBujxoyXjLUdBizX_w??AH4umA|`f_p2SY zPAeRedFQTJ@2A^tMam!AcOYNo6a7HmzZ``cp|$@i`UY!C8b z{_$^Q>EFk32cdmm@V}60fB$sST>8XnCXkJP$ChD-uE6T zJE&U^^3F6SRb>J1zTpO<8NOQ=xhO-Ztpk|sQx7dHUQ~o~eDWe=E;zM^Ap_!4SH7vj LDJyFLHRSvs#Ds^y delta 61030 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 xgY`fe<{{cbK8L0pO diff --git a/docs/search.json b/docs/search.json index d791c82..b3b0493 100644 --- a/docs/search.json +++ b/docs/search.json @@ -144,7 +144,7 @@ "href": "Chap3.html#existence-and-uniqueness-proofs", "title": "3  Proofs", "section": "3.6. Existence and Uniqueness Proofs", - "text": "3.6. Existence and Uniqueness Proofs\nRecall that ∃! (x : U), P x means that there is exactly one x of type U such that P x is true. One way to deal with a given or goal of this form is to use the define tactic to rewrite it as the equivalent statement ∃ (x : U), P x ∧ ∀ (x_1 : U), P x_1 → x_1 = x. You can then apply techniques discussed previously in this chapter. However, there are also proof techniques, and corresponding Lean tactics, for working directly with givens and goals of this form.\nOften a goal of the form ∃! (x : U), P x is proven by using the following strategy. This is a slight rephrasing of the strategy presented in HTPI. The rephrasing is based on the fact that for any propositions A, B, and C, A ∧ B → C is equivalent to A → B → C (you can check this equivalence by making a truth table). The second of these statements is usually easier to work with in Lean than the first one, so we will often rephrase statements that have the form A ∧ B → C as A → B → C. To see why the second statement is easier to use, suppose that you have givens hA : A and hB : B. If you also have h : A → B → C, then h hA is a proof of B → C, and therefore h hA hB is a proof of C. If instead you had h' : (A ∧ B) → C, then to prove C you would have to write h' (And.intro hA hB), which is a bit less convenient.\nWith that preparation, here is our strategy for proving statements of the form ∃! (x : U), P x (HTPI pp. 156–157).\n\nTo prove a goal of the form ∃! (x : U), P x:\n\nProve ∃ (x : U), P x and ∀ (x_1 x_2 : U), P x_1 → P x_2 → x_1 = x_2. The first of these goals says that there exists an x such that P x is true, and the second says that it is unique. The two parts of the proof are therefore sometimes labeled existence and uniqueness.\n\nTo apply this strategy in a Lean proof, we use the tactic exists_unique. We’ll illustrate this with the theorem from Example 3.6.2 in HTPI. Here’s how that theorem and its proof are presented in HTPI (HTPI pp. 157–158):\n\nThere is a unique set \\(A\\) such that for every set \\(B\\), \\(A \\cup B = B\\).\n\n\nProof. Existence: Clearly \\(\\forall B(\\varnothing \\cup B = B)\\), so \\(\\varnothing\\) has the required property.\nUniqueness: Suppose \\(\\forall B(C \\cup B = B)\\) and \\(\\forall B(D \\cup B = B)\\). Applying the first of these assumptions to \\(D\\) we see that \\(C \\cup D = D\\), and applying the second to \\(C\\) we get \\(D \\cup C = C\\). But clearly \\(C \\cup D = D \\cup C\\), so \\(C = D\\).  □\n\nYou will notice that there are two statements in this proof that are described as “clearly” true. This brings up one of the difficulties with proving theorems in Lean: things that are clear to us are not necessarily clear to Lean! There are two ways to deal with such “clear” statements. The first is to see if the statement is in the library of theorems that Lean knows. The second is to prove the statement as a preliminary theorem that can then be used in the proof of our main theorem. We’ll take the second approach here, since proving these “clear” facts will give us more practice with Lean proofs, but later we’ll have more to say about searching for statements in Lean’s theorem library.\nThe first theorem we need says that for every set B, ∅ ∪ B = B, and it brings up a subtle issue: in Lean, the symbol ∅ is ambiguous! The reason for this is Lean’s strict typing rules. For each type U, there is an empty set of type Set U. There is, for example, the set of type Set Nat that contains no natural numbers, and also the set of type Set Real that contains no real numbers. To Lean, these are different sets, because they have different types. Which one does the symbol ∅ denote? The answer will be different in different contexts. Lean can often figure out from context which empty set you have in mind, but if it can’t, then you have to tell it explicitly by writing (∅ : Set U) rather than ∅. Fortunately, in our theorems Lean is able to figure out which empty set we have in mind.\nWith that preparation, we are ready to prove our first preliminary theorem. Since the goal is an equation between sets, our first step is to use the tactic apply Set.ext.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n **done::\n\n\ncase h\nU : Type\nB : Set U\n⊢ ∀ (x : U),\n>> x ∈ ∅ ∪ B ↔ x ∈ B\n\n\nBased on the form of the goal, our next two tactics should be fix x : U and apply Iff.intro. This leaves us with two goals, corresponding to the two directions of the biconditional, but we’ll focus first on just the left-to-right direction.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n\n **done::\n · -- (←)\n\n **done::\n done\n\n\ncase h.mp\nU : Type\nB : Set U\nx : U\n⊢ x ∈ ∅ ∪ B → x ∈ B\n\n\nOf course, our next step is to assume x ∈ ∅ ∪ B. To help us see how to move forward, we also write out the definition of this assumption.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n **done::\n · -- (←)\n\n **done::\n done\n\n\ncase h.mp\nU : Type\nB : Set U\nx : U\nh1 : x ∈ ∅ ∨ x ∈ B\n⊢ x ∈ B\n\n\nNow you should see a way to complete the proof: the statement x ∈ ∅ is false, so we should be able to apply the disjunctive syllogism rule to h1 to infer the goal x ∈ B. To carry out this plan, we’ll first have to prove x ∉ ∅. We’ll use the have tactic, and since there’s no obvious term-mode proof to justify it, we’ll try a tactic-mode proof.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n have h2 : x ∉ ∅ := by\n\n **done::\n **done::\n · -- (←)\n\n **done::\n done\n\n\nU : Type\nB : Set U\nx : U\nh1 : x ∈ ∅ ∨ x ∈ B\n⊢ x ∉ ∅\n\n\nThe goal for our “proof within a proof” is a negative statement, so proof by contradiction seems like a good start.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n have h2 : x ∉ ∅ := by\n by_contra h3\n **done::\n **done::\n · -- (←)\n\n **done::\n done\n\n\nU : Type\nB : Set U\nx : U\nh1 : x ∈ ∅ ∨ x ∈ B\nh3 : x ∈ ∅\n⊢ False\n\n\nTo see how to use the new assumption h3, we use the tactic define at h3. The definition Lean gives for the statement x ∈ ∅ is False. In other words, Lean knows that, by the definition of ∅, the statement x ∈ ∅ is false. Since False is our goal, this completes the inner proof, and we can return to the main proof.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n have h2 : x ∉ ∅ := by\n by_contra h3\n define at h3 --h3 : False\n show False from h3\n done\n **done::\n · -- (←)\n\n **done::\n done\n\n\ncase h.mp\nU : Type\nB : Set U\nx : U\nh1 : x ∈ ∅ ∨ x ∈ B\nh2 : x ∉ ∅\n⊢ x ∈ B\n\n\nNow that we have established the claim h2 : x ∉ ∅, we can apply the disjunctive syllogism rule to h1 and h2 to reach the goal. This completes the left-to-right direction of the biconditional proof, so we move on to the right-to-left direction.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n have h2 : x ∉ ∅ := by\n by_contra h3\n define at h3 --h3 : False\n show False from h3\n done\n disj_syll h1 h2 --h1 : x ∈ B\n show x ∈ B from h1\n done\n · -- (←)\n\n **done::\n done\n\n\ncase h.mpr\nU : Type\nB : Set U\nx : U\n⊢ x ∈ B → x ∈ ∅ ∪ B\n\n\nThis direction of the biconditional proof is easier: once we introduce the assumption h1 : x ∈ B, our goal will be x ∈ ∅ ∪ B, which means x ∈ ∅ ∨ x ∈ B, and we can prove it with the proof Or.inr h1.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n have h2 : x ∉ ∅ := by\n by_contra h3\n define at h3 --h3 : False\n show False from h3\n done\n disj_syll h1 h2 --h1 : x ∈ B\n show x ∈ B from h1\n done\n · -- (←)\n assume h1 : x ∈ B\n show x ∈ ∅ ∪ B from Or.inr h1\n done\n done\n\n\nNo goals\n\n\nThe second fact that was called “clear” in the proof from Example 3.6.2 was the equation C ∪ D = D ∪ C. This looks like an instance of the commutativity of the union operator. Let’s prove that union is commutative.\n\n\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n \n **done::\n\n\nU : Type\nX Y : Set U\n⊢ X ∪ Y = Y ∪ X\n\n\nOnce again, we begin with apply Set.ext, which converts the goal to ∀ (x : U), x ∈ X ∪ Y ↔︎ x ∈ Y ∪ X, and then fix x : U.\n\n\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n apply Set.ext\n fix x : U\n **done::\n\n\ncase h\nU : Type\nX Y : Set U\nx : U\n⊢ x ∈ X ∪ Y ↔ x ∈ Y ∪ X\n\n\nTo understand the goal better, we’ll write out the definitions of the two sides of the biconditional. We use an extension of the define tactic that allows us to write out the definition of just a part of a given or the goal. The tactic define : x ∈ X ∪ Y will replace x ∈ X ∪ Y with its definition wherever it appears in the goal, and then define : x ∈ Y ∪ X will replace x ∈ Y ∪ X with its definition. (Note that define : X ∪ Y produces a result that is not as useful. It is usually best to define a complete statement rather than just a part of a statement. As usual, you can add at to do the replacements in a given rather than the goal.)\n\n\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n apply Set.ext\n fix x : U\n define : x ∈ X ∪ Y\n define : x ∈ Y ∪ X\n **done::\n\n\ncase h\nU : Type\nX Y : Set U\nx : U\n⊢ x ∈ X ∨ x ∈ Y ↔\n>> x ∈ Y ∨ x ∈ X\n\n\nBy the way, there are similar extensions of all of the tactics contrapos, demorgan, conditional, double_neg, bicond_neg, and quant_neg that allow you to use a logical equivalence to rewrite just a part of a formula. For example, if your goal is P ∧ (¬Q → R), then the tactic contrapos : ¬Q → R will change the goal to P ∧ (¬R → Q). If you have a given h : P → ¬∀ (x : U), Q x, then the tactic quant_neg : ¬∀ (x : U), Q x at h will change h to h : P → ∃ (x : U), ¬Q x.\nReturning to our proof of union_comm: the goal is now x ∈ X ∨ x ∈ Y ↔︎ x ∈ Y ∨ x ∈ X. You could prove this by a somewhat tedious application of the rules for biconditionals and disjunctions that were discussed in the last two sections, and we invite you to try it. But there is another possibility. The goal now has the form P ∨ Q ↔︎ Q ∨ P, which is the commutative law for “or” (see Section 1.2 of HTPI). We saw in a previous example that Lean has, in its library, the associative law for “and”; it is called and_assoc. Does Lean also know the commutative law for “or”?\nTry typing #check @or_ in VS Code. After a few seconds, a pop-up window appears with possible completions of this command. You will see or_assoc on the list, as well as or_comm. Select or_comm, and you’ll get this response: @or_comm : ∀ {a b : Prop}, a ∨ b ↔︎ b ∨ a. Since a and b are implicit arguments in this theorem, you can use or_comm to prove any statement of the form a ∨ b ↔︎ b ∨ a, where Lean will figure out for itself what a and b stand for. In particular, or_comm will prove our current goal.\n\n\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n apply Set.ext\n fix x : U\n define : x ∈ X ∪ Y\n define : x ∈ Y ∪ X\n show x ∈ X ∨ x ∈ Y ↔ x ∈ Y ∨ x ∈ X from or_comm\n done\n\n\nNo goals\n\n\nWe have now proven the two statements that were said to be “clearly” true in the proof in Example 3.6.2 of HTPI, and we have given them names. And that means that we can now use these theorems, in the file containing these proofs, to prove other theorems. As with any theorem in Lean’s library, you can use the #check command to confirm what these theorems say. If you type #check @empty_union and #check @union_comm, you will get these results:\n\n@empty_union : ∀ {U : Type} (B : Set U), ∅ ∪ B = B\n\n@union_comm : ∀ {U : Type} (X Y : Set U), X ∪ Y = Y ∪ X\n\nNotice that in both theorems we used curly braces when we introduced the type U, so it is an implicit argument and will not need to be specified when we apply the theorems. (Why did we decide to make U an implicit argument? Well, when we apply the theorem empty_union we will be specifying the set B, and when we apply union_comm we will be specifying the sets X and Y. Lean can figure out what U is by examining the types of these sets, so there is no need to specify it separately.)\nWe are finally ready to prove the theorem from Example 3.6.2. Here is the theorem:\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n\n **done::\n\n\nU : Type\n⊢ ∃! (A : Set U),\n>> ∀ (B : Set U),\n>> A ∪ B = B\n\n\nThe goal starts with ∃!, so we use our new tactic, exists_unique.\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n **done::\n\n\ncase Existence\nU : Type\n⊢ ∃ (A : Set U),\n>> ∀ (B : Set U),\n>> A ∪ B = B\ncase Uniqueness\nU : Type\n⊢ ∀ (A_1 A_2 : Set U),\n>> (∀ (B : Set U),\n>> A_1 ∪ B = B) →\n>> (∀ (B : Set U),\n>> A_2 ∪ B = B) →\n>> A_1 = A_2\n\n\nWe have two goals, labeled Existence and Uniqueness. Imitating the proof from HTPI, we prove existence by using the value ∅ for A.\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n · -- Existence\n apply Exists.intro ∅\n **done::\n · -- Uniqueness\n\n **done::\n done\n\n\ncase Existence\nU : Type\n⊢ ∀ (B : Set U),\n>> ∅ ∪ B = B\n\n\nThe goal is now precisely the statement of the theorem empty_union, so we can prove it by simply citing that theorem.\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n · -- Existence\n apply Exists.intro ∅\n show ∀ (B : Set U), ∅ ∪ B = B from empty_union\n done\n · -- Uniqueness\n\n **done::\n done\n\n\ncase Uniqueness\nU : Type\n⊢ ∀ (A_1 A_2 : Set U),\n>> (∀ (B : Set U),\n>> A_1 ∪ B = B) →\n>> (∀ (B : Set U),\n>> A_2 ∪ B = B) →\n>> A_1 = A_2\n\n\nFor the uniqueness proof, we begin by introducing arbitrary sets C and D and assuming ∀ (B : Set U), C ∪ B = B and ∀ (B : Set U), D ∪ B = B, exactly as in the HTPI proof.\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n · -- Existence\n apply Exists.intro ∅\n show ∀ (B : Set U), ∅ ∪ B = B from empty_union\n done\n · -- Uniqueness\n fix C : Set U; fix D : Set U\n assume h1 : ∀ (B : Set U), C ∪ B = B\n assume h2 : ∀ (B : Set U), D ∪ B = B\n **done::\n done\n\n\ncase Uniqueness\nU : Type\nC D : Set U\nh1 : ∀ (B : Set U),\n>> C ∪ B = B\nh2 : ∀ (B : Set U),\n>> D ∪ B = B\n⊢ C = D\n\n\nThe next step in HTPI was to apply h1 to D, and h2 to C. We do the same thing in Lean.\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n · -- Existence\n apply Exists.intro ∅\n show ∀ (B : Set U), ∅ ∪ B = B from empty_union\n done\n · -- Uniqueness\n fix C : Set U; fix D : Set U\n assume h1 : ∀ (B : Set U), C ∪ B = B\n assume h2 : ∀ (B : Set U), D ∪ B = B\n have h3 : C ∪ D = D := h1 D\n have h4 : D ∪ C = C := h2 C \n **done::\n done\n\n\ncase Uniqueness\nU : Type\nC D : Set U\nh1 : ∀ (B : Set U),\n>> C ∪ B = B\nh2 : ∀ (B : Set U),\n>> D ∪ B = B\nh3 : C ∪ D = D\nh4 : D ∪ C = C\n⊢ C = D\n\n\nThe goal can now be achieved by stringing together a sequence of equations: C = D ∪ C = C ∪ D = D. The first of these equations is h4.symm—that is, h4 read backwards; the second follows from the commutative law for union; and the third is h3. We saw in Section 3.4 that you can prove a biconditional statement in Lean by stringing together a sequence of biconditionals in a calculational proof. Exactly the same method applies to equations. Here is the complete proof of the theorem:\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n · -- Existence\n apply Exists.intro ∅\n show ∀ (B : Set U), ∅ ∪ B = B from empty_union\n done\n · -- Uniqueness\n fix C : Set U; fix D : Set U\n assume h1 : ∀ (B : Set U), C ∪ B = B\n assume h2 : ∀ (B : Set U), D ∪ B = B\n have h3 : C ∪ D = D := h1 D\n have h4 : D ∪ C = C := h2 C \n show C = D from\n calc C\n _ = D ∪ C := h4.symm\n _ = C ∪ D := union_comm D C\n _ = D := h3\n done\n done\nSince the statement ∃! (x : U), P x asserts both the existence and the uniqueness of an object satisfying the predicate P, we have the following strategy for using a given of this form (HTPI p. 159):\n\n\nTo use a given of the form ∃! (x : U), P x:\n\nIntroduce a new variable, say a, into the proof to stand for an object of type U for which P a is true. You may also assert that ∀ (x_1 x_2 : U), P x_1 → P x_2 → x_1 = x2.\n\nIf you have a given h : ∃! (x : U), P x, then the tactic obtain (a : U) (h1 : P a) (h2 : ∀ (x_1 x_2 : U), P x_1 → P x_2 → x_1 = x_2) from h will introduce into the tactic state a new variable a of type U and new givens (h1 : P a) and (h2 : ∀ (x_1 x_2 : U), P x_1 → P x_2 → x_1 = x_2). To illustrate the use of this tactic, let’s prove the theorem in Example 3.6.4 of HTPI.\n\n\ntheorem Example_3_6_4 (U : Type) (A B C : Set U)\n (h1 : ∃ (x : U), x ∈ A ∩ B)\n (h2 : ∃ (x : U), x ∈ A ∩ C)\n (h3 : ∃! (x : U), x ∈ A) :\n ∃ (x : U), x ∈ B ∩ C := by\n\n **done::\n\n\nU : Type\nA B C : Set U\nh1 : ∃ (x : U),\n>> x ∈ A ∩ B\nh2 : ∃ (x : U),\n>> x ∈ A ∩ C\nh3 : ∃! (x : U), x ∈ A\n⊢ ∃ (x : U), x ∈ B ∩ C\n\n\nWe begin by applying the obtain tactic to h1, h2, and h3. In the case of h3, we get an extra given asserting the uniqueness of the element of A. We also write out the definitions of two of the new givens we obtain.\n\n\ntheorem Example_3_6_4 (U : Type) (A B C : Set U)\n (h1 : ∃ (x : U), x ∈ A ∩ B)\n (h2 : ∃ (x : U), x ∈ A ∩ C)\n (h3 : ∃! (x : U), x ∈ A) :\n ∃ (x : U), x ∈ B ∩ C := by\n obtain (b : U) (h4 : b ∈ A ∩ B) from h1\n obtain (c : U) (h5 : c ∈ A ∩ C) from h2\n obtain (a : U) (h6 : a ∈ A) (h7 : ∀ (y z : U),\n y ∈ A → z ∈ A → y = z) from h3\n define at h4; define at h5\n **done::\n\n\nU : Type\nA B C : Set U\nh1 : ∃ (x : U),\n>> x ∈ A ∩ B\nh2 : ∃ (x : U),\n>> x ∈ A ∩ C\nh3 : ∃! (x : U), x ∈ A\nb : U\nh4 : b ∈ A ∧ b ∈ B\nc : U\nh5 : c ∈ A ∧ c ∈ C\na : U\nh6 : a ∈ A\nh7 : ∀ (y z : U),\n>> y ∈ A → z ∈ A → y = z\n⊢ ∃ (x : U), x ∈ B ∩ C\n\n\nThe key to the rest of the proof is the observation that, by the uniqueness of the element of A, b must be equal to c. To justify this conclusion, note that by two applications of universal instantiation, h7 b c is a proof of b ∈ A → c ∈ A → b = c, and therefore by two applications of modus ponens, h7 b c h4.left h5.left is a proof of b = c.\n\n\ntheorem Example_3_6_4 (U : Type) (A B C : Set U)\n (h1 : ∃ (x : U), x ∈ A ∩ B)\n (h2 : ∃ (x : U), x ∈ A ∩ C)\n (h3 : ∃! (x : U), x ∈ A) :\n ∃ (x : U), x ∈ B ∩ C := by\n obtain (b : U) (h4 : b ∈ A ∩ B) from h1\n obtain (c : U) (h5 : c ∈ A ∩ C) from h2\n obtain (a : U) (h6 : a ∈ A) (h7 : ∀ (y z : U),\n y ∈ A → z ∈ A → y = z) from h3\n define at h4; define at h5\n have h8 : b = c := h7 b c h4.left h5.left\n **done::\n\n\nU : Type\nA B C : Set U\nh1 : ∃ (x : U),\n>> x ∈ A ∩ B\nh2 : ∃ (x : U),\n>> x ∈ A ∩ C\nh3 : ∃! (x : U), x ∈ A\nb : U\nh4 : b ∈ A ∧ b ∈ B\nc : U\nh5 : c ∈ A ∧ c ∈ C\na : U\nh6 : a ∈ A\nh7 : ∀ (y z : U),\n>> y ∈ A → z ∈ A → y = z\nh8 : b = c\n⊢ ∃ (x : U), x ∈ B ∩ C\n\n\nFor our next step, we will need a new tactic. Since we have h8 : b = c, we should be able to replace b with c anywhere it appears. The tactic that allows us to do this called rewrite. If h is a proof of any equation s = t, then rewrite [h] will replace all occurrences of s in the goal with t. Notice that it is the left side of the equation that is replaced with the right side; if you want the replacement to go in the other direction, so that t is replaced with s, you can use rewrite [←h]. (Alternatively, since h.symm is a proof of t = s, you can use rewrite [h.symm].) You can also apply the rewrite tactic to biconditional statements. If you have h : P ↔︎ Q, then rewrite [h] will cause all occurrences of P in the goal to be replaced with Q (and rewrite [←h] will replace Q with P).\nAs with many other tactics, you can add at h' to specify that the replacement should be done in the given h' rather than the goal. In our case, rewrite [h8] at h4 will change both occurrences of b in h4 to c.\n\n\ntheorem Example_3_6_4 (U : Type) (A B C : Set U)\n (h1 : ∃ (x : U), x ∈ A ∩ B)\n (h2 : ∃ (x : U), x ∈ A ∩ C)\n (h3 : ∃! (x : U), x ∈ A) :\n ∃ (x : U), x ∈ B ∩ C := by\n obtain (b : U) (h4 : b ∈ A ∩ B) from h1\n obtain (c : U) (h5 : c ∈ A ∩ C) from h2\n obtain (a : U) (h6 : a ∈ A) (h7 : ∀ (y z : U),\n y ∈ A → z ∈ A → y = z) from h3\n define at h4; define at h5\n have h8 : b = c := h7 b c h4.left h5.left\n rewrite [h8] at h4\n **done::\n\n\nU : Type\nA B C : Set U\nh1 : ∃ (x : U),\n>> x ∈ A ∩ B\nh2 : ∃ (x : U),\n>> x ∈ A ∩ C\nh3 : ∃! (x : U), x ∈ A\nb c : U\nh4 : c ∈ A ∧ c ∈ B\nh5 : c ∈ A ∧ c ∈ C\na : U\nh6 : a ∈ A\nh7 : ∀ (y z : U),\n>> y ∈ A → z ∈ A → y = z\nh8 : b = c\n⊢ ∃ (x : U), x ∈ B ∩ C\n\n\nNow the right sides of h4 and h5 tell us that we can prove the goal by plugging in c for x. Here is the complete proof:\ntheorem Example_3_6_4 (U : Type) (A B C : Set U)\n (h1 : ∃ (x : U), x ∈ A ∩ B)\n (h2 : ∃ (x : U), x ∈ A ∩ C)\n (h3 : ∃! (x : U), x ∈ A) :\n ∃ (x : U), x ∈ B ∩ C := by\n obtain (b : U) (h4 : b ∈ A ∩ B) from h1\n obtain (c : U) (h5 : c ∈ A ∩ C) from h2\n obtain (a : U) (h6 : a ∈ A) (h7 : ∀ (y z : U),\n y ∈ A → z ∈ A → y = z) from h3\n define at h4; define at h5\n have h8 : b = c := h7 b c h4.left h5.left\n rewrite [h8] at h4\n show ∃ (x : U), x ∈ B ∩ C from\n Exists.intro c (And.intro h4.right h5.right)\n done\nYou might want to compare the Lean proof above to the proof of this theorem as it appears in HTPI (HTPI p. 160):\n\nSuppose \\(A\\), \\(B\\), and \\(C\\) are sets, \\(A\\) and \\(B\\) are not disjoint, \\(A\\) and \\(C\\) are not disjoint, and \\(A\\) has exactly one element. Then \\(B\\) and \\(C\\) are not disjoint\n\n\nProof. Since \\(A\\) and \\(B\\) are not disjoint, we can let \\(b\\) be something such that \\(b \\in A\\) and \\(b \\in B\\). Similarly, since \\(A\\) and \\(C\\) are not disjoint, there is some object \\(c\\) such that \\(c \\in A\\) and \\(c \\in C\\). Since \\(A\\) has only one element, we must have \\(b = c\\). Thus \\(b = c \\in B \\cap C\\) and therefore \\(B\\) and \\(C\\) are not disjoint.  □\n\nBefore ending this section, we return to the question of how you can tell if a theorem you want to use is in Lean’s library. In an earlier example, we guessed that the commutative law for “or” might be in Lean’s library, and we were then able to use the #check command to confirm it. But there is another technique that we could have used: the tactic apply?, which asks Lean to search through its library of theorems to see if there is one that could be applied to prove the goal. Let’s return to our proof of the theorem union_comm, which started like this:\n\n\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n apply Set.ext\n fix x : U\n define : x ∈ X ∪ Y\n define : x ∈ Y ∪ X\n **done::\n\n\ncase h\nU : Type\nX Y : Set U\nx : U\n⊢ x ∈ X ∨ x ∈ Y ↔\n>> x ∈ Y ∨ x ∈ X\n\n\nNow let’s give the apply? tactic a try.\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n apply Set.ext\n fix x : U\n define : x ∈ X ∪ Y\n define : x ∈ Y ∪ X\n ++apply?::\n done\nIt takes a few seconds for Lean to search its library of theorems, but eventually a blue squiggle appears under apply?, indicating that the tactic has produced an answer. You will find the answer in the Infoview pane: Try this: exact Or.comm. The word exact is the name of a tactic that we have not discussed; it is a shorthand for show _ from, where the blank gets filled in with the goal. Thus, you can think of apply?’s answer as a shortened form of the tactic\n\nshow x ∈ X ∨ x ∈ Y ↔ x ∈ Y ∨ x ∈ X from Or.comm\n\nThe command #check @Or.comm will tell you that Or.comm is just an alternative name for the theorem or_comm. So the step suggested by the apply? tactic is essentially the same as the step we used earlier to complete the proof.\nUsually your proof will be more readable if you use the show tactic to state explicitly the goal that is being proven. This also gives Lean a chance to correct you if you have become confused about what goal you are proving. But sometimes—for example, if the goal is very long—it is convenient to use the exact tactic instead. You might think of exact as meaning “the following is a term-mode proof that is exactly what is needed to prove the goal.”\nThe apply? tactic has not only come up with a suggested tactic, it has applied that tactic, and the proof is now complete. You can confirm that the tactic completes the proof by replacing the line apply? in the proof with apply?’s suggested exact tactic.\nThe apply? tactic is somewhat unpredictable; sometimes it is able to find the right theorem in the library, and sometimes it isn’t. But it is always worth a try. Another way to try to find theorems is to visit the documentation page for Lean’s mathematics library, which can be found at https://leanprover-community.github.io/mathlib4_docs/.\n\n\nExercises\n\ntheorem Exercise_3_4_15 (U : Type) (B : Set U) (F : Set (Set U)) :\n ⋃₀ {X : Set U | ∃ (A : Set U), A ∈ F ∧ X = A \\ B}\n ⊆ ⋃₀ (F \\ 𝒫 B) := sorry\n\n\ntheorem Exercise_3_5_9 (U : Type) (A B : Set U)\n (h1 : 𝒫 (A ∪ B) = 𝒫 A ∪ 𝒫 B) : A ⊆ B ∨ B ⊆ A := by\n --Hint: Start like this:\n have h2 : A ∪ B ∈ 𝒫 (A ∪ B) := sorry\n \n **done::\n\n\ntheorem Exercise_3_6_6b (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U), A ∪ B = A := sorry\n\n\ntheorem Exercise_3_6_7b (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U), A ∩ B = A := sorry\n\n\ntheorem Exercise_3_6_8a (U : Type) : ∀ (A : Set U),\n ∃! (B : Set U), ∀ (C : Set U), C \\ A = C ∩ B := sorry\n\n\ntheorem Exercise_3_6_10 (U : Type) (A : Set U)\n (h1 : ∀ (F : Set (Set U)), ⋃₀ F = A → A ∈ F) :\n ∃! (x : U), x ∈ A := by\n --Hint: Start like this:\n set F0 : Set (Set U) := {X : Set U | X ⊆ A ∧ ∃! (x : U), x ∈ X}\n --Now F0 is in the tactic state, with the definition above\n have h2 : ⋃₀ F0 = A := sorry\n \n **done::" + "text": "3.6. Existence and Uniqueness Proofs\nRecall that ∃! (x : U), P x means that there is exactly one x of type U such that P x is true. One way to deal with a given or goal of this form is to use the define tactic to rewrite it as the equivalent statement ∃ (x : U), P x ∧ ∀ (x_1 : U), P x_1 → x_1 = x. You can then apply techniques discussed previously in this chapter. However, there are also proof techniques, and corresponding Lean tactics, for working directly with givens and goals of this form.\nOften a goal of the form ∃! (x : U), P x is proven by using the following strategy. This is a slight rephrasing of the strategy presented in HTPI. The rephrasing is based on the fact that for any propositions A, B, and C, A ∧ B → C is equivalent to A → B → C (you can check this equivalence by making a truth table). The second of these statements is usually easier to work with in Lean than the first one, so we will often rephrase statements that have the form A ∧ B → C as A → B → C. To see why the second statement is easier to use, suppose that you have givens hA : A and hB : B. If you also have h : A → B → C, then h hA is a proof of B → C, and therefore h hA hB is a proof of C. If instead you had h' : (A ∧ B) → C, then to prove C you would have to write h' (And.intro hA hB), which is a bit less convenient.\nWith that preparation, here is our strategy for proving statements of the form ∃! (x : U), P x (HTPI pp. 156–157).\n\nTo prove a goal of the form ∃! (x : U), P x:\n\nProve ∃ (x : U), P x and ∀ (x_1 x_2 : U), P x_1 → P x_2 → x_1 = x_2. The first of these goals says that there exists an x such that P x is true, and the second says that it is unique. The two parts of the proof are therefore sometimes labeled existence and uniqueness.\n\nTo apply this strategy in a Lean proof, we use the tactic exists_unique. We’ll illustrate this with the theorem from Example 3.6.2 in HTPI. Here’s how that theorem and its proof are presented in HTPI (HTPI pp. 157–158):\n\nThere is a unique set \\(A\\) such that for every set \\(B\\), \\(A \\cup B = B\\).\n\n\nProof. Existence: Clearly \\(\\forall B(\\varnothing \\cup B = B)\\), so \\(\\varnothing\\) has the required property.\nUniqueness: Suppose \\(\\forall B(C \\cup B = B)\\) and \\(\\forall B(D \\cup B = B)\\). Applying the first of these assumptions to \\(D\\) we see that \\(C \\cup D = D\\), and applying the second to \\(C\\) we get \\(D \\cup C = C\\). But clearly \\(C \\cup D = D \\cup C\\), so \\(C = D\\).  □\n\nYou will notice that there are two statements in this proof that are described as “clearly” true. This brings up one of the difficulties with proving theorems in Lean: things that are clear to us are not necessarily clear to Lean! There are two ways to deal with such “clear” statements. The first is to see if the statement is in the library of theorems that Lean knows. The second is to prove the statement as a preliminary theorem that can then be used in the proof of our main theorem. We’ll take the second approach here, since proving these “clear” facts will give us more practice with Lean proofs, but later we’ll have more to say about searching for statements in Lean’s theorem library.\nThe first theorem we need says that for every set B, ∅ ∪ B = B, and it brings up a subtle issue: in Lean, the symbol ∅ is ambiguous! The reason for this is Lean’s strict typing rules. For each type U, there is an empty set of type Set U. There is, for example, the set of type Set Nat that contains no natural numbers, and also the set of type Set Real that contains no real numbers. To Lean, these are different sets, because they have different types. Which one does the symbol ∅ denote? The answer will be different in different contexts. Lean can often figure out from context which empty set you have in mind, but if it can’t, then you have to tell it explicitly by writing (∅ : Set U) rather than ∅. Fortunately, in our theorems Lean is able to figure out which empty set we have in mind.\nWith that preparation, we are ready to prove our first preliminary theorem. Since the goal is an equation between sets, our first step is to use the tactic apply Set.ext.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n **done::\n\n\ncase h\nU : Type\nB : Set U\n⊢ ∀ (x : U),\n>> x ∈ ∅ ∪ B ↔ x ∈ B\n\n\nBased on the form of the goal, our next two tactics should be fix x : U and apply Iff.intro. This leaves us with two goals, corresponding to the two directions of the biconditional, but we’ll focus first on just the left-to-right direction.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n\n **done::\n · -- (←)\n\n **done::\n done\n\n\ncase h.mp\nU : Type\nB : Set U\nx : U\n⊢ x ∈ ∅ ∪ B → x ∈ B\n\n\nOf course, our next step is to assume x ∈ ∅ ∪ B. To help us see how to move forward, we also write out the definition of this assumption.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n **done::\n · -- (←)\n\n **done::\n done\n\n\ncase h.mp\nU : Type\nB : Set U\nx : U\nh1 : x ∈ ∅ ∨ x ∈ B\n⊢ x ∈ B\n\n\nNow you should see a way to complete the proof: the statement x ∈ ∅ is false, so we should be able to apply the disjunctive syllogism rule to h1 to infer the goal x ∈ B. To carry out this plan, we’ll first have to prove x ∉ ∅. We’ll use the have tactic, and since there’s no obvious term-mode proof to justify it, we’ll try a tactic-mode proof.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n have h2 : x ∉ ∅ := by\n\n **done::\n **done::\n · -- (←)\n\n **done::\n done\n\n\nU : Type\nB : Set U\nx : U\nh1 : x ∈ ∅ ∨ x ∈ B\n⊢ x ∉ ∅\n\n\nThe goal for our “proof within a proof” is a negative statement, so proof by contradiction seems like a good start.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n have h2 : x ∉ ∅ := by\n by_contra h3\n **done::\n **done::\n · -- (←)\n\n **done::\n done\n\n\nU : Type\nB : Set U\nx : U\nh1 : x ∈ ∅ ∨ x ∈ B\nh3 : x ∈ ∅\n⊢ False\n\n\nTo see how to use the new assumption h3, we use the tactic define at h3. The definition Lean gives for the statement x ∈ ∅ is False. In other words, Lean knows that, by the definition of ∅, the statement x ∈ ∅ is false. Since False is our goal, this completes the inner proof, and we can return to the main proof.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n have h2 : x ∉ ∅ := by\n by_contra h3\n define at h3 --h3 : False\n show False from h3\n done\n **done::\n · -- (←)\n\n **done::\n done\n\n\ncase h.mp\nU : Type\nB : Set U\nx : U\nh1 : x ∈ ∅ ∨ x ∈ B\nh2 : x ∉ ∅\n⊢ x ∈ B\n\n\nNow that we have established the claim h2 : x ∉ ∅, we can apply the disjunctive syllogism rule to h1 and h2 to reach the goal. This completes the left-to-right direction of the biconditional proof, so we move on to the right-to-left direction.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n have h2 : x ∉ ∅ := by\n by_contra h3\n define at h3 --h3 : False\n show False from h3\n done\n disj_syll h1 h2 --h1 : x ∈ B\n show x ∈ B from h1\n done\n · -- (←)\n\n **done::\n done\n\n\ncase h.mpr\nU : Type\nB : Set U\nx : U\n⊢ x ∈ B → x ∈ ∅ ∪ B\n\n\nThis direction of the biconditional proof is easier: once we introduce the assumption h1 : x ∈ B, our goal will be x ∈ ∅ ∪ B, which means x ∈ ∅ ∨ x ∈ B, and we can prove it with the proof Or.inr h1.\n\n\ntheorem empty_union {U : Type} (B : Set U) :\n ∅ ∪ B = B := by\n apply Set.ext\n fix x : U\n apply Iff.intro\n · -- (→)\n assume h1 : x ∈ ∅ ∪ B\n define at h1\n have h2 : x ∉ ∅ := by\n by_contra h3\n define at h3 --h3 : False\n show False from h3\n done\n disj_syll h1 h2 --h1 : x ∈ B\n show x ∈ B from h1\n done\n · -- (←)\n assume h1 : x ∈ B\n show x ∈ ∅ ∪ B from Or.inr h1\n done\n done\n\n\nNo goals\n\n\nThe second fact that was called “clear” in the proof from Example 3.6.2 was the equation C ∪ D = D ∪ C. This looks like an instance of the commutativity of the union operator. Let’s prove that union is commutative.\n\n\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n \n **done::\n\n\nU : Type\nX Y : Set U\n⊢ X ∪ Y = Y ∪ X\n\n\nOnce again, we begin with apply Set.ext, which converts the goal to ∀ (x : U), x ∈ X ∪ Y ↔︎ x ∈ Y ∪ X, and then fix x : U.\n\n\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n apply Set.ext\n fix x : U\n **done::\n\n\ncase h\nU : Type\nX Y : Set U\nx : U\n⊢ x ∈ X ∪ Y ↔ x ∈ Y ∪ X\n\n\nTo understand the goal better, we’ll write out the definitions of the two sides of the biconditional. We use an extension of the define tactic that allows us to write out the definition of just a part of a given or the goal. The tactic define : x ∈ X ∪ Y will replace x ∈ X ∪ Y with its definition wherever it appears in the goal, and then define : x ∈ Y ∪ X will replace x ∈ Y ∪ X with its definition. (Note that define : X ∪ Y produces a result that is not as useful. It is usually best to define a complete statement rather than just a part of a statement. As usual, you can add at to do the replacements in a given rather than the goal.)\n\n\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n apply Set.ext\n fix x : U\n define : x ∈ X ∪ Y\n define : x ∈ Y ∪ X\n **done::\n\n\ncase h\nU : Type\nX Y : Set U\nx : U\n⊢ x ∈ X ∨ x ∈ Y ↔\n>> x ∈ Y ∨ x ∈ X\n\n\nBy the way, there are similar extensions of all of the tactics contrapos, demorgan, conditional, double_neg, bicond_neg, and quant_neg that allow you to use a logical equivalence to rewrite just a part of a formula. For example, if your goal is P ∧ (¬Q → R), then the tactic contrapos : ¬Q → R will change the goal to P ∧ (¬R → Q). If you have a given h : P → ¬∀ (x : U), Q x, then the tactic quant_neg : ¬∀ (x : U), Q x at h will change h to h : P → ∃ (x : U), ¬Q x.\nReturning to our proof of union_comm: the goal is now x ∈ X ∨ x ∈ Y ↔︎ x ∈ Y ∨ x ∈ X. You could prove this by a somewhat tedious application of the rules for biconditionals and disjunctions that were discussed in the last two sections, and we invite you to try it. But there is another possibility. The goal now has the form P ∨ Q ↔︎ Q ∨ P, which is the commutative law for “or” (see Section 1.2 of HTPI). We saw in a previous example that Lean has, in its library, the associative law for “and”; it is called and_assoc. Does Lean also know the commutative law for “or”?\nTry typing #check @or_ in VS Code. After a few seconds, a pop-up window appears with possible completions of this command. You will see or_assoc on the list, as well as or_comm. Select or_comm, and you’ll get this response: @or_comm : ∀ {a b : Prop}, a ∨ b ↔︎ b ∨ a. Since a and b are implicit arguments in this theorem, you can use or_comm to prove any statement of the form a ∨ b ↔︎ b ∨ a, where Lean will figure out for itself what a and b stand for. In particular, or_comm will prove our current goal.\n\n\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n apply Set.ext\n fix x : U\n define : x ∈ X ∪ Y\n define : x ∈ Y ∪ X\n show x ∈ X ∨ x ∈ Y ↔ x ∈ Y ∨ x ∈ X from or_comm\n done\n\n\nNo goals\n\n\nWe have now proven the two statements that were said to be “clearly” true in the proof in Example 3.6.2 of HTPI, and we have given them names. And that means that we can now use these theorems, in the file containing these proofs, to prove other theorems. As with any theorem in Lean’s library, you can use the #check command to confirm what these theorems say. If you type #check @empty_union and #check @union_comm, you will get these results:\n\n@empty_union : ∀ {U : Type} (B : Set U), ∅ ∪ B = B\n\n@union_comm : ∀ {U : Type} (X Y : Set U), X ∪ Y = Y ∪ X\n\nNotice that in both theorems we used curly braces when we introduced the type U, so it is an implicit argument and will not need to be specified when we apply the theorems. (Why did we decide to make U an implicit argument? Well, when we apply the theorem empty_union we will be specifying the set B, and when we apply union_comm we will be specifying the sets X and Y. Lean can figure out what U is by examining the types of these sets, so there is no need to specify it separately.)\nWe are finally ready to prove the theorem from Example 3.6.2. Here is the theorem:\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n\n **done::\n\n\nU : Type\n⊢ ∃! (A : Set U),\n>> ∀ (B : Set U),\n>> A ∪ B = B\n\n\nThe goal starts with ∃!, so we use our new tactic, exists_unique.\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n **done::\n\n\ncase Existence\nU : Type\n⊢ ∃ (A : Set U),\n>> ∀ (B : Set U),\n>> A ∪ B = B\ncase Uniqueness\nU : Type\n⊢ ∀ (A_1 A_2 : Set U),\n>> (∀ (B : Set U),\n>> A_1 ∪ B = B) →\n>> (∀ (B : Set U),\n>> A_2 ∪ B = B) →\n>> A_1 = A_2\n\n\nWe have two goals, labeled Existence and Uniqueness. Imitating the proof from HTPI, we prove existence by using the value ∅ for A.\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n · -- Existence\n apply Exists.intro ∅\n **done::\n · -- Uniqueness\n\n **done::\n done\n\n\ncase Existence\nU : Type\n⊢ ∀ (B : Set U),\n>> ∅ ∪ B = B\n\n\nThe goal is now precisely the statement of the theorem empty_union, so we can prove it by simply citing that theorem.\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n · -- Existence\n apply Exists.intro ∅\n show ∀ (B : Set U), ∅ ∪ B = B from empty_union\n done\n · -- Uniqueness\n\n **done::\n done\n\n\ncase Uniqueness\nU : Type\n⊢ ∀ (A_1 A_2 : Set U),\n>> (∀ (B : Set U),\n>> A_1 ∪ B = B) →\n>> (∀ (B : Set U),\n>> A_2 ∪ B = B) →\n>> A_1 = A_2\n\n\nFor the uniqueness proof, we begin by introducing arbitrary sets C and D and assuming ∀ (B : Set U), C ∪ B = B and ∀ (B : Set U), D ∪ B = B, exactly as in the HTPI proof.\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n · -- Existence\n apply Exists.intro ∅\n show ∀ (B : Set U), ∅ ∪ B = B from empty_union\n done\n · -- Uniqueness\n fix C : Set U; fix D : Set U\n assume h1 : ∀ (B : Set U), C ∪ B = B\n assume h2 : ∀ (B : Set U), D ∪ B = B\n **done::\n done\n\n\ncase Uniqueness\nU : Type\nC D : Set U\nh1 : ∀ (B : Set U),\n>> C ∪ B = B\nh2 : ∀ (B : Set U),\n>> D ∪ B = B\n⊢ C = D\n\n\nThe next step in HTPI was to apply h1 to D, and h2 to C. We do the same thing in Lean.\n\n\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n · -- Existence\n apply Exists.intro ∅\n show ∀ (B : Set U), ∅ ∪ B = B from empty_union\n done\n · -- Uniqueness\n fix C : Set U; fix D : Set U\n assume h1 : ∀ (B : Set U), C ∪ B = B\n assume h2 : ∀ (B : Set U), D ∪ B = B\n have h3 : C ∪ D = D := h1 D\n have h4 : D ∪ C = C := h2 C \n **done::\n done\n\n\ncase Uniqueness\nU : Type\nC D : Set U\nh1 : ∀ (B : Set U),\n>> C ∪ B = B\nh2 : ∀ (B : Set U),\n>> D ∪ B = B\nh3 : C ∪ D = D\nh4 : D ∪ C = C\n⊢ C = D\n\n\nThe goal can now be achieved by stringing together a sequence of equations: C = D ∪ C = C ∪ D = D. The first of these equations is h4.symm—that is, h4 read backwards; the second follows from the commutative law for union; and the third is h3. We saw in Section 3.4 that you can prove a biconditional statement in Lean by stringing together a sequence of biconditionals in a calculational proof. Exactly the same method applies to equations. Here is the complete proof of the theorem:\ntheorem Example_3_6_2 (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U),\n A ∪ B = B := by\n exists_unique\n · -- Existence\n apply Exists.intro ∅\n show ∀ (B : Set U), ∅ ∪ B = B from empty_union\n done\n · -- Uniqueness\n fix C : Set U; fix D : Set U\n assume h1 : ∀ (B : Set U), C ∪ B = B\n assume h2 : ∀ (B : Set U), D ∪ B = B\n have h3 : C ∪ D = D := h1 D\n have h4 : D ∪ C = C := h2 C \n show C = D from\n calc C\n _ = D ∪ C := h4.symm\n _ = C ∪ D := union_comm D C\n _ = D := h3\n done\n done\nSince the statement ∃! (x : U), P x asserts both the existence and the uniqueness of an object satisfying the predicate P, we have the following strategy for using a given of this form (HTPI p. 159):\n\n\nTo use a given of the form ∃! (x : U), P x:\n\nIntroduce a new variable, say a, into the proof to stand for an object of type U for which P a is true. You may also assert that ∀ (x_1 x_2 : U), P x_1 → P x_2 → x_1 = x2.\n\nIf you have a given h : ∃! (x : U), P x, then the tactic obtain (a : U) (h1 : P a) (h2 : ∀ (x_1 x_2 : U), P x_1 → P x_2 → x_1 = x_2) from h will introduce into the tactic state a new variable a of type U and new givens (h1 : P a) and (h2 : ∀ (x_1 x_2 : U), P x_1 → P x_2 → x_1 = x_2). To illustrate the use of this tactic, let’s prove the theorem in Example 3.6.4 of HTPI.\n\n\ntheorem Example_3_6_4 (U : Type) (A B C : Set U)\n (h1 : ∃ (x : U), x ∈ A ∩ B)\n (h2 : ∃ (x : U), x ∈ A ∩ C)\n (h3 : ∃! (x : U), x ∈ A) :\n ∃ (x : U), x ∈ B ∩ C := by\n\n **done::\n\n\nU : Type\nA B C : Set U\nh1 : ∃ (x : U),\n>> x ∈ A ∩ B\nh2 : ∃ (x : U),\n>> x ∈ A ∩ C\nh3 : ∃! (x : U), x ∈ A\n⊢ ∃ (x : U), x ∈ B ∩ C\n\n\nWe begin by applying the obtain tactic to h1, h2, and h3. In the case of h3, we get an extra given asserting the uniqueness of the element of A. We also write out the definitions of two of the new givens we obtain.\n\n\ntheorem Example_3_6_4 (U : Type) (A B C : Set U)\n (h1 : ∃ (x : U), x ∈ A ∩ B)\n (h2 : ∃ (x : U), x ∈ A ∩ C)\n (h3 : ∃! (x : U), x ∈ A) :\n ∃ (x : U), x ∈ B ∩ C := by\n obtain (b : U) (h4 : b ∈ A ∩ B) from h1\n obtain (c : U) (h5 : c ∈ A ∩ C) from h2\n obtain (a : U) (h6 : a ∈ A) (h7 : ∀ (y z : U),\n y ∈ A → z ∈ A → y = z) from h3\n define at h4; define at h5\n **done::\n\n\nU : Type\nA B C : Set U\nh1 : ∃ (x : U),\n>> x ∈ A ∩ B\nh2 : ∃ (x : U),\n>> x ∈ A ∩ C\nh3 : ∃! (x : U), x ∈ A\nb : U\nh4 : b ∈ A ∧ b ∈ B\nc : U\nh5 : c ∈ A ∧ c ∈ C\na : U\nh6 : a ∈ A\nh7 : ∀ (y z : U),\n>> y ∈ A → z ∈ A → y = z\n⊢ ∃ (x : U), x ∈ B ∩ C\n\n\nThe key to the rest of the proof is the observation that, by the uniqueness of the element of A, b must be equal to c. To justify this conclusion, note that by two applications of universal instantiation, h7 b c is a proof of b ∈ A → c ∈ A → b = c, and therefore by two applications of modus ponens, h7 b c h4.left h5.left is a proof of b = c.\n\n\ntheorem Example_3_6_4 (U : Type) (A B C : Set U)\n (h1 : ∃ (x : U), x ∈ A ∩ B)\n (h2 : ∃ (x : U), x ∈ A ∩ C)\n (h3 : ∃! (x : U), x ∈ A) :\n ∃ (x : U), x ∈ B ∩ C := by\n obtain (b : U) (h4 : b ∈ A ∩ B) from h1\n obtain (c : U) (h5 : c ∈ A ∩ C) from h2\n obtain (a : U) (h6 : a ∈ A) (h7 : ∀ (y z : U),\n y ∈ A → z ∈ A → y = z) from h3\n define at h4; define at h5\n have h8 : b = c := h7 b c h4.left h5.left\n **done::\n\n\nU : Type\nA B C : Set U\nh1 : ∃ (x : U),\n>> x ∈ A ∩ B\nh2 : ∃ (x : U),\n>> x ∈ A ∩ C\nh3 : ∃! (x : U), x ∈ A\nb : U\nh4 : b ∈ A ∧ b ∈ B\nc : U\nh5 : c ∈ A ∧ c ∈ C\na : U\nh6 : a ∈ A\nh7 : ∀ (y z : U),\n>> y ∈ A → z ∈ A → y = z\nh8 : b = c\n⊢ ∃ (x : U), x ∈ B ∩ C\n\n\nFor our next step, we will need a new tactic. Since we have h8 : b = c, we should be able to replace b with c anywhere it appears. The tactic that allows us to do this called rewrite. If h is a proof of any equation s = t, then rewrite [h] will replace all occurrences of s in the goal with t. Notice that it is the left side of the equation that is replaced with the right side; if you want the replacement to go in the other direction, so that t is replaced with s, you can use rewrite [←h]. (Alternatively, since h.symm is a proof of t = s, you can use rewrite [h.symm].) You can also apply the rewrite tactic to biconditional statements. If you have h : P ↔︎ Q, then rewrite [h] will cause all occurrences of P in the goal to be replaced with Q (and rewrite [←h] will replace Q with P).\nAs with many other tactics, you can add at h' to specify that the replacement should be done in the given h' rather than the goal. In our case, rewrite [h8] at h4 will change both occurrences of b in h4 to c.\n\n\ntheorem Example_3_6_4 (U : Type) (A B C : Set U)\n (h1 : ∃ (x : U), x ∈ A ∩ B)\n (h2 : ∃ (x : U), x ∈ A ∩ C)\n (h3 : ∃! (x : U), x ∈ A) :\n ∃ (x : U), x ∈ B ∩ C := by\n obtain (b : U) (h4 : b ∈ A ∩ B) from h1\n obtain (c : U) (h5 : c ∈ A ∩ C) from h2\n obtain (a : U) (h6 : a ∈ A) (h7 : ∀ (y z : U),\n y ∈ A → z ∈ A → y = z) from h3\n define at h4; define at h5\n have h8 : b = c := h7 b c h4.left h5.left\n rewrite [h8] at h4\n **done::\n\n\nU : Type\nA B C : Set U\nh1 : ∃ (x : U),\n>> x ∈ A ∩ B\nh2 : ∃ (x : U),\n>> x ∈ A ∩ C\nh3 : ∃! (x : U), x ∈ A\nb c : U\nh4 : c ∈ A ∧ c ∈ B\nh5 : c ∈ A ∧ c ∈ C\na : U\nh6 : a ∈ A\nh7 : ∀ (y z : U),\n>> y ∈ A → z ∈ A → y = z\nh8 : b = c\n⊢ ∃ (x : U), x ∈ B ∩ C\n\n\nNow the right sides of h4 and h5 tell us that we can prove the goal by plugging in c for x. Here is the complete proof:\ntheorem Example_3_6_4 (U : Type) (A B C : Set U)\n (h1 : ∃ (x : U), x ∈ A ∩ B)\n (h2 : ∃ (x : U), x ∈ A ∩ C)\n (h3 : ∃! (x : U), x ∈ A) :\n ∃ (x : U), x ∈ B ∩ C := by\n obtain (b : U) (h4 : b ∈ A ∩ B) from h1\n obtain (c : U) (h5 : c ∈ A ∩ C) from h2\n obtain (a : U) (h6 : a ∈ A) (h7 : ∀ (y z : U),\n y ∈ A → z ∈ A → y = z) from h3\n define at h4; define at h5\n have h8 : b = c := h7 b c h4.left h5.left\n rewrite [h8] at h4\n show ∃ (x : U), x ∈ B ∩ C from\n Exists.intro c (And.intro h4.right h5.right)\n done\nYou might want to compare the Lean proof above to the proof of this theorem as it appears in HTPI (HTPI p. 160):\n\nSuppose \\(A\\), \\(B\\), and \\(C\\) are sets, \\(A\\) and \\(B\\) are not disjoint, \\(A\\) and \\(C\\) are not disjoint, and \\(A\\) has exactly one element. Then \\(B\\) and \\(C\\) are not disjoint\n\n\nProof. Since \\(A\\) and \\(B\\) are not disjoint, we can let \\(b\\) be something such that \\(b \\in A\\) and \\(b \\in B\\). Similarly, since \\(A\\) and \\(C\\) are not disjoint, there is some object \\(c\\) such that \\(c \\in A\\) and \\(c \\in C\\). Since \\(A\\) has only one element, we must have \\(b = c\\). Thus \\(b = c \\in B \\cap C\\) and therefore \\(B\\) and \\(C\\) are not disjoint.  □\n\nBefore ending this section, we return to the question of how you can tell if a theorem you want to use is in Lean’s library. In an earlier example, we guessed that the commutative law for “or” might be in Lean’s library, and we were then able to use the #check command to confirm it. But there is another technique that we could have used: the tactic apply?, which asks Lean to search through its library of theorems to see if there is one that could be applied to prove the goal. Let’s return to our proof of the theorem union_comm, which started like this:\n\n\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n apply Set.ext\n fix x : U\n define : x ∈ X ∪ Y\n define : x ∈ Y ∪ X\n **done::\n\n\ncase h\nU : Type\nX Y : Set U\nx : U\n⊢ x ∈ X ∨ x ∈ Y ↔\n>> x ∈ Y ∨ x ∈ X\n\n\nNow let’s give the apply? tactic a try.\ntheorem union_comm {U : Type} (X Y : Set U) :\n X ∪ Y = Y ∪ X := by\n apply Set.ext\n fix x : U\n define : x ∈ X ∪ Y\n define : x ∈ Y ∪ X\n ++apply?::\n done\nIt takes a few seconds for Lean to search its library of theorems, but eventually a blue squiggle appears under apply?, indicating that the tactic has produced an answer. You will find the answer in the Infoview pane: Try this: exact Or.comm. The word exact is the name of a tactic that we have not discussed; it is a shorthand for show _ from, where the blank gets filled in with the goal. Thus, you can think of apply?’s answer as a shortened form of the tactic\n\nshow x ∈ X ∨ x ∈ Y ↔ x ∈ Y ∨ x ∈ X from Or.comm\n\nThe command #check @Or.comm will tell you that Or.comm is just an alternative name for the theorem or_comm. So the step suggested by the apply? tactic is essentially the same as the step we used earlier to complete the proof.\nUsually your proof will be more readable if you use the show tactic to state explicitly the goal that is being proven. This also gives Lean a chance to correct you if you have become confused about what goal you are proving. But sometimes—for example, if the goal is very long—it is convenient to use the exact tactic instead. You might think of exact as meaning “the following is a term-mode proof that is exactly what is needed to prove the goal.”\nThe apply? tactic has not only come up with a suggested tactic, it has applied that tactic, and the proof is now complete. You can confirm that the tactic completes the proof by replacing the line apply? in the proof with apply?’s suggested exact tactic.\nThe apply? tactic is somewhat unpredictable; sometimes it is able to find the right theorem in the library, and sometimes it isn’t. But it is always worth a try. There are also tools available on the internet for searching Lean’s library, including LeanSearch, Moogle, and Loogle. Another way to try to find theorems is to visit the documentation page for Lean’s mathematics library, which can be found at https://leanprover-community.github.io/mathlib4_docs/.\n\n\nExercises\n\ntheorem Exercise_3_4_15 (U : Type) (B : Set U) (F : Set (Set U)) :\n ⋃₀ {X : Set U | ∃ (A : Set U), A ∈ F ∧ X = A \\ B}\n ⊆ ⋃₀ (F \\ 𝒫 B) := sorry\n\n\ntheorem Exercise_3_5_9 (U : Type) (A B : Set U)\n (h1 : 𝒫 (A ∪ B) = 𝒫 A ∪ 𝒫 B) : A ⊆ B ∨ B ⊆ A := by\n --Hint: Start like this:\n have h2 : A ∪ B ∈ 𝒫 (A ∪ B) := sorry\n \n **done::\n\n\ntheorem Exercise_3_6_6b (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U), A ∪ B = A := sorry\n\n\ntheorem Exercise_3_6_7b (U : Type) :\n ∃! (A : Set U), ∀ (B : Set U), A ∩ B = A := sorry\n\n\ntheorem Exercise_3_6_8a (U : Type) : ∀ (A : Set U),\n ∃! (B : Set U), ∀ (C : Set U), C \\ A = C ∩ B := sorry\n\n\ntheorem Exercise_3_6_10 (U : Type) (A : Set U)\n (h1 : ∀ (F : Set (Set U)), ⋃₀ F = A → A ∈ F) :\n ∃! (x : U), x ∈ A := by\n --Hint: Start like this:\n set F0 : Set (Set U) := {X : Set U | X ⊆ A ∧ ∃! (x : U), x ∈ X}\n --Now F0 is in the tactic state, with the definition above\n have h2 : ⋃₀ F0 = A := sorry\n \n **done::" }, { "objectID": "Chap3.html#more-examples-of-proofs",