From 0deda3531f4d811efd8215e54b82cdfc5d3f38f2 Mon Sep 17 00:00:00 2001 From: djvelleman <110697570+djvelleman@users.noreply.github.com> Date: Sat, 28 Dec 2024 17:58:43 -0500 Subject: [PATCH] Suggest obtain for proof by cases --- Appendix.qmd | 4 ++-- docs/Appendix.html | 4 ++-- docs/How-To-Prove-It-With-Lean.pdf | Bin 2295515 -> 2295377 bytes docs/search.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Appendix.qmd b/Appendix.qmd index 413408f..92efb9c 100644 --- a/Appendix.qmd +++ b/Appendix.qmd @@ -67,7 +67,7 @@ We have mostly used these tactics to reexpress negative statements as more usefu * #### `by_cases on` -If you have `h : P ∨ Q`, then you can break your proof into cases by using the tactic `cases' h with hP hQ`. In case 1, `h : P ∨ Q` will be replaced by `hP : P`, and in case 2 it will be replaced by `hQ : Q`. In both cases, you have to prove the original goal. You may also want to learn about the tactics `cases` and `rcases`. +If you have `h : P ∨ Q`, then you can break your proof into cases by using the tactic `obtain hP | hQ := h`. In case 1, `h : P ∨ Q` will be replaced by `hP : P`, and in case 2 it will be replaced by `hQ : Q`. In both cases, you have to prove the original goal. You may also want to learn about the tactics `cases` and `rcases`. * #### `by_induc`, `by_strong_induc` @@ -136,7 +136,7 @@ If your goal is `∃! (x : U), P x` and you think that `a` is the unique value o * #### `obtain` -There is an `obtain` tactic in standard Lean, but it is slightly different from the one used in this book. If you have `h : ∃ (x : U), P x`, then the tactic `obtain ⟨u, h1⟩ := h` will introduce both `u : U` and `h1 : P u` into the tactic state. Note that `u` and `h1` must be enclosed in angle brackets, `⟨ ⟩`. To enter those brackets, type `\<` and `\>`. +If you have `h : ∃ (x : U), P x`, then the tactic `obtain ⟨u, h1⟩ := h` will introduce both `u : U` and `h1 : P u` into the tactic state. Note that `u` and `h1` must be enclosed in angle brackets, `⟨ ⟩`. To enter those brackets, type `\<` and `\>`. If you have `h : ∃! (x : U), P x`, then `obtain ⟨u, h1, h2⟩ := h` will also introduce `u : U` and `h1 : P u` into the tactic state. In addition, it will introduce `h2` as an identifier for a statement that is equivalent to `∀ (y : U), P y → y = u`. (Unfortunately, the statement introduced is more complicated.) diff --git a/docs/Appendix.html b/docs/Appendix.html index f702c1b..a56817d 100644 --- a/docs/Appendix.html +++ b/docs/Appendix.html @@ -428,7 +428,7 @@
by_cases on
If you have h : P ∨ Q
, then you can break your proof into cases by using the tactic cases' h with hP hQ
. In case 1, h : P ∨ Q
will be replaced by hP : P
, and in case 2 it will be replaced by hQ : Q
. In both cases, you have to prove the original goal. You may also want to learn about the tactics cases
and rcases
.
If you have h : P ∨ Q
, then you can break your proof into cases by using the tactic obtain hP | hQ := h
. In case 1, h : P ∨ Q
will be replaced by hP : P
, and in case 2 it will be replaced by hQ : Q
. In both cases, you have to prove the original goal. You may also want to learn about the tactics cases
and rcases
.
by_induc
, by_strong_induc
obtain
There is an obtain
tactic in standard Lean, but it is slightly different from the one used in this book. If you have h : ∃ (x : U), P x
, then the tactic obtain ⟨u, h1⟩ := h
will introduce both u : U
and h1 : P u
into the tactic state. Note that u
and h1
must be enclosed in angle brackets, ⟨ ⟩
. To enter those brackets, type \<
and \>
.
If you have h : ∃ (x : U), P x
, then the tactic obtain ⟨u, h1⟩ := h
will introduce both u : U
and h1 : P u
into the tactic state. Note that u
and h1
must be enclosed in angle brackets, ⟨ ⟩
. To enter those brackets, type \<
and \>
.
If you have h : ∃! (x : U), P x
, then obtain ⟨u, h1, h2⟩ := h
will also introduce u : U
and h1 : P u
into the tactic state. In addition, it will introduce h2
as an identifier for a statement that is equivalent to ∀ (y : U), P y → y = u
. (Unfortunately, the statement introduced is more complicated.)
You may also find the theorems ExistsUnique.exists
and ExistsUnique.unique
useful:
rQ+iWtiZQGpKwr$(iBzY&v8{3-Lwl%SB+qRQ4|M|{Z=l|}y*V;Gxd8(_c zs=L>tqd;e)qCkHGL4iMjU_fvn1P~Gk1%w8|0AYb}KzJYm5D|z3L99GPQI%$*xP3+S_uOs{=Hp17&Wi-!7^P7Y)Go$> #+*MN)hb{nLau5K{ J@Y zb}Cm;(Fop5#W^(*jmk0f%6yxN>7j1wYaeX;LvbB4y!^4c`@?~TCL=K)ILT#Rdu1mI zvJW X70 zzEg$(bi;_svnrC1Fp|f_Pd~?%4xvcq*FGex3pq?p;*%Tm+0|9SQeqpBc_nBo&(_H+ ztL<3ierF7`SG|i*$zZG2aDKD%40?{$DoMgi6yGrg< &c{rI35%6Y^AU=V+y04;ZY=;3iE_DMRo*(W#VgsM1uL+r^&LyH{AT={9 zQQ>=a?8uQcS;!Xj;|j3V>Lkvm>w6t?zk89F6zb##%H%iiJ3<}(jLTx(R@sY7@4Pxy z#deBcnxhQ&)bvb!6aUqTsARNhYb)Nf)ypWL=}D2BnDHjNsBb%t8~vvB*nOwvgeP*y zOZaP`IEt49Oieus6uV?wR2c)hd`Yfn$p@_nE}>Z2NX=4I*BFrK9QQj6&%njYm; ij`)00Q80kD|W~EZ >hC-}2{93?U{vtS5FcDGVTgeAj>jp$zTW-Up4ewOCOL z{3Ru2*uh6Akr_7^Btd&L4Q7t2u0S3ezwfe<9~t ~ zjc4q;_p?q Su z#`S0YyaoU;8QJ=K9b!tnnSvLd{d=Suy1GQ`_+BjRXST&}F6*^F*Vr-PP=z-miFtia zPB1yU?HS $|A|~FEb3Ty@eo?&KCS}xnqk_ z&pjQ l%~1vGsco**N-MK7dYTd1P5%~a$C2h4i;SnHWXdq~F$>k@*;Z5aL#aY2 zl+jXbz#Jo@pXA;Kc{TkiyAONftR_rS6Q(nI2=wt*q!aQ1>5Vnvj{lF`XWb}gSm}Af z9!o&E`~*R1p}QQ7WwU-k&z<5n&8YAtVmBrxXurwBEma?>QE7nDFRh2X+B<4CjlkjA z^QUSO1F$1F!s U)hk+Cl3xZG z3FJpts*}tY=rb64sE*1fywk%&0u48>St*ARWmkn$^053G^noQdZR&VbdwtKiXw$aM z*-c0I^i9gy93Ik7R~4&HCdRnT^)*;>znH|~dlopO_~hv_x)EW_qLT9<&mUA{pUns@ z7GFdc#ERH}7w*=j*nKIb&(c{upR5PuCuQGIrdKY<-qmY#pKW`dQx+|4Y$y?=uocT( zB}FeBgnTm9F9@d@r1H@HvQ`;xPkH0`39UQquZEH8`376&C|{|g-#$sbc&hx^LUN5d zKMC_*3FkG1r&$+N4#K~yXV-XshXhY^ J-Nd_>|LTn< zg?1@0LJT7vka{Shchkq|-xx7(iEVXDXk6_SY$;^kSxlydu;I;66R59Ppi3UzysWR+ zN4# }ATuFa97jrL#hwUkhu@3;IQXQEC|px^ {{bO-Q zV(on*+UWsfa#V)2=*$CnX+5MM^0~SC(duFWGJ+}hAq-p3nmkNSCpgTS h6~f(U|Bv zev4fhu*PZSBN)g2 T`%At!8bHdb(il=#<>r_G`LQ3Kwrt<6{&k)XH(LtAyyuWPI? zrQxQDu7*CIkm?P -$6+J-mjf|$&>jT8r z_V-NW_mbn~Md>v vcvCq?(!cN7x+gQDewZOtIlpTwD9>4c;I$z>+cuk9~D|f?&-yWj& zg*4aZcT6MI^gR`Zf11Nawqdx<79M%m1-gGEdpS!2`PIjcXEES?{u|_XqOoFX{2e}8 z3sg6;CLDl+jq`tN*2#aG^(QaN);+p+0Gr1vV|2YxAXy#QBw}5f9Hr&pk1c?(zFu?3 zdY1GQh{(5~Ov`#|ds}yTz2Z0D|JSU?f;X2~AMftZ@1f80*WYIUG;7g6&3gTew&Tii z3hsYPnZ4x*`1NzhAQ}LZ{l#cGva<6R8}JkI>Lqe|)bQ);>v*1M8!7eeDpfkbZA|ut z8-;?A2?lRUOpjUwX26V?7i^iX`Z5|$(`TD;Dls^o!4?Z`*X_x}d52Dyg^bE`@5set zOIcRfLNLCjf)CBn>F_k32fGxm7CqI8J$vlkXlERnUz4CV9|QmaJ9`R(_Cp52?6W;W z>S@a=Kp}RFheJlckDI ;a4+g`bQOiqJ!c5sDYgNc% zQ(b&Ri<<9t^$_s;$zpa3A5~*POlSyI7qMNr(G&G|5a%ipIklPc6ZH8xW%EKuJ$Y2K z6cUBoiSnog45mGXx5lq3hBq S-plomdJN<;g@-BiT7T1=7gY< zYGrHRpu1mp8^)BmP$~5O=)pc;HKpNukNs92GSPYORpYkanld>6v7(k@QgCJF*;NNe z+%q y!{lOI3gcc#nVco5mf zc5Z=r<-$ASA28ma?jiK*2@jY3T(;VC4;P}s-Hs2>zFa0ht5e452~m{QBh9X}p`ai$ z?MJ#|?X3ndmHzZJVTQ)3Z%O<;f!qKMg8n^i3C53d40~kk9G^$AZ{Rt>MhXXsc_h)X z@umk@o3gy6948eID&|08-_UXTO}OiVSk$>IWd^zG2bP)0w~FkP^qRm4wzc@Qw5%1{ zJr&Wi+av%RL&_uImJ|c!Ccd8j*B|opOdzzoD(gL=b7D-qXUfez;O3NK;^W)IcYA6d zYN#J{8+8@MFl+id_>N(GC+$00glKF>G6Dcl2NC21?_dEgN9}0sB1IYPe@xv)#r$QM z5^?uuG^qb|4gyah2= c~F|W1)t_<_
qQ~j`SnpUo8?@83WJiYhsrSs)%R_| 89hd)JPiqMAz3nzc)~@6>`XI>q ztzP2GZ*jAh!k953Csh}RcP46!ptS-%+bz%GxS`>H&WwW8g*sMyn@LVlCxS&Rf^rYi z;P!t~(T>;V9;aVc(nzkA^9qYn( t;7A=akKEqRnOQ13oj1Nmy} <-fFJ8^ZZI z=-GAK)GQe=DBYG$Y+8z%n<4=?vbI%e{bi%hETIhMM^PIlyscsC0%3~CUkH2%%O1U9 z6&@)ok^3ypF6Kl&HGlNrhF;4am$AoU?9D=APn(%T5Sd8QBtZ~qzCn6BB|j#rmmHbJ z{)Q>paI~_Na|_0*2teo PtnkdxX`FNPDZJ@{<@Wmc#(mMPqB#$^2C< zkCC$Uo&OalotwRf4(0VF!FJ3ni6MzwMdFag{EiQdiruE4sb$KOz30u3u%84Qi3*<= zY2TFTr!ejZpQNj`ChIbZUiQpQwNDxjbLe232Dn%XWKrF^aV?GWrH4|yt5(#M;Pnry z1x7 =DR~ z;? ikZXC4;A2lZcRhT@G4oG=FB>z_O0-GC{O0g4-z4A^I4% zdC7QXNuc-8m|Mh&k6c29NDq%us2TYuEkJaZokD=pXI!u%H3O)w$TH)_9JNdYL<^7? zsCF-ys=#=RVkf{zep w@QxgER 1rJ zZ_n)GFG;HZ6e2*~xo;@6$Sor^K@%1w8tWSI{?5o2d^QElfnrHy>~woJb`ySbgu>PG zTUIvkCsY`4ocw&|qwV)B>7j_CfcAG4%?ps;NWykwDZ`zk{=WGE73|*~?4JNZVH-+M ztzGINt7tn-!C*G}vG68~*=TKwmekxfm>6_poD3n&5?-@0FzpW`5<9XIW&>kE@idX0 zU6&+>9_<6@P}a&&EU%Qgg}AR$9xWA`<>eBfH>BG#999*41YRBuEAcJg-^3f~q$8S( zeq8;IO>7nkE(i-)iEA)!>}sSl<*c`w_6OIL5%=E@-Ga=YhjRxKs_k4FB%lp0W{N(` zYBVe+Dq+-5DetaVUPq2vKlm*)B@|J?UHZh76$Jz8yDTVh_q6VN#Q1zYuN*F^uhFq` zoVHE9y3#!AFS~&gVgtj}0Y+oE&@Qq&zpqg35DXI5U;&Tp7$6J(Bq`I^Op6)>_tGIc zhD|z`l&>F*ovUXS%CKs)9utzxG;RjuV}9lDU*e#7?*-GV$1YFM!o}vnWx;Q?Ng9VI zly88X#p9(LFu%{asGj6n2UNqBNZlE-T7O}rhBW^i8LQ8kdFI!A7N4Np^D~kCzl&Pb zrtHo6n-F6*(K{Te3r2+oJys-BH8Um$AQnZvv;iK6x!VE{{Vt}yH*zF!`!RzSTj+%M z3Y%X<`H-oA^UsBzkE?AqI`3Ura|g43Noi`@9X@=E(*kj8BtYJ=fEiin`U93ox2oI- z-h)g${!Y1Z)}dpucrhD>i$(=3EKc<6GjQ7uDKbe4X(;;`XT4$4p~Ln}c+%j#dE;G} z;Jo dCP3qRln@rR=oCqOujxp zD!kg_e7~^(T(&C$o+fkmtlHq`try0c?^3I&{S4Wth#2;6wadi?1ja`=7XjN @{g+?+FL`zq9y_-1U| ztYH@#VHZaz^ k` 9_{abB=R$hJhOsHDrt zOB&GUN$rJNx+J$rzI!xc?( b5p2P++0ZZt{HzM=+(0dcIS>oOawR NF5#9l|I$V2>1fg@r?rePpKMANvHuV|J%;#Co4zpF{1}> ze`5G;nBz3cCsK#yE(S6;bVU7p-zuBM7}6;hnCRK&*fxf2&b^^%YdhZ9DBd^e*y1SB zW&PUJKhtle2vu#k?t65(K8x!N-Y>%`(ykX= |#Fr_>V_2($ZdzYN@wYM9K=68yMo-wq29q$#(mJ&Bfexg0b5DblAUrF#^6ULTkI z$hTA8$8}!>qCU@_@_5;Y57uq#BFQ>_t#^mIS~-lGHEIo9svIn)`n5Kz6SS9ehs^rU z2}YV3JWZRRXM6(g8~)U`h<>)5g&dxi8v+E<4^Bx{P)5U-;#sk1GKFNR$ryv+o%1PN zAxVSK;(M*I%&Bt`oVnFdq0*DM;o>*LM;wad%oX{tCGiQPs1(>J6gnn|4-=t~MuVUi zEx@Fk>SfuJDlBZJ2rc6H!fxVJQ@g>P6@Uf45W6GcPD!f0_>v0bNMnphq*ElrqJS7O zs=oMmR($h6IfKfA*f5d`Kr+!ohM2eCQe1bWSt#oDTw^1aw{dxcd%ZS_d|vTB(yO!9 zr^2BMOd=(NL82vCWxq;GL`!xH33w1b_X-nz5wlYKo!w%w^46%q%A*@|*XG<~#(tqB zw~P@>nmxOaCy=@MaHE#psV!IBkpl3wZ7!V;#2*rh&iTGNr5vG-k5heO1-2;!z34Uj zKMP`>&TH6lSAC;r@+yp%>9ds6O-6DMG-b&*9B&$nZN^(wGZeH>bJYvkLSd KPd gH1mR5-I=}^M8ReN!NB=2w7tLk?x752wdNj6O_!!tfQ6OIy|v^ zd~OY6AR+D$>ib>h7bFyI?e4|YVJ1#=pGn7B^JHn?wy5UiMk%7aF4EP8e#lr^7cYlB zGF7=lx$?-jW=TC#-(Jy$;dr9z?%U&VPR{gpj^S22Ky`I!_S1u2F!Std-wzE>y#s9M zdU>l%%&TKff4YFzeqFQ#Gg7GR#y-N2FtnmwcWHCWFLT--p$RYJsq{)9B1>>p|Lto& zOOLmldc>88Q9^%l@#-H9;Eg?<1d6lqx9QjwQz7Z;etXuiJG_fNw%}XbzgV-z=F?B{ zV`Revk_wf6Fx1JBd_*DppQ7q`XCU%d-HzuX_$%SMmgE6>N&2$_=siV{4$#IWrA#7N z;iR9Sr0PYrfm0adI)o&%q)EaHsd*E8!qnrX9HQwc3E9$+%9LWM6SyLlG6K<<4FNL= ztQeDOZs2(nu-3Hs0?|`qCi(OvITDc+#d&CsDbjfLwidP{4#8phr%ieH8eul7b>yP7 zEM-fqEOf7F#mVq;6EflpMrBf}K}Do=K+JKq%1#KkKE^}8wyvKZkM5*j=QW9aHIWyC zom}^Q+fQBX@coVcUllu8zqWdd-CK|(w;vl)zdykk6rer+)A?Mhf2_pu-;I~I?PrD$ zxqihEaEOXmT&GJCT4GabXIi_e-JBD<{1J_|@h}7E8K^li3IHcuPcV?y_!y)$Ot(P( z3cW06K-il}Tbpa^Scw?Oj)}hQlUk5xXKr&`OzApiG8q4=vXg!>+|GRTdA+%7KV6%f zAmjwNb^eige`%u=p|IiExw%?P3`^5|eexkJ)lV0tI&xKn2C&&q1$9MqR9-!~308Hj zXV{s>>|MFmxznx7Zs(Lz{0#dmt9r}`Y%i}k-AKh)ox>l^gxXJx@MaMxlPvyfVZxYr z3Oy@noWH&C<|71`PUF$xQpu%;6wigHGDQYlprc*v!6*GAOacbu)Zefx0ei^5P|=NJ zrGwC|LZI!2b=bn1n4LSRkcYu2@EsxdyyQkWgb~C0wthnEpqjC@d;F5Cq=2f!q*N1O z5LUt@%LZbq|IVe5IHYJC0ZHPTlM5s4ErG2KC8T*tI*ABWoCHRZ4yfLcDk}z`*-!$^ z&>IL?Be;L?FwBw#f3Tt5CE|l7r=H|kWXV;+6U_f1@?qm~^(ajUv6%!4NIgj1X9?-M z4Lu)vSh{_+{CLMd`zdM6qRySc*i`_Y)X}>OlP+O}`?-FgiDf%1?Dh@Cxi` v=XUdGW}CYhs(C 82ddU)73ghRZ z4XPwh3uPGEY@?6ao#W=BC~|f4 zEAHJHPl|kE@t+BZT2Mb)h#VwECiV54OP$>s*sMQ|brZboS`D$Yo!YyqU3<^^bjR*4 zBl{UaO%2P0RlvQ;>4sw?-^^hNiy5yQtd-<|0h)ef$d^pboBg0^U-IxWS|q8AiIuI9 zO-`*%ni3dClOC7OC=9SwbeNxqbjK+bBcP5(85f2zk%J`{_RaoLcSIJ(E{tP4C0sfB z04-vPV_PkJqT|4Kh@vKg%toPlHd^F0#zzw;mL(%pI=-7A#uNe5b>P&;eqt(j!*eL- zR=g9rhqe=GBL9-#ip7<;V-(Yq&v9{l{XAUc#w(3J{poarE=OX@D*wFgbY9Wqu=0U% zW6CG5XM1v;0{_XZ{(1~0gF27&pH*9E_peu6|JAD`L)!`= yzfQ+`CfmUq#C&{9`lD3D3bPk3{J0%^5Wd)ZwY-DZP*i z+bFIyRZB3O$Yxtg%J21uM{MA$EPwY>7s~Gade8Ca*Vpy9|B0 %~LtMD{ffFg@`gsIvPaj;A=!WIqk5; J_A76kX` z0XD_dZnR{7tbzCk!~;x!nVxF;xRa%0a#@kXF-MLq_3>t1#OR!#1#LW>js}4G7gOWa z-Yj;(&}mq%DB0AWZ!p11tW*|dOtjPk2NGHU`+tEVc|B&089C(IJ3_CyTw^8Xk{ngU z y$gVYYrFN$@_EsHZ&78jz#NyWKLqcys%( zhm<;94)FQK&=%w2ADgyZGbL$q6us`B1qIk>d{=GMVaT`Q4q-pe`;O>N-#py} rD173980!8w_4No|y$W zq>QiM-wMt~^`ox#0ZfKy=DFx*LO3IVE^%Pmq}Aaj5HdozYQOPI!7;>OxzP^PZsc~- z<+Q=kGH}x|3?D=N ydDQPjJ u z2$*29Bb9O5k-Yke6o{BQmdW6eK#F9N*pS0wA6VHpE&j=?@=)!>*oI JPVj)@`ix3cooccb|9C1aWnVGD(BCfG*;q~Nd$*D!7h zD}W8YSAHs!-YYMMg~WFEr`g%r>F0E+hHw6zm!}N*o@VWLnM;QMz_cK*{O}32?oo34 zKQxDtdf-e#1 vNd$N@!^px;7A=|s& zqtq9$ZD{#!jq>KGy?%l+klT0t=O@uzN!S6*-2Z#sGAQXvp@X7lX=`S>{hWs UspS$K(6 ;S?YI?3Y$NA)F8^pV7qaWW@3LWvgM)_pTpDw zz(%&V7|Ts(5VN#4JDwC@RY;_CVAfM&6a^+>T#ccJ!E`VT6&a!!rW6K`mL)Vv2;+Gz z0CG^B!j4A1CJ)AD*l2qY0+b2;uU6UN-=m V|1E7f9AB-tszZ z>=~Gk)7FSmf=J(BU2sB4{{c9&2MGs2**1t7dHA0?@!r4|kJivd&Rc|yaX+^i&z?WH z0A>KKh~6$s+Gau_NIzV@J3hMp7%rGIbi}_v6?lP>S@Y7s!=E{D#lh+Eo(3m{#l*&3 zq(002@~^XeOMDdiczeHb^#{DK5UEd_VbeFCQDPpeVo-_+Mb6EOg5|}W*Lwrt$sU^Q zFh*Hpk-xdr2_^1{neg%$Z+LS2a6pR_HSb&)aevKiG<6FjxsV5>9yjZSZMC8@TMhLx zdqXh66(=WFW@uampnvZz6zS`HjZe^*tV{p%5lOmh+7YI*D1$4g*5))WjS? V;o`&ISq?hyzEKJH}am-Ax@i!i4Nf1Ly>EJ0U5$LA$;(eVIZ*nv4XI4Qn zAJ5=f;#w5$Q>bnNO>>WS4rhF@)6zShro|<7_a;Ps{y7SLu7!