From ee25a9a1d87ca133674dcfd9ede82c421b2d776f Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 9 Nov 2026 13:16:22 +0000 Subject: [PATCH 1/4] proofs: EchoSearchExample PWG-3 receipt + Rocq and Lean recheck legs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Takes this thread's theory theorem (EchoSearchExample, #353) through PROOF-POLICY §2, §5 and §8. - Agda source: cold check of every CI root at ccec4d7 with the pinned toolchain (Agda 2.7.0.1, stdlib 8326c74, absolute-zero f486c29), plus the five static guards and the cubical island. All exited 0. The log is docs/receipts/agda-cold-2026-11-09.log.gz. This is the PWG-3 receipt, with its import cone recorded and a postulate count of 0. - Rocq leg (proofs/rocq/EchoSearchExample.v, Coq 8.18.0) and Lean leg (proofs/lean4/EchoSearchExample.lean, Lean 4.30.0, core only, no Mathlib): hand re-proofs of every headline. Each restates the Agda definitions it mirrors and includes the downward-scanning decider, so `decided = yes search-double-6` holds by computation. Print Assumptions and #print axioms report no axioms. Planted mutants (double, budget 3) make both legs fail. - proofs/RECHECK-EchoSearchExample.adoc: the §2.2 record, with the statements side by side, residual differences (identity type and K, Prop-valued order, Dec shape, universes, scope), receipts, the §6 toolchain deviation and revalidation triggers. - The legs are kernel-checked but BRIDGE-PENDING until the owner reviews the comparison. Under estate doctrine an agent's equivalence claim is provisional. The computed grade is therefore PWG-3; it becomes PWG-2ii on acceptance. - CI: rocq-recheck and lean-recheck jobs in agda.yml run scripts/setup-recheck.sh (versions asserted, Lean archive checksum-pinned) and scripts/check-recheck.sh (fails on any axiom). - PROOF-STATUS: a per-theorem PWG table, a census line and the 2026-11-09 cold-check record. Bare "Grade 3" becomes "PWG-3" (§8 prefix rule). proof-witness-audit.adoc gets a note that §8 supersedes the brief's scale; the audit text itself is unchanged. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01P4yFkxW5Heb8p2YW7ZYs9F --- .github/workflows/agda.yml | 32 +++ PROOF-STATUS.adoc | 49 ++++- docs/proof-witness-audit.adoc | 15 ++ docs/receipts/agda-cold-2026-11-09.log.gz | Bin 0 -> 119394 bytes proofs/RECHECK-EchoSearchExample.adoc | 225 ++++++++++++++++++++++ proofs/lean4/EchoSearchExample.lean | 176 +++++++++++++++++ proofs/rocq/EchoSearchExample.v | 205 ++++++++++++++++++++ scripts/check-recheck.sh | 43 +++++ scripts/setup-recheck.sh | 58 ++++++ 9 files changed, 801 insertions(+), 2 deletions(-) create mode 100644 docs/receipts/agda-cold-2026-11-09.log.gz create mode 100644 proofs/RECHECK-EchoSearchExample.adoc create mode 100644 proofs/lean4/EchoSearchExample.lean create mode 100644 proofs/rocq/EchoSearchExample.v create mode 100755 scripts/check-recheck.sh create mode 100755 scripts/setup-recheck.sh diff --git a/.github/workflows/agda.yml b/.github/workflows/agda.yml index 3e10706..aba43b6 100644 --- a/.github/workflows/agda.yml +++ b/.github/workflows/agda.yml @@ -115,3 +115,35 @@ jobs: run: bash scripts/setup-agda.sh - name: Typecheck isolated full-Cubical profile run: agda --no-libraries -i "$AGDA_STDLIB" -i "$ABSOLUTE_ZERO_AGDA" --ignore-interfaces --safe --cubical -i proofs/agda proofs/agda/EchoImageFactorizationPropCubical.agda + + # PROOF-POLICY section 2 recheck legs for EchoSearchExample: hand + # re-proofs in Rocq and in Lean core (no Mathlib). Each fails on any axiom. + # Toolchains are version-asserted (Lean archive checksum-pinned); the + # section 6 deviation is recorded in proofs/RECHECK-EchoSearchExample.adoc. + rocq-recheck: + name: Rocq recheck leg + runs-on: ubuntu-24.04 + timeout-minutes: 15 + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - name: Install version-asserted Rocq (Coq 8.18.0) + run: bash scripts/setup-recheck.sh rocq + - name: Check the Rocq leg (no axioms) + run: bash scripts/check-recheck.sh rocq + + lean-recheck: + name: Lean recheck leg + runs-on: ubuntu-24.04 + timeout-minutes: 15 + steps: + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - name: Install checksum-pinned Lean 4.30.0 + run: bash scripts/setup-recheck.sh lean + - name: Check the Lean leg (no axioms) + run: bash scripts/check-recheck.sh lean diff --git a/PROOF-STATUS.adoc b/PROOF-STATUS.adoc index 33af9e8..b5ca506 100644 --- a/PROOF-STATUS.adoc +++ b/PROOF-STATUS.adoc @@ -27,6 +27,51 @@ below. The ordinal lane, including its order-type *Fidelity* scaffold, moved to https://github.com/hyperpolymath/ordinal-notation[hyperpolymath/ordinal-notation] on 2026-10-20. +== Proof Witness Grades (PROOF-POLICY §8) + +Grades are computed per theorem from receipts and §2.2 records. They are +never assigned to the repository as a whole. + +[cols="2,1,4",options="header"] +|=== +|Theorem |PWG |Record + +|`EchoSearchExample` headlines (`search-double-6-decided`, `search-as-echo`, `search-as-cost`, `search-as-dec`, `search-as-feasible`) +|`PWG-3`, no axioms +|link:proofs/RECHECK-EchoSearchExample.adoc[`proofs/RECHECK-EchoSearchExample.adoc`]. +The Agda receipt is the cold check at `ccec4d7` (2026-11-09). The Rocq and +Lean legs are re-proved and kernel-checked with no axioms, but stay +`BRIDGE-PENDING` until the owner reviews the statement comparison. Once +accepted, the computed grade is `PWG-2ii`. +|=== + +Census: 1 theorem record is graded (`PWG-3`). Every other theorem in this +repository is `ungraded`, because no per-theorem record exists for it yet. +Agda results for the whole closure are dated checks, not grades. + +== Agda cold check (2026-11-09) + +At source commit `ccec4d79866e3e433ae2268d2f8b7899396cb34f`, with a clean +tree and the CI toolchain from `scripts/setup-agda.sh` (Agda 2.7.0.1; +release archive sha256 +`975b515a14877ab6bce5bfc641e16c4a3ee52ca5d7f846577dee80aa2145db8a`; stdlib +`8326c74`; absolute-zero `f486c29`), these all exited 0: + +* the five static guards (kernel, experimental aggregate wiring and + controls, invocation lint, foundation guardrail); +* the seven `--safe --without-K --cubical-compatible` roots, cold + (`--ignore-interfaces`): `All`, `Smoke`, `AuditSmoke`, + `characteristic/All`, `examples/All`, `experimental/echo-additive/All` + and `NarrowingSmoke`; +* the `--safe --cubical` island. + +The only warnings were the known `UnsupportedIndexedMatch` ones (triage +remains open; see below). The log is +`docs/receipts/agda-cold-2026-11-09.log.gz`; the uncompressed log has +sha256 `7f9de4d1f874a0f249eadeb3fc675be346f437cb28cb31fd3e6db1b635e54eb0`. +This is a local run of a clean commit with the pinned toolchain. It is not +a GitHub Actions receipt. + == CI coverage audit (2026-11-01) * `experimental/echo-additive/` has a separate aggregate entrypoint, but @@ -43,7 +88,7 @@ on 2026-10-20. other three) in warm and cold jobs under the standard profile. A local cold check now succeeds as detailed below; the changed workflow has not yet had a successful CI run. The exhibit remains outside the shipped - `All.agda` closure and is not a clean-commit Grade 3 receipt. + `All.agda` closure and is not a clean-commit `PWG-3` receipt. * On 2026-11-01 the local cold checks and static guards passed with Agda `2.7.0.1-cf6e2d9` and stdlib v2.3. The compiler is not the latest upstream stable; CI's compiler remains unpinned (#322). Full provenance, @@ -110,7 +155,7 @@ with an unsolved hole was rejected (exit 42); it is not a theorem check. * Complete combined stdout/stderr is preserved in `docs/receipts/agda-local-2026-11-01.log.gz` (uncompressed SHA-256 `617263834bee297a9f8e092c32e7cd9934af940f1e9fa7f9e19663b44cde99ad`). - No new clean-commit Grade 3 promotion is asserted on this basis. + No new clean-commit `PWG-3` promotion is asserted on this basis. In separate copied proof trees, replacing `fin-injective refl = refl` in experimental `Grade` with a hole caused its aggregate to exit 42, while diff --git a/docs/proof-witness-audit.adoc b/docs/proof-witness-audit.adoc index d8368b3..9f931b1 100644 --- a/docs/proof-witness-audit.adoc +++ b/docs/proof-witness-audit.adoc @@ -1,6 +1,21 @@ // SPDX-License-Identifier: MPL-2.0 = Proof-witness audit: Echo Types and Mathesis +[NOTE] +==== +*Superseded scale (2026-11-09).* This dated audit uses the Mathesis brief's +grade definitions. PROOF-POLICY §8, by owner ruling of 2026-11-04, now +governs, and corrects the brief in two places: + +* `PWG-2ii` means both the Rocq leg and the Lean leg count. A non-DTT + witness is the tag `+foundation-diverse`, not a condition of the grade + (§8.3). +* Every grade carries the `PWG-` prefix. + +The audit text below is kept as written. Current per-theorem grades are +in `PROOF-STATUS.adoc` §"Proof Witness Grades". +==== + Audit date: 2026-11-01. Echo Types source base: `b0982c44f36133acd2d0e1d4e03cf031fff7a470` (working tree also has uncommitted CI/documentation edits). This is a source and receipt inspection, diff --git a/docs/receipts/agda-cold-2026-11-09.log.gz b/docs/receipts/agda-cold-2026-11-09.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..2f44430ecd24d0d102665a68dae8cf2ca1b80819 GIT binary patch literal 119394 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�?gV)9>h3*wdBEr>0*bfRGf zAC3xjI-Kv{PtUgCE(`dFu6em6v9w1ucXV>Mg0ttkh%dR;Hjnpu5l_h7W)YoYL$Wm$ z9M@DFRddBqE1M^pH{b2lz2M;c+bk8_X)j2ujLvFP`Tz~>Z7dp^Hfcm+RB6NdXd|T!{$PdxwFg`7y8=B zMtzc=!u>{1m_!+UQ~y@H?tRIH9WbfKl0F=I@m$jAOBEONP`Dob@)0iCmyj=@Dg(2( z!v}XNlFD=2q|HO-ecRp5Cd@U{`$W-@UuqT~vz5e7K^+rA_7k z#jaA1A?}J>CiV^k=1;eU7%Pu=XQ1+pqGN`5sRMm+O=+d<4#R2Vheo0eVJNr8NR4NX zhUSF!pgQY)VDr@Rgh*-iO{9hyd3sL3i8zvZIL7QzA`ZbUr~qTdo~xi5;}^Fgim7AcD2 zHi6J!n*dt+soGVh$EluQmr#EPgyuM=@f_7#?`CN&X(7ofrD*B0;#?kV<0LveMlW@^ z94N&xQDgiP3F-vSPx)FsNXuN4maiZ)^<2BW!GKt0u=1@5y`z(F8A&q#YSrNW@xI2^ zV?^>fKdKr!5_SE^GfrXktaKP|-QRJyI0>UAsyZi=H?`^Uz^SV+Xy0W#lCt0uTw~og z9++1s>OX}^L);l`*%l`}mT*TxCcT~y3*^UYa+-b<>Ng*krDYK0QuA=S2wU+H>pRWZhHA;!?A$hl?QJVt#vt$gm(27ebjuVj21^l#R# z$crIVr6;Jdk4trjSn45GcliZ_C{w1+l?0a`dM}~SCPr!89eJ*o5(r?OfyzNYQ<2u- zAPF~F_AD9tr)n$foLy=)uzG4~2ae)n7Qe(1kRj`iwQ?rw(?n9E40ifIi*EiQKwCjh z5hm&)FAfLG(32Tmx_lmJ=q0YTZRp9J(3SHZjQds}9w;=7s)stPH`hkYqKH*l{qa`} zxH(gq$h9b4ih7Nkja^c+u-YA697~DQ$J)TuF3w!{NG?C;b#z7I5r)VR$0Jwn-sw{j z*90<*<>Vm=cTqVzW?0Q*oEF^5;XRrG&E3Hu6>?XMExod;B9@^dbMlgW&6KYi%AGW1 zu5uByWRIe!n!zekTt&N+TeX$(QOx69)T^_I#%0CiRMiDDa#-k{^ZD|w;+GMEbJzlPA67CgA@6^uH@$^3 z8d11{b%utmx-4^ogyjiro5(Ml={5zZlHanhN**UCT0&u2kq1YI%KUFMyuZ zalET%@lPqsj%e2p6~ zy9PN+C4^H1uSI1~iNY~K(M6NQwA~X5nh02Lf!wY!=2*%38xFFI*K;9RTxu^(HQ$>f zP3t$Ing7dSO$nhW2WmRv1bUJ<%-BTz~`f_1%{{ctS8(-6qSFKZw_X)Fb(OhIKH6;{vl?LfD zj&?>E24!hrU2J4TG*=dEObgkq+md}K1tnG8(psJymyp(N^)ujlJu<9>XrYl4aK?=&k;F@t;lI+M?NvX!zWbQefsef~v>vq-en zS;<*3HRbFNeHDgq|8x0%Op>*Nx@@MnyMmcc93plr%gMgTf=Q<1g%1#bxBXqgPIAn7 zlY1iAQV92pDw0!|oyi7P?IuWX`v6pREZmU2uxai#pAC5sVMO~U(tVXkk-MII%z`QF zJ{Yp=_VrP4pUZ}Unh!#%(-kB^8aYCe@BGRmG7$fyS@C0PZ!{0;bhf=6H+@OFt^yh# zV3WiL5`(Rf@+r%P5`BwsyeJ`lSlFCU4Zh3UGYgPYO2+uPbjzxH!&Kr_X#9{cD^SXQ zAUYiLKKLjmU zEy-f4OS%e`>@bKLwtx;C`y|yD;p9#nxp8e<+lp>`n{bkw=BUb51Aj{J>{)#gUoeQ~ zK|W)Hi{T2qX127HLDxkq;RjktGdDGE$h$#xc@CWVz~vIW<%W%s0^B_%SN$TZpkS=U zEwk8D86!llkzG>zN*Dhm>wVLz;DP+vC@tbCRHjgt{3pOqBot+p(5;vAU6 zdp=!;|3HOFW?c%_)mK4r7b!An;M$rLM{8txFYHe?vTKxFe}}*tKkIcho`$v+`o&sTDCgz2KurLuUQ5(1^6Qi z&9$I1d&?Dfxsf5gw1&^Yl)_Cfh^lMyemI2MrSJ-lweU;#8&1W>3+FBy-@wo{N}Qe_ zChqD?vW4lZ#u8lP(u?>Xu@PHappxL(ZU93iR^op^vOD*Oe?YSBAO2rKve7laL9)Y= zDK}C_aFQ*F!{d+^Bc5te;7z&wUu|>;k2Wv1lV89bK!8pEQStgNwZJBQEeSg&>q?~R zgotA&lSa=&-)=^5>e|v3u6|Hua+#~VlrlBp7#cBmS%IGNL6ekFW08KAy+I~c-mh8scXVTsnu^9-hqsn8mjWLUKk|D5h8q@4co(Bx=3;}6A$v+z(t z&G2dNU6Q$`q&whq4W;lx)X#^y@mblXAofI3fO;SvAwgO7^m7S1la&F#b6HJMewLx< z@wqtZ9#RsB{ZA$4R5uS|^)V%MG$1v@*<1TCCa?cGQYI`@xVR^7x8p@4(MIU4S_9!_ zLDUhBog={|wsPTs(g?WZT{|?#j0N`3Q#QOHjf5TQ@;+Nv?f^D`{ii~BIj|fN(hSe9 zyNjD4<_KU=X}a=U>=Zt^iE}?efOu{Z9nxHK!PO_ztVXssW0F|v+pMvfRkTHG?Oudi z;_|GIV7CrMV_}b`pcMl@DAZ|X;o6Eu`NWqb&xDuyqv1Q5xzMiK%rQk`$pu zyFRtpax`lgd}Go1Jqi@pXkw<^?iR17N)as(+*&UbQJ_>rE9iAZzTb;XO&>j($2hP$ zi8j5+pjw0%+sN!|^2&DQ9gxF;(K5tE$;(AEv+XtJ=y0K|1{Flm&g=|O!)9l`!f2~7 z_;b3j!1I;iwfKBQqTZtJSBP1B+19|5bcHGDxG_wl|_F28I0M=9zH1jNhLK=m;0Tpzz) zFT)GX+qmC4y7@oY&dFq#+J>w7eYx0^dr%L{)-prWg5QHH*+^u4{VU7!T7BOPgS%lJ zPLi~2FQ(P?zQ9&8qD80fQa!?M6VbUYhf6B9XjshweKiPdHFy6Nf^zXGx$QzVph&wp ztu9AUu#AmhPDayys@M`_d zdECpc&VV{D4PooIWdGa}(k;S*3LP?V7A_TQ%z=gy&IP>+D^M;9yM?YYy1SZ#FYI}2NI)>uftTg)mezC=AG}(oTA)Mj z(f1lWcq#qGtk)h;DK&Sff2>2weW^_}mS^>wf&i^yctJ%KEqNvv@CJvXIEufREyk@s zrZVSLdq7cXg1-Z__}UH!bh5{SMB;~m8p`uoH;ACC0JVs~rn?+_p zW>&m4LH3$1$7rXX8*j~6@i{8-?xYfsxIhK#E&lF!Rhqkf-)1kp5-Xt?`aS84i!dI{ zENg^pwKNeBL1~yvF@$w<@oUPTwq-~=FsIiZE!>_Ix39UYU)mOK3(LCx8wvC5Hc_Z} zF26EhoOga#ToT0AY_2%Atg=qVMXz}D>$~j?KF-P^Bmj{;A+s^mP?v)CetcP0^f*W~ zr7U&ps<`7tn52{Jy0Ql`2x)S|Y1)iwsEcf`*P6E;eR+3jX}0FAl}4A(@x~NpPIU8x z`3OpX73*6)HN<7IwLV)hH?Zvq?w=3v+HPI)nV>u$!#Z!Oa|}Qqm4sv8UEPli0LwmH zZC07FV0{?$N>zOk;aklOv|k!1qBv^A(X*DQn=rE-@0Y^9qsFo6aqfnA5@!s*r*<67iMpN<}0r41giwK z@rY`%pIA%Wa0aar2Gny2`4`elvkTB?mbyj0nnb6Mf-ww#?lkw*t35T`106-gYn$D#8cXu^i;e7^t>AVeP7 zXJQmRQZJf;k(rM9hO_Yt(&PyFe5H5PmrrG-LAVn9ooCf?Fj#9e_xJm#X1SRu#x6F? z&oc!IFP=g=y;&y*&s=gvp^_+phk1B<#XbztDU|v$l=_bPVS#?K>aFt|6T1~h-XPef z=PS~M!^q?`i}Ll1>HO$_X)M)`!^{wyQPj4mo(F3zt8%(o9pO1Gpbl%Q+v~j?qL2HQ z@~EW@@kf(qRD)HdoXl>V4Qa0;ao7ZFU9g#D$^l|RSM>Y5dc5>EEs|4_(F%)06UMw=&}Vhq!qTHx#|kl}1h`VpG^V~nTb0@J*$gt*za&PL^Ez;AgLRquhqu{M!D#LCNjv2@%{M_H zP!AF6pNB&H$mD;Xn5&Mp{{q_lOOa)vSe1F$As=9MDY>PoI>a|k=Xv}e-lkcy`DjQP zA=YuO`59x7zXoZPk^NhJ)&~pbV_Uw!cC=>ZvbC9JU^;flq7vHU+WYYTZ?q;PR{uZP z?tfoy)qJOcw-OGd@-V?+i?o(}y+J^D*gyA*CD~{{*dJ&s=svm{()?$`zrVx$t16m& zlWO}L;c3+NK=^q!_RX71TBY5TLa!0Ck;op5m$MOBI`4T%>(T@zkxKYs zKc%Np&`r7pxV0fT`kn*4S&?0JKApZPZPdD%(GaEJU9Bj+j#(nF2LX^Qym6LR6F4C2 z)K0P_?lvxYUbbI)CKzGp1Ll%hZ!tl*KtEdthhl*s$;X zPB{LE)UqD^A*w}pE9$s3_3qb7EY{=E-GaPIoFwe&C3A4^5czD z<=Zv%yc0Pbud)L@j-FV>`%P~-e9Gy?^l3Col`?Pm-k5?oP9n%V#=?gz;h z={JK?cBNESS*pmMBY@bLno>J%7dUeVmMEtTUc-`bl|h7-6= zq;=Q^SmUWR;EK41pOeJD1WTp=4~O^n%a&15#s7e8{&~4>i##fuvR{(5$mT8S{5aS4 zVrO}~hz%OL&hKj`U#Z2v8Jqt`n(o!?){YUPGUa9$&}nT#0;W@>!Ck*un`Mr%q*8(s zAtE5|rXV$*iS!?^COG^W0*rvUv23<<%wP6q1;pXdaWD~yuHYPI*G;Y6{fGq9UvzKT zcIKz@tR8_L5PCAJ4v~5C^-}*CHumgI z{ug@lkVeH{F&+IRW2*B#%F@dmu*GF1Oufqg>@aH;%J_%=e~!&%JoHhC@p(QM#Yx>L zzf%8vYs}Rd{}*EuXJOnA^l1z8f-2^*R{$;mv3%7e5{*6kH)Qh0N*YJmg= zI-#i8uKyx9*Z%Py!HI-@G3TKo5P95b~o&y+GXKvSC?g=(xwe6FF$8>kA?jWn{V z>!-W7y>xcQVpG40Mq}?keQE%! z+FTusg@osY+th?pf8skwRQDbr6EQrsQT<8JINXBu}CZtO1=4cY4BFBV?ZsA+BkI z?p{)GpCr1!JA|c8cba_E?C2(TZw0nWS?>;sy3$kXeqPH|8c@CDv~3yDsjT|o@XlC6 zI(@~#`L1{IK13YzQG84VS^esoMI;K%A7xO+Cw&>Y**?k)$b(tq-IJx^3dnb8u48?? z*n)XhP77XVM9@GU#9BM<?4h0-)857XJOW^=Sw#Lln}!3grq_90tGUm z-V4_r2$K%HkoBnTJ4`f7JJOPeO+YCoN-bt*+_oo16>b{x(jbq!$X;XmuvO;n&}jYD zM}g9ttgUDryycj+mfR&(muvqmJ|^7OmC>0wW~rC5)g6m24}LR84%*|F2K%f2&HH-T zU#2)=W(OfUS;u;ow_o~)*MsWDxv=?QkM|%dZtR?@Ss$Mwj)y+#T33llNp*_$FGMia z#F)9#DdRp0Uas41;@o7vYhJoDOxy`Ag>arz!+jhzVY=bz=Nu|b+Jc9HrQ)&Fm~Dj7 z^Ko=*zwS~{2Xg$7HFt1=chm}WGMCGec0Xv*TpYS-DR&|B_NXhAJV>!KpCq8frPbwh zJ3ZE4dHBIL<{ok?aUiWRN8Pr%alWV?`Y6wp0yMkH!_Q;5QZYNMYyNq^as1rX6tioU zaKoul&Peib?#2XEW4KHmi>CTDgP^=;s!=T#cw`{RwG@?M7QK2D+n3_nzD&3@nY=>_ zWl^#@+ILVxxdt%@MU%zuiJt}E*I2TNxOly?r2ULAZU#r4cmESy;vG?V>=MIqHg?So zKl4C4(8GB^wa0m8T&(WeZSsl?$+^yte~b~M2*M-@!lVd7l|IZ;D*`8MiWdXD!4Xpj ze?9W&5_01W#T$yLLWX4}+{g3Kl!IywAWZ6_Fr7Jbl^b&q#9RfdW-9RTV|>R^n3BG! zRGEaLV4e9J-D_vEcgf!D8qDktP1wsNq*G5$CX-x;)#XDiByN3g$$9{8xtIzizNyqN z4>QFjFzaxwE-#;ZnFX^tao8{AyhL={WC|oVfqIRUF@_XzaZAWLtn8W3Yy2FeX|tPY zGmK%5Qeb$+5`ucBb~&;Uk?^zEi>Gvlh3(MS2+Ej8nZyuWjE8`s7zL(EkPSwQaTx=u z43VXA$a1Lzm-MO1@+nJ2^=7%9QkA4-TH5_Y9(MIe2^cK2#LCS<7iFH?=~ivD)ORjt zts&d%cT1%sexCM40|wlO1n%KdvOaw?7D}bZvfEA_Y+Y4pXEkBFL)H}ZuFY~8rS~SZ zSLWi{O;OrVF@Sa6*WKenjg%(uUq7WRlH+cJMSsEs(RAkHL>S8T{s z&m{(J4m<7#p)YkYL^KltgRx%kJ0X z$kg~SR{S!f`;(mJ4i%-`Db*0v>~}oH)7q{MVyq(b%*3U#+!x^KYwQ>nQm=$PG8Fw` zt#-6TpngEYT~DBGs%ICUHsF;Edu*ZyHCv&Q^%JrQ67W4ke>lkNz0ObDC_>T+D3{x) z^Dq@D?*$~=1R17&8d*P;$`qNl1#ScNwCdI{fR}SsgLMY>1w-7opG^&>Cx!D#$7C5SHJkMtBC{59~;_XzM*6)?Oeok_Rmy@zm;(wqL zs1=W(TenZY;h8(kD;v6Kq%eLUi6q{Dyneht$^8kwK~PQ33aGIXl#$xyq+P6JRE$Le zQKZKGu&ayR>Mk)v(n^RswNpxQ|0Clo_GByeRn8a53E`UsVOo-R=4o9k$1b8%%qTxB z=^pmd1PQ5QKhbxLgAlbGV=~xogWq*TUE~%m?dDdaKz8CNOWZ08`fTLoJQMmoc__m* z5IkZ%VI8eoy{#Xi zWkUgM9c^snm$e1$V6!IXu@l7IL&A(L84yt6^MJ-7v*u9InTj#OBoUg3&h%UyGUJ<#zz@FhY&b)j#1b@cX36w_QP2E;IaT{V@xKsp22 z^=bTAK3&W_U2|Etxt`8i+?uteiajkOm~Z@)3o?}rI+i0ZtzUSqU#c^fJyVbe=G^FI z{nS#X#&UJ}wb@A=@L_Zzl4YG zy6Cz6l7GW!PnBQWvX}j;SmS{k-jbwxnxl;P6BJ_p;eQxi4H*lOzZgm@$!gkQjOQjA`_e_>H%K zh)`5G)VbrB8SLOPtnC@@sEiIvi>Wj9g}j;F_@gyY7c zR-I-Um{Y}p-2}ix!?8WDvhE`xmV6;wrV4W*Z`%S6!y}jeur%PA4 zHycEN8SuC7e4sirH?=(T0z!j_v*QL>uWuF85LM0gRa~CQ!p-sT4s27?OmE1^$M zyINjO&uJj9{o%?!3<_Ghji0zmJ(~>csl*H~C-{JQ0e^;H#EBXnCcYvXgM>soZ1QW1 zxX%qLO->!!{OBV=_MpE%tq2jSe6G*t1^19Fvo=uc+Wku!2`E@!E6T7~LDnz8v0`lk zSSg;4f^uP^q%-+IM~n~YELe$o_t9*UjGg8A8*dx09k|HDS#KMwgOjvCEii6+1 zo&ma_(tA&YfYJCQE>J=SrmB@Ufl&ez+f;B^u;(Jd9c?zrY~-rOFj4IfYS9BoBZERT#my5m!NGdj6Ee4Gt0ak`7#Cz8g5YwHSqHbXPuw& zD{oc|lN5?7%qWxQtJ3CHcR47guM4FX^WNEZT#ank&8t0~yJ$o?0CyYDLc2wICbkup zQ{ALr(vBw&CDZQ8q*wAoQ{$0 zd_3AGw|pE)HOi6*I`h(PQ}d^}w}e$M4+$yrbX}hX5{0wG%|%?T>>=5kBXCcmy?_Ep z;L~%tk=-LFKCKKp#q4!YPh;ZA(_Q|}upoj*&fwY6ZsSSUX+r0N+boyt!6DazjU%mV z@g4QuOq_#r@;5g(Ei)nO3|7QC8o^%&_MrQ|&U(Q#okFG3h0h%odJZKHndj4Uf9-8n zem7%E3Mr+qU*N}w8JF{+msZtud7krx1+)__O6TqqHZo30hA-#W#?JLQ9*6bs>NyIJ z^_L8PoaC&y%Zo&QOv_H%b>>R=(bRPi1;BP{=WuK9gDXSIyZ}XIVM+HZtMh@T(-I>s z*U0uiCPExkv+P9XC&;UCSy)*McSnj-xp6}Z=d)M9pRv~#i!V?%ccI$|u_ndp3+@h_ zF^gDI+%7*{7!#UTEc8)~iFuE)ZmG@Pm9=?2V)t|8Uy5*FA^PD|P6soP-`kFo9)_+= zUH(ES_ZA!f?vtYLbNxz2jV zJdg?#P{RiPS_7;41mvMcbVG1E>+7dw94VXAw+IX}eLhuV6t+C&<62Z$!rFj5_q5Y-9?8d5m}qGF9(^pyNg?KI8>Qop zmK83}Tevq+US5a9F0f;aURiwCyY#iS8_6wT_oSI|*ez>5+Ep2-He6b;E^C7R8e7tv_GnZ;>O>NnC^g{4IJVP_)jw4Z-HQz z&wJytqx3ui$e_OzCeH}Wz7G<7;|c4v@6spnb}y3aap1PkG}?M>atYz1p)dokPmTJM zIz$|u=bsW-2!@mhox^q~;0a+440gx<0SA_d-B%W~qzyM?a?q!Xqql=b zA$%KN1o@4SSM>(_CHZPMtsVdR9H3ut!lG9|Omd-7f6O9KU;5@LWLDqFl3d$MhvW)R zb@GgHW>p0j7mVOGVmr=!fC%+%-346Lo<3@SsIlzgB<)dbH? zX1R=X>R@(MB6_N;eO1RL0qfDr;>(?9p4$*nC*=3H$Zz^*z#|Vsc0Y7|I}8i0xPQNa zOX%ft*$>nPYdBJkI28NR4%4dfP**ge#>75f*0*@7P*sbcoJDI3cN7`<{&x1<_^F1Z zh^2&c&Kb~!e_ig+b;Q!Qazh;l2E*D8j%eZW0FhVFS`#Y6$7*Mya@tW~aqpl`jn7j+ zRtP`ysfHk5{U?LD-m&V_2^hTxCNDf8G%{p>=j~6A1H4c73tCG=+YHbyX;+?{ zTOW}e`~4%3tcx%0Oh;{7Rm24@=Pv}~zIn0Dr08dNN0$Rx>zQy#4~#L%f@z9D>;zx;u;692A;--hPl_}oeLL2Kg}j0qf26<(iQE}_35?$R1j`gS}63p zIXPNGr#u6iA)7dTh;#2-zDE=Y3on(c13Jv%z`k>7)=Tj|zw%(o58)jqa zzD)z9s(%@gc{7d;Ek%3`+JX2c3<4-xK?rZVrN=WUWFHrDz*K_#mUAjW9NS%QN zZNvJ34$Fqy%|MCJZNtR_&FiBZGEYDnLU5W;s>bi*)ZhGls7Q$flHT?-Z^bdkgafzV z9V$seA1t~x;lumQ7RIaT+E*e-|N z&rH+lIr-BcQ#yd!n;q?cF9{(oGUD$ml+m;vuFH;F8To-Ev*X&r`n;zt5r@0&*+{%M zAprUtWG488h4hy#F+qMB6a>Vq^`yMNpO*JdNX38D6Bbq?#5NJ^vXKwT6Fm1&BhsT60)k??i=!|cw2k1NzXpV>_k?R=8%KfQQ^tL^VBXH>IXo5< z@`~mhkbAOSYu#xbcUslVyN>s9^oq5*<-R5SD)Nb9i6kU<(8(n1;7xv2G;*ic&G@4S zx%N$_{zLBb9G_nz+4hU2oX9@!AT#dbTN@C4rh4OBGj%%A`v&9wWBYdr#o4F$vj@WZ zVO5K;I@oqj?8`WHCtV;xqK0!-f}HbAwtZ7s>vY>S8nWPNW6A1Fch~CGl|DDk0;71w zy)GHalzHTmeoJ%Q^5?~Xs@=3Je0FPtF#S?3pVnY`8{4Qfx^7%^z&xW)P@Qi3 zU4?EcVI$tSYIKqLw0E3_AK-sBKQNUh&yh+dF~h;lXo$V#YQA?xjhU>JR<~Mq59wag zk2R?pmAPq_U^83hpCQD^^^zdnDJ@N1bT3i%W-i2H#yO_y{SBgueF=^)OVhTc3cC&q z|Ev!F09ypW(M-usCS>6O?KhlDT~@w~dz&qS^;lQQj$6JAL8)IkE@!xy><8w9sOL3|rC-fT?4IuLuQvoK^UOEKbwuKd?$BVQRUS@11;~3`8RN78!UGdm= znzGfpfMq+@cq)8X{Lxw5yw3X+$T=;cx#8(~v2b`C4yr{7xef>kys9PDngon*UbA*c zM&^@#D*f8N^H3p&i>8utU+#6i3u2d!OfmMj=T}J?rPFeGF6;f@*CuJJU@pFo>YFu1 z>vaaMxRrB%*!3MC;)5N%TUb?=9$Pt()WQiXX?do%$m*)mu%u-#wTL8~InD583{)E1 za%Q7hq0o0WPpE3SS?Igeg-BAEhPhDLsM_CD_&z`T9oF)B;|{9vUtnLT@wvFflsxdW)f$ zM)fr`@5iM(K=s71*#>USB#i8%y~=R=!=81%OngM=*ER2}dL+>-vBeV;0Gdwf=Xq|& zCv9bT`z~=oUaodzJAiaV+kC+ivr7i4`b|&7SN|YDyE?~_hckHG{<($fU=PBvyO_MW zlI!KPc?fq=vh3$3h3EUC_Q888O2Jgoxwy zk7(u*wsvz$?FSDX{yYIW5q_0LBDg44h8Kr9{lh_j@p=pTUexle2uy$!@rjX!H~ zPByvi<8hnI5$T$Pd>ZLK6*G`vUEi@ac)EdV@-PI?V4xCv$*_!sL#GViMRU^Nilp3U zSrX@OE@%H^Ad6>R2EWG(!>(-mkI+S#{mXR7ZW2{i8H*i7gY47uOVLeppPmz2d7`ww>fVoK$(Z6{h z;*{;idVut|M0+@M2W^`?oj;vK6e7|>4|);q_vPREt=%W;IQ!|CY~Dd4g-IYGRxJm} z<%{+}HSb)Hjf_M_s8OxqhdVfHdy97xl|XU#HXC9G5U;Zxx>ms?^`HVnat2WJrk3$& z!T{f85#)XMe;INvK-tC`9uyPe`kR_=Qz_#joMBV zfOJu%A=cWe;kdoAA!sM(*UrDC9^+~>9~+%J#1*$2rNbHjQPGtZs7jUmAFkditj(_L z+Qy-1ffl!7p?Gnp(Bke;+}+(Binq8+ad#(ZDefM;xC9T-V1L^C`QD9xlO$KTlH9?>Avft}zCTI`vSq3$0~FfB`v@Ojv&@)RsDM1k0QpW@7y$=+|^P>|;{E z#&li_w9fxGvs(W!cWxrqL6H`_RA&(j$dB4mr*F8579sJM=$VlnAZR&&g-H=QE7G>K zb=qWyI!5k6XC>YfZMSud+&AbLhjh_rm{asV0WChVwFK$h3g z+(CxpVgc39u&J9lcbPL{3;6SY@RsP%@@~YKYy5kK2YuV(tob=UkJoS@ee?J+e%?vs z5j8$R(EA^CG*<2KV4qg$H{g8h@*}+eQM)`PoQk%HotNATn9vY9( zVQMXed0bWwR`C0Yq>uh&#VVnQZg$qV?&D}rCwF?hvjlisWSZ2XSzH)WVqHP%n5i0X zZF@2gtsN=qFjOe%%dxh|)_Fc zS3aQ?iS&SUM;cfu!3zVF|EWU&D#V{1~qO|vAh^})CBdDVU{K0e@g z^LV8R?3KU54R2Pa`Jdk$2VOiAPex2!TJo!_jmJ318Glo?_uJeZUw2-yHtYo z$PeCr*;n&tx!%_bm?@QoYObO%l?9wv7XDEed-2%FTl9U`vy_CV*TM5(!C84*A#xG{7jX#I^$NHvoh*omzq;y z_65sx(@yBX4H4pAh95Z}OnOF|A+qq(NvCq1`)l=U{$w^fR;~}XJ(L>zIERZlIAB_p z#oD(?Zi?@~`5aOucB%2-HI^E#KKhTr$~#wE=leZPq+bZX96+Zu2cP)?+d0-Yv)(hw z(l>plrnY8kjMA{F$F?uuVEp(KBU=K6su%~Yzw?~UU6zipKVOJ@*dmXuo6w{X_fQlu zo@r;r9ON@F(B1HRsGzt*)&h*1!TvZgj%=F#&Xo(phckpvDZMT{ ziQQPGX3RjK9L@AzNzOk1Hj(;D?JzH4LLM`AAjSb&PPKW#*I(M{8ZzJC&3!ElZv6h- z^DSN(^!p(3ZI)|} zQ$(ZTfoiROUE;vX$Y&Y6nHoIp0iV!nFjfQ1E;TioeYC@y?R@&dY0hJ)X$)>T-f|d* zg4Irk9J$N(5s%c_Z~CO}nU!vys(*UwLU9k9=gFJjiq9qGCWRr+++|D2AP`I7jE<{y zm0Y56mwC^Z1W<{BLkJ8GH<(*h=#BaEm-mDH74LG(Nn%r=q>Qfe4fEkXXX5+c8tqJe z2kZ1}y-FpFjQ=Qw!$QY#mPhp$&Xkh^V+Uwe1`k5n5lGfPx2f#VoP z@|;ht3_;Ih-iLV`KEbM$pm>swthbpYmZ`X6+jdJj_$N`*wLP)~kv$2fo-)7O_Iu@v zEMR84nYN-`N zu0XFxvlBDcV(f&RtT$l(($Cb5`Cyx;o`Bpk!i|`Z?bC=gT?}7)H3L??bDCYaIJf>Q z509FYc|2tf1gvp=Ocx0&{&I^_CidPhMtU0(6;cZlvacdrp8&VNFE;TYsM*`6CyXFF z?@l)Zlkx$mkPZ+Ak7J&zkR zX)t7O?=P|!Wu_DH`YQ+0d>-i=_>g17e03*T1`Z}~2P7m@v|xr$y;?M{Wsok+k)%Hd zy-0p6K^CVPeSNWj_7fMLe?f3{n(0g5-{ zlhB276+14-4LekXW+O#&t==lcBMV- z0$ZojZrUZDGDvt@uU8UCdbV9krUAu#YL84~fpX2^?md70F3_J+p52IR$S(^_9{5%K zIuyG#;$S|II@vbAhm)m_yGj+|nY{pTl2Jh&<3J1J0LFZOs|KKq;$|Zk$Fe}So4LP* zwcqt*vvMfGeIe+ElKDlg7Fkpy1iXWn&2pE4daqQOvvDG|{(fQT>K0Dxywm@xyHXs* z?~XKMgeMm_;#4M8$zk&!)74{)>BNiK`dR=esn~$mmg>sN74768YSIREeSweFj?tfSSM)Sp<#$ZLlUx*{H6JK)i>PwPpEsQ0pO zEr?uG?gM4G0r2Ve3f!u+@!XKIx?}#+6AwapuP?^sNNjR>u^Z>8JbLp-bM)1a`+Une zxuHOx{)#o%!Eg4NKPGn~$0_9##_nyP?@fcOUA*gk(t2iT-nSbOP0Z4@HzxO8Wuyo@r%rcee>kFB= z8}O{`J#iW*)lSP=74@D(E1YhwwDp)_!N!@-`{#Ff%=td?hJX!uGJitQd%Tco_)GS7D2bg0JIMmJQyx4uw7FA7k$28jN8b z#94*2x(R>r#LzMG+JkQe7ru_G)n!;cF7mte5Qo#%uiuR?v3=>U#PLVo*C;kPbj>N! zAFn4qJiYqH3$FtlW~$tr_Y}C>I5{yq!SNNf&h+3o#yPR(J_HI{55ZJ!xre20hctr} zvj;bs7A08|ggr-}{V}gw&Mw1q?&s0+O?!>hvhFO>b`er~cI|rq?GeHrL%++Zn1NDQ zH+8<}X}vW-*nJezAhgFnGVR8C4YcJ>1foLhM2+RCczz^cK>*^21;G}G z^}!Z9gP#iXOOjS*IGrI!b<4GPx0Ny+Wl|cP+=df!*CiVo#nb1qxvxTYhQ0c__q=So z_#VA0d{XzPmYd4u-3_Q1-=CiXTQ?>m7p&$D{cchJHIQJHxV_0iaW_{Afi-AFR}E;& zh8>W07}&M$jp-DGDD>w3h_2+WqQEL;;KU1(-rK;(bIjF)K#?S7MrD*=S^g z&7E7c23JJ1vehsw(gM=e3LrMk*8$wNCt}|coK?SpcS5}M%sV}t9qPmZM)FZ>L0A9) zhUHTFySd`y_1vWao$CI|zwKY0Y;~aG1uI~(pd3JnL@P1$5(Z<2T{U>SVyXYt@lsg-W=>Ay-7n)RXlTa&ktL){STkL0(s& zw;~b2Ig2B*p9lDP&Bg!SqZ>*MHr%iF?tt_(B<_uXIL8WLS%n}BsRujQ92ASZEiC;r z7LUE(rF3okJAkuN3TAfTH6}BS+vqT@75HlpkX*$worl?*NEU-jr-R5v{~`YC!Y8|k z9qtF81YdRkxMo##=o*{!i6nPo!R`rjiEReSU|`!@eIjMyOI9iUOYci@JENRQx2v@O z`@e!&A~B!!lD`O97JY2-TP23iYjoEu;`)5W78ca=Gw=i#o{L5POe%B#EBwnuP|-UM z5o$CO8#Fgez08t8Z&&f4s>d;2k&*W#PpObA(QTg z*DEi_4NC#FnTw&`?(2lYP{>X;0~_?nL3%xJ3I@aOdg>Ga#vJDrb2Rnufj^T^eCvW0 z((FA}M+~?T6~eg6{vP-;xu*H@-gV5fcfJuYkkf`9`(LTZd9W5=ue z=e^&E8v<#DTH^MV?&|u!(uuPw?{VeI$~mv^+w3hQ0H4IM88`!po;~=zWQh=`JaYP) zPKYPH#hU$?<^Vi0VaLS!b{nY z237m(X68L08R~bHBTcgEzITm2EjXoomER>wnBPXoP!D{4I-aM*Oq3Dy#rWvFNJA<@ z2P?gpL*w+bE_Vg1f246C#^4j6r(!qk8ael0<+NA@!|cxOB60=Vd_E(KI(*u_2n2O@ ztTFjxWRAqRd?Q8=b!$~50GPc(4J+xH8COPFAv2P4>g0%-cyYq>i#;OQ)<0#I^)&eD zU?fMcx&z_(h*nNCr`zy64!YEC3L(0k5A++{}p}L->Fif1#?{Y7&$!GhVMdV><=f(F3hFQ+$+gH4t7Z(oab*pm= zg7wa?HF4dco;_nP1tB%|$l+@!BKRN35?uJ=iSPL=x9U4c_l{Xx%09PAAPaW>-dI7- z8*Y^}iMjk@_W@YRVVbPI17t-9-Ni;ak52i|TTaweVHtyG_gN zKO)~Lc_$y+hI=T?{rj4cRSb3Ea+e*SdW-p03^QSK#?Q0+73>` zu8vL;b(xMFtHPf|Z}qM?#u{N$W|+StjwDfoHx*E-*v?BdzSP67=bp*mXbGI*q?Sae zyf9@UvlIrsGd-*fYJbn_hs~TaA3XwKeBXz;s^orrv$XVRk zOACbC8IENU`DQ9M39-@0h4rcW93N1XZum98Rc+g38I21`Ot`QV4Z#DLaYdF_X+P=u zz$t!Y1v=Ke+m87r+LaZZx<27&!)2Gsf|v7!EyR&ZD#EUIFkUL- zMA(>LYl1s>%pud(lw3O_Ba%Z6$R?D`!ju5rLF&DPU$w2;d0hg%F;;w!qO4eP;WZo3 z(jMpuQan?Hhqd#c zpk$Fv46$y}BleaWKFXC#HRqYSP9Mqfo1bLK4Yy@I!0T7YJi=Eui^begg4s~!Dz zqnOpGzk_EqQ2hk#J$uQB8$-`LktX-GQ^w^&bfd{w)GC%Xj!+fX87C%KIG6;oY=qSv zqH~_z2>d2wGqWU$auJYg5jT37h*XbPkBi6Aq+UQOG}YO`YwH4J%c+DQO`IgbOcF*f z#_QpN4*d_ynVOj& zVA74UE8i+ioA*8R==P2e$~bOJNVG8W81};-&ap2?T#XjLtNX0-I#@mX_Pmf^(S_2d z4au@~Y34JM0v4C5b4T@bL8OustZ5zk2?O}*Gn$wSte^c&ia!3t7kTOZ46>B08}I0K zz0VV4my1pE`|rvgoO+te#&PW{O+&65D>0P7gjCUcC+GVFi|&({K(zIqGZDu&M$Ch< z95AG|FodVmv3PT<%1$pEMGS~ome@tM*Vpq=oQS>gbn$iCz4OZAr1#i^Ll2>zcClxly z%S5P;Ddx_rFdRTXD7fBqfthM4=A#n`PRScpc+UeQr?v5dU_hV_Vz7imeLxe z%hakpqkLLOVhmigw*ew4bJWu~@_9}2#gY9-EIz!|*mNe}V-%SzWJN$0gDl0JhHOy3 zhl^VutnS`CgXlVK6j?h|>`h&|e0ze%7j2_==x-tsVLHv43Q%ewf#YX1%aS_zp)%>- z%ET6Rc&M1@q@jbAl_>W1-h<>qpz^2l{qZx`5Pb;USew@zH>oK414Ffcqx)$)n4h-u z{uIY4VSU|XiuBmF@VPJY<0hY5Rv~+x<9Nh#di_Kye%}XunABnCy2*UA&0z6>#A{NCx#tQYF5YZpRL8qBWOF*z0jZqotg#7Ni741($&2 zpc7RT%?eq}u!`0z_V;4M)s_M38H-${)k(gz~W$?xva6{t{0>;2$Mi&in>scE;Lh42)b63n9*fuEmBxuB&~RxkeM z0}|X^r-||cSj+udRaa%zFk48o#MLFl*^89WE)w#5v2{2Y$xWd4?5I2u8zsLi?V~lw> zUeS!F^Xq4$e;)C%%OdhJtprqkz?Z4_9HJecMDKGv-LL`z?hRoen9d6yCdk^KOCK1E z1Y9fCLc4g~O8Lt0vGSagX9_ELZ@#}BMJyS56V8C4`a`CU0&Px*JD2`AhUj73`?}h+ zfI*&F`De(S_C*Hqf$ora%~H~5Rv8s)0zDzB)bHP5hpLh2IJFW4YMjK)f4z#hu@>jww2n>Yl=rO>`QAA9Y% z3X2vBdn64S^j!8#)5-z}K5&zB4B<3$xrU)~Y*TVf3i{iY8)8^S5X zyTmuY{!~8xTGWC79ZPW4QgFrluTuBX@`p+C zIj-Br@VDpMZ!Hym4+-_CN+R(PeO`EcBZ5Of$CAas)idlS5r zv}Z7C2IH+@pSWGdfkn_)SY_JDilRo1_F}I-1~21_9v9}NWdE@f9e0|(6LsC-#(Fzx zZEGq}8?J~RZZ-sMys{G`NV-*(viNxRoia5-wq($G;oI7!3F`|DJo2Zu0}i_3f}Pzj zq>yS+PHVH0uV&lM(P(F4tc_7`bLEmERO0TY`|h-N+J{(zgA&R|Bhz?wJornO8BZHW zV`g_gAoWVA@6miKr4MG@2{ZOyzWTFd3>4HAf->_nF3y`efaR(nN1BRsxYEgc!(V{+ z22T6)>}s^1U516Oyt1E6_UGN^=3?2a#sy4jP=mkg7~j^M{A|`Xa}Ex&kO3*!nuq^pv8OUx^gN+GQ75QKYn4H1Mt z^Jcelav@9>c2g_!6HhiA)!p95?l0GL;}*NQvh1BEFo=aHJUAB zR$kE3!Io=P^p}Gi?`#d;A^eRRNl%T=dcy=Z!EAbkS$-M*$?A@FN=B91+t9&-z<8w% zp&IkdBm^dF?7f%d@hlxdt)3I-?~j=us9c2U=LmbGg~nKTZv_xS)($TGJREW_^#Dx0 zlkTe;FX}Z}_)&8BF&6!v7CW|Kkt^~85DJW&SJ^_u9w!A*m-)tb0=^Yc#EJ(cjZHX( zQ1=IKwLqa-f`q(ze2s{|ek*_T!)uyez2}W>40s@by#nHyQbj$ngCY=wT6O(89)RCmAoytaJA~KIc1M1|~b3fIh1__NID^{JWP927eZKp0FJSs=5ZoPqVM?3U(QVn#J03q5)w4sp6!D{!VRGs*MdA>7-^HQ;$J^+`kngLajeuvQ4#Ucib$lt%U8k{Wr z#ni_XA}V{Nw4cIv(L$t4@QLG`1XR**@f z%x#;+uzpQ;B(G?%qFRU{w-l3}7EPb9B5?&B^@u?JRoo?ff4B}IKjR;q2*w8a_+PsI z=tfOwKiSAjXfYIp5+qz{Q0x__97h?@autRd^LWWr2UuPne$Vj0KW7m2y zrU~&6=!&M(llkCM2VbE9@A8)1K$(W*U81y=+VvR2=eyU}$GzAp?T99nwFNLMHudQL zoR5WLq70@`Jh)#n5foWjUuv|J=d%=HX2gH~ky(m$4cRS&9@_Y}yZS9p4JI$W=8-P+%+ z5d)qN5HlMdEx?eWusGG#>pE^HUHq5%droThaLb-oRusRgmBLp{@{HdPO(4QSPl_Gu z!8me(JUh%2X;}V~e7NM`<;bd&n9xv|Rtw9Z8A|fVHy~eICmoWo%+9mUd+|1J4<)ZuJJ^}Muu&IhfiQ{79zTEwb#`(Q^uvU; zk8DeZRgO5|UNY@g{&jqPXXP)y3gu9_Mz{A0GnUsN%OrD>0H0J=!Beh*wXQLd)zef) zA1B+ECdmrKo`h@a5Sa{hl7}X$HvVB9;d3eF5g1`)MG)?Sy+`HW5`uExc!W6SQ`k7} ztlL$V&t-}iJa*I=?w3KnCT<484-`glFwQD+a^5{j9^ z+W>c_`;72p0?DjYTB%NZ9pCWms^tOOQaStRN9Dz4sV8Tl1%YA|0dv|RyJ)bA=ECX3 zt!X`LS{fudad$cEP*NaqzmxffSx0BLEp0?*2MFtL;)vrPlyDp*4&(h)WV{ZRPMrL$2Ra$t@;Vt9=znFqyqG=i@UXiZ9QL^xloa(I+Q>Z3 z_z5&NhLo$h!!{kqJIamfl4rK9pyu-~J6vPSj17V8@=4-FW^y}jo5)ZZ4$aNa-0g-6 zFDILMVKu8h*@Ntkzp2B=WDp3?+pniSxUzRz-sUpBkTsqK?yS|AS_BT4s5vDHTm$G` zOODyI*UYkwCRcs#bT_p{s?P366B_fi>h@Wb82ES!L z(Z78S4RXghaCrx~G(eNG_?3*m>jV z&}q$G+eoZ58C$)f;#ueo#p%uWH?lfnk;}JzMFQ4XGYC};R3i477Wg!yB36EC9+8Ezk7J>*h+){XahT5x)jn( zN@t6XN53Uj5A4`#I}UF_=jkmXq?(_8bc-QWpr1Zyo=W-WTc%DJ%0#|)pI4~xt!0ApY8zbCY< zv8|3-GODAJn!C^+F`=8*i=SSq99u&R|4f*Zl!V}I%si)fF3fl|^7+ZOiV(42KNtRS z>U>pZyWf_cALil4aBAr3eE%T1@TK^%VTfscax62IC}y-pO?^|SUqfS=v-T=8i|tBX zvO1d@HY{T&3kD2*6Do@sSXym|KBFAJguA7I4)c3q#|LD>T670i0}VvO`1+X!k$<^j zIvx(022Dec&Fr_E7DFH9(+JsBbzYNo)G4f0Y-TSuG7?wT3bVV}&RQL-`Kn}y-r00baFDEqHR51&&p>`vojIr!|gY9 zroUQ5&WRJ6H&C^A6W{Pz*tUY>O?%h;x6r;gC`-xO1J~mv1h|(7J=OTtW1b9Oo>vFA z9c`yQ+7O0}vybACB~p{B3WttE+&fG%mQK5zE;7lmn&%(-&@;BH!rhN8V2%^IOOE!`-uyMFn#{JYD?P!EP zB&;qSDEtsffy$A438h$e1m+Nu&EJ+Mge4VwTOC);pQw6ApXSF$s75iKu6Mjz^RjHu zy;eULL%IcjvB*^~?8#|ul!gTaj7z5$^{S_vAC@yNpDr@%kUfiVac~b~4o`k_3~4h> zGOQoY#E9p3H?z}V;4NySF$5jvuj81LQzb5ic1v*9`d!`Ek69H>Xcbu(+Xs9O;}pAr}vx&`P2DtnL&vs#*35RALbRj ztSJmUPpCOb{Q_4_p`1(#|JpMuX3}V)iNyQ7!8nvU05h-8!-t;?X2>Uu2#d#dE(ibW~U^{mN3;op2c5_MO zNVIIy`H}b@&`=0)6~7yLX1u{AS2<>FWssv56sRPxBW>Y`FIqY4cF%u{i8iF0Rn5Cx zubf3^sZx{~41ysCS6;chp$Q_esM8;TpIb%H?d^YQl7nr1Ej7vQa#T;X1>6X$ z<~qdY+9e0GkH&x!srV~1)yM_62|qbM%=+(4Kh>t!6&qx}QN@cYmH{*xjkRJ{*%9Q2 z4+~~p&jr4mT#OC&iLzk_R_0C?P>$v-VJ*KzM`jRaW>ogM1bgGIu4E+T%-YHa+QKt;{l}`VI1Cf-amlNDg8}>wD3j4j;SL4mMd=MqJ@7w^ zh`$yWoOL(7WH8@L>L-CG%q5UvI#;2d+b#BVex%m+>UK2QTetGkCM(%`AgJRy2lfL$ zLt5nCF|j+T&*``A#+Q3y;oCM3LGo{j`j0?z{*OSK`m_m^vC7?2Io0NOS{&@6C04qM zcPNgR%s|yDq3+Yji%$`zpVH_@gc!3*V-|Y)8Bv?P@{e4rM^q5M0kU%Q2;14MxmccF zdt{C!OGtWAyNJ(W9a`m0>wnTqtMK$Sz_E0n>s)Uc*z1{p(bJJn^51n4(764Z3zUpm zU++<0ze=gdOULI`5JEH5&^$Kuse$h%UFu2Iy1Zzn(vtzqsr&qJJtNWork}NjS+`sB ztHV?HB<7?;jgU^aCfdQjjrHUKwpW6+Kr-%4_R1tj@~>xR6neHTOi>_DuoyeK!WL`% z+Vb>wVBbjMGQn<6I-aeno!;+CzZgF;pw3q0388XuI`Z)J{4!ziz{lmD zOMIL?tD_;i63gJ-A+S9eD9w<=7x-V{x+n)Z)*|$5tq1EX?XC;`Vt_wAlJ6|0m_sdDB2UxqGbl=^71Jx4G3a z=|Q!(-R?f|%uKi8@aH%Gk1;xS-gZCP8$51(m|MvHMhu*}&&xT; zbG$8~j2I)|zb*CYqk_$TY_PO%<{?QcLg<+?(EFX=jB>dAgR$nbgP9r_ZVEK~|InNr zH`_lxdBTy=)B#q89-L9 zBQ#UQ#$K3$UYI?Nd_u~B5fT=~8_1Kg+{|Z(^cO+AU;JLkMG3!rK;5|63eR|p<1T*0;gsYa8*jVSBiP;*t)@=Je#a6{M>m-$XTSO zi~|A50bjs&JxMUvfEGXwLp-J^%+AumKo~II%pO?>j&v0Ish5z z6{@+laa7hGPQ&3*`X5FINhBg;*@M2W=xs`v91Ueg=Q3Uw85wi8ztZ=^3g<^%#3QV zgxKneTX){+-y-aOV(w>=icf3KFREOYBy)4*f;XW>blz9+>mAnx#fVS)(Q=_85nffl zZyCMqK=WoI{CjS_g=|YLtC!z#&JtyI&5^+Y)n^k5*i@L7#)5A{D zv>yheO&^gy6T`Qhm&6Do9daP?iTC=_P!WCl```viFrRpkWwFi`Gf@Gb%3dq3kxm5K zR}O?OZUpBrI9VTNOPwL7P;(qF%!w2FuS&xE-LF-e?u@zI?+`r zAd+(qW2DQrL=n6Jj-qhaU*_#PS-j2GjuNwyFxPHLukh`jFneBI@r~FoT%fgEr`kGX zrhTT8DgswKGac{JKzI`@rCE1aRrT9rlJVl5)7LwI&G&|)hGfsWKc3Ofv$HTvuMmDX=8AMW+j0zf~}1rNdx90>j?ywxcuEKtMas=i56k#*`D$N zX4O#mv0!TT6CPY;GPKKF#AW?tY$q5wbor4<|4iD4q%S)1wT~OiXEBab0Z$HmikUFt zI(@~^A*6|kr+(PR=CI+cR_QKEHlMSmg|<;<+b}^dNMeynY!Ts$U5!(tD4bcC{vo)z zmX)_{XV+u;C_W^U6FBjeGah5dUTstUILhbXZ>K$726tL4^P;T|LOwsgCdTsN(!Nvk zL`c3w-YI^11-5mLfOZ8Jc@qXeE;);%yxU~ejS~XoY3|*6ZR5^bX;~Y0XY2@O#*9tF zUwd;MPq6NOUnUK1zl6JljizRSt%}-n$xVd-WP*<@yr5tAt?cpB%g4QpB$g$uY0BeY zS47-B?;UYZ-@+V$X3;ySLcp)1KxwCju#YqIId z2MjiOz}p;L8>%?7C4E&BsGhhbHz=b zZntGRBmnF?1-WHcYs)ELoMtK2Ll-p3ZCHa!`MTZwAg+Qdl@^PdaCeD=Y%k7i8N3jG zI30M^y&BXOR;!mY@#5U>VpudVPbYtc*zpNvDE(vyBB?IVU4;!9ynF#ApG5FUoF12D zsEtzKLKN!l}>QwD(IhzsF`>6KK>pm*=e) zFKDW}HQa)s1IVAOu-h{YIboU_kdpMp(=QKRlQMI-%+ z;7|nNSXC$3iCs?!DwJJW-Vj^(u=~>kZ#vb&LSKt}l&mv@dG$Y|Jsb~-wy$tmUBkY( zbIuw{>7KpT%75)85v#(2W-V*P)y(xR0a4x(LYRd<7Uo6X{w3UgMsYyqzSwd4H_8=p zG;`owM}{`M3cN=VPUuu);x0~*W4hWf&;lfM@KMQ>S4|IT0FKVp3U35DN2qUAr6A5e zRft|lL18(xIU6!!?!tRbR0vX8OWkvBC}}E5#L*_l)=zmgmR98}GGg^fKkx^Z8{5J& z{2A4@JdC=oeb%!Bwn~b?25gSVO^^_`5nhzyba;>U7Lm~NA z85vP!A!ymSPIcQ}mn)PZGno?{0)f;hB8%21`$OQ9Yok!m+3I4c{oM)h$tDr=SY<(e z;h~H-j~7zI7#^T?HEu9yy5deVF&+?I)l0xYIQPr*gnn5$HPZ}5or+Kf75jHifjNCS z@tE}DOt{cF*5%*f3jN-hF|jZwf#7PDW0`WD0nS!VeX)fvX$tIYOPz4n(Gd$U&KHv`}~KNk$hC_=cJ8Tp&kqL9zV zKO%Nsq7vBJF4KC3N=Wb;d!{Pp@6!*~ivx298Qwn#$*ej2G<^!X?T3fx&x>cJJ{l@h z!>(bwOACxD7wXndvGJC$R{FrssrKl5toGD#SW9+-$#g@hstMPYiE6_`fOFGlW)x^Y zS$7gN*FCn~PPEJM_*PisMdUtVi@a$qw!y=9mnd*{Q*Jx zjW)b7E$>;Yu;wD))w(V`lhkFs>P*$>eAhG)(t`ZS;Gp8kourLE+#ZK=-UrRcwunm&KRf%|g%e8%dG2|)s+KPhl zt&HYsD~U;VXfHu5`GjrxzA9%)PZ>IbK06N=j>xw!L~8iA_oJ)V@}=Z^C?K z8^yF#36!dZa`8!8IyNHRoAUKlkcS}5K{aAIa`1sa(ZPp5N~nnBMDa--OEEO)MLw=yRcI^p!(Ch?U=$>@FMMRRKg&87P}pxgh_mpjv6PQ_7;?(w9%wwMLlGkwJ1f^-7RwX4QFl) zDXTwO;6G!cOW5!*G$XL;q@B-3k|v99=TOK-ds z@ZIB%E5gMvmtO~Ap%7VGtP~){o-w8y!2q#m>(@JrWv}4@pPk~xn|D^aUI~3lh0dcn5M4$Y*ctJ#)7^c#3VI9 zcr=5k?^-a%O=TfKmb58M!jpjh;S|oY+{dQx`Ki{hjK+^?EV06*&MyYb@ayT=kXqtG zTjGbQv!6*q?U~_)$v0z?6>)^hm73NFvzYVpv0Ga^3^HftoG52@#_isq-CXMxl8{h> zvOF85J?6=6Cn5#<%SKvNgX$+uz9>zJ-TT?tu!@F+(IemfsGMRYmqoKOJ|xT_+ny3D zbVIo|vAWjO>fUn*(ORH|A!3s1CJ6%7lK~t3O|mn(5eUr(FB~wn&`cdyjV3}7MT@GoIwZAp}%>p z0lTDf;!h#U{LdX!v_I+;mosdCIr_&a0w9H z6WkhicWvC=f&~jMjT79vad&rjcXyXV-uGMUtg2II?_Im3dM8l%<$u~vcKG!P7p9**0(R(J)YpsyY@SlA|AlFSC1)EKPTHR4c09*9( zX&|_iR!gU7E_L?p>vl`#v*+u!+l?!?I9Y&hODg1aZ5;(O-Ku8oS=_N zN;8T*;U&CCzoA@r>*Bww7G?+Cyo5fxsSTA8XE2~Jf{wLjF5bGlc|-UK#JDoBCz;gy z?3}SLr!WIR5@c6fJ;xMR7wEU;PqrD)XZ@q_o`~=Uh+V5Py5TwfYp9?{x7VJ2W`-9s z^wI2$xxBkb<>EsVRX2J!@-LPFWX=lWRoMF`_8%+pR$AGlMq|t-d@#L>geycE14J5O zXRIZftnRHLTt!MuD|+hL)#A4~yYkt>*y9S@6+qpuwD{@A1bf<@Ci2@n0ahRsU@y{X+DvtS+v0)^?#K)8A;hzupb#7c>J{FF=o#pW)D?t3P z#Q2i38~ZzVpKDCzG^IoKTh!^zdGShk2sT}ni%!$n{#U_AQ zYx}gMW~QUa^Mg*fU~aL6gm1foFRfo#cYsw>@(8sKk8n<7gk#nR;ADx$7q!?$7MtCL zcGz-ADDFN}{bN79^qpLc)hF8SdDCo;N5vFQaw2NW5j0R$J$_7y56|($jK(uHE!xYH z-4BRTBE?+Xqj>v!4t!%~T9b15;(m$cg zp*8CQcAZ^`cRB788lT|Bgj!sfVitdxI{72JhTO8eu4$;!QWSRPH6}b9w#$j$A<|GWudjB71C}^8rdLN;tWei{MO;r9xslz8mX`n zPQ2gfO&=$f^bSdXc9`T!D>0o`%yR)XRQM~h?UPrp!3}R@p1P;#TYm~(C=yL%D(PYE zdTp|k?jHPn9}XUzWDH?&rkcat>J>?=c>cO6`9=9pTued2kC(z9Ppdd)Br2QLe${l! z95o8(HSnx3u3;T!jp3IF_0Alh*22bP&^1;T#N8$((M+@GVR2VqV&CBA2-nibg)4Le zIYnK6Y%@Q`9yBhL65C3^2a-Pm4-q!_&A%ydM<+&{RF@T#WP=T*pq+MD+d_i}c@v87TM93Nxow5f3j&r zn#z`lw77UDtv;27*oohXEYO``BgZZ#s`G}MIdg?+nH&FzMDNwP-O|B`dUO$}Pfqtr znmnSONm~b_B!CHzKWPxgXBbT~>A!v*D2y7kl!%1Hcz_E(!WNEn)%IFgi%fk$m?W(F zO*=Y#sQO9yYc1_QCL@Rr+NEKhb{1D5Oh>~ll4)PeNpO9?NaJB3cKS#C{yP<1+#rNO zO!R~w*hc?|Mv%K3cL5pv85ukqL?2V>#DYgq7r;{&;6YdS<(Sq4%H(^kDHKrPpEVvy zI>)LinE%?(`Gt`OmG^x%AFAX(`@eFW^Ehe0&*~i4-4%6q^O_yH9=S(2-ae(GYP`al zU`+G!(BKn>z`L}Zsf#P~GAPl^Y$$I-*H2CJs)r~mUmHmkfwa``{BN}Of5)dRKQEY* zX1jL87P?W?f3O)R-{#4pZEcz@ylt&R2K;p*}vaNZ1D*WsC+K z78TsUF8)S6TRMO$&3YC&cscLhu;b|az>RSJ@v2_wSrfvU+_RtUO!!)g7JR=>j^(AJ zS!+6%ry=Agp)^WfL>hOoFiP54;WiB0Iq3-tDcH~Jv&U+5WscA=3%{dZSXWsZ;lE}A z3A4_pNQUPB{2)eILpPW%rvB-|gkd|=_R}$ebY4w^oTlPsX3f-$kK#U(F&jg7WkV9v zY}bfkOO;(qTbo`7>q=W{(+{+H^o^^4GYEQbMBkT2%$)+llEa~sKLq_w8n?qa0#1{qhm$3E^2XcwS;Yw0mGp~|Z<9&4$v7lyaRi?^iB^yB z{G6KA~je;e4 zq8I1QSV6yhGkeFWTlyf$3nOtirOMzV5rH;G#(k0k0z>Txc~ z?kg{nqW=JWak38nZt(=6DZf-&{U?_A(2U_ba?K|;rzl!sZaMDaY+clSsoWR&je2 z_DjiLcyElDY@O~2@1R%_A2$gDZ^oiMbrb$l#3j+>H@19JjT)0$R)SH2;4l2s>0gP@ zO4F(ZXz`f|(Q^99y%U5lM_;qMHqpjVp#W|s8iCt&t~pc!O|CBoi#n;0nVemHZsqLp z&wxuUr~*(#L$0LN0ooTU=g&==%-fUSHZMZ;m3>YELJ*`ca?+S^ua&%K--?wSo zO@EHX^kaxPTjALR_|XI|V>{Y--WS0fF3XzeW6(*?%3=MerRaaDx1+)r1NQ#L07NKX zKAQII{AOh5de#*Ma>Qy2o5u~CrH&#?z^jsTUFZuMGfpvti8&d2@cB%>$mxzNxmfN7 z4inr&-ksz%I5b+@uTF! zN&Xu6O=8KOkf@G4A9-MU4U_lHdb5DSse-7n5+X&R-GmkVNrb}@w5%q@O#O#b^eVzt zAKrc`+;v?LBap+W<4fmlxn>y$NT8nM=sU#LN`cdu5|Wi_89RB8(<<=%sM{*H>rhO7 zgpm5?e6dDY$ta*0@+#Knj-X-`?fMNX^}U9z_np!G??CaX5I(=T(=Hxx&WG28T+LJ1i`?Ba;ifVzZ+1sfdn65VCqVP2EQ=NvzA8wjxvG5-rgjlZ=9&ECH?3QwPfE`GXlNXkb7@y zTy$kuZ-K-O#oGq!`6(5&hIT@}L=+ir%q zV&;B|E?qZD=-K5hWq0EZbd~j9&l`I%A|z25dN*>QOzOuytsWBJ^U%odf*56Q+tgdQFM~^0O^^deLVkd1 z5V>qwf4;qay(gbw(yZw2ga*^{4Z$zV4V!u}_i4ue8)5(xV!)X!DG<2>$k3BljNJjW z1dPn#gu@PBw$-8ayguscq4ZQ!*-Zjk2qEYu5KW8H_e--mwIM`W+G~>g{qOXk%J3@m zL$vCf_EJ|B+6EXd%R%5HXQ;1fH~#hkG=ow>C_@!fzQ|Ij19JLp$Mjm0n6>~Zhg9bd z3SNXuIfjqx=i9S1UPi<@N7xl!!`;VON2qK$&)UiCPL-d>;E$~*6U_TSaGK;5rX-Xq z#~Ml=^*|rEh2cNiy~L%Y6=^Uv2s}E6MbFA#oVPMj7t-?nu79i`iZ=51N=liXFw!4b zHn~g`U?um5AiKVYaQU-v2CxiO3pdI5%}(?Ffi04VAh6AV8(Bm7tJ!b}0pdt{;k|9d zR9k(V@)jGLW%-zS)IKXlW52U|nLbN3{1IhG*^f$4`@-!z%hg%Jt>{7u!<>=HrswZo z68j-Py^lI42;;!=iL|SgC>xGx-(_Q2n?G(XV<(m=ybe7#Z`53Dqoek9AlLbNXs=^f z_kYKuErBnidwT&G-MPwQ|C-$RmyF%-5z(n#+FHa94sO1<)UzPFL^^h6>(O;nnongI z^SR`BhC!~Wmn3=Qzymbd9kcbFqR&H_LjteJ1Px~N{qxN)9eGn}-<<5?jStex=FePb zGZ*qvxY!Iw8F3L(rYBH2h&Iz?m}buaz6h>JXL&XjXp6=7*e5kgI&O6}r?79P3A(xq zvv+Q=TZiBqpU2VQ{lfDb2aBHcVs$-fy*Z)_HljU0;=TB?{m(Bwb2c7<1~`q z>}Mq=eza13oi01|#sq9Y)E$o!zj}M#TiNh(pK|hUwiH{Ur3>O*@-T`jX^f4D$o4tG z0^9P2fg_M7vJ@Bq?D%)9Hh7@kgl`@^E5Gbc-=y5n} z(!6*IO4#YcM};Nc$HZ;cc+$Ry!vyeBlF!Ta!EFC9ITzR9#2$$(_5&AJ=!8DIRPsor zo9@ee#)VXmAY!ASo@#|(Juv|;A#&MlB~*Dg2oB#3ra`iWuK&mHtHNW6jNfCWkoU{q zTZ+{QqZ_J=3pIbVK$08e1G1jkaOL!KAy_KkTXKx!)$=}sj2HMDv zG#qc2$Y-?33=J2{o*tC7l|H7xF2&fjE*t)I6OH`HY)rKlX9a9GKD_iO95c@Ay;NP@ z%hdX^T_=72t)(vfVg(QVHMzoBZ4<)EZ>n&nQcd?*hP7#lmU!AU7o5w*K(QqJnrw*o zd6oBq_Q@3R{nP`7Pc|ipCGn{HF>cW%?fK;b;Q}>aQr6@P5R{`wwt&;dr+|r6~W__2X=c-ET%} zbN-b%ZVb~}7Cl!u%0DuZdxCb_5fqROEjoyG-8|C!t8nGhC;q9mzI{K2;@?{9@+9Hh zfjh~}xW6;sNv|Uxa;Bx+u0k70r63QtZW4eg!JG0e?7%6K_6!1dFA{)`!Cpot<;W~P ze&^32FEZKB74Mfm0}PMCz9GB1$PXG8!Slvd^Lb*}7X``symeI^TiB7th%c zqUbHg4fLxDNeSjO5}_bzXTl18@skpYV2OF|VBn#O<*g=Q$V_klYc(8#%P&v(tF=;oG33lBa(?3i)1x^lDvvIa4rT=lb~f|91x_N zWZ*)&y_TudncV>)IL79ztZI&qomP)D&C14dZO({elfm3Q)5&7oS=UI?wT~j?l2`gY*6L=?Rq|2WkQ_>S3?&eIDzSTcXPni2h zmtDcC$ycLV^3!jVOcR552qa<>_KYBATT|r0;YrF{>A{%~gjL_4l{{!o?a+cd&Ax?Z zP()u?9M^V8RMC?4CYq2d#d|5qtbUR?qW6k{PzrUE>OpBevWY0(X>_3aH&+AUyvuvn zURWNve_Op%H&2m5Q&DndU9XB8a7Evg`iLcXxicL zFiHlmws!(C0EuFH&D5e}p_+MY?O)m)3Lk1s?7l@z^52qRwo34juBu@i;QSmopM@j+ z7-*$okq$9vnPSo1;u^*0*SBWuH8}e$MIw9Y%IOt@m7%(9mA+$m@?kLrtK@~fWaB*e z&;YyI5PRCpuk4i7-YYs+#ev(FzIi9FuL3ZX#XdwTDfGt^gD;8VeTE2nc9@_7voVYm z#NDry)Gg!+xp$CSzfu3Y^=G3{=y$_eM~mU$Q#1B~kt)@AXmvkYhcei9W!sb%T(Q`8 z&Qb7X=o(wy;L9cBg)P=_WkH}7K|yB2M$9(OxRS=+h=|S0_AE}bI=%qHXByw6rSs&j zwW17hYFlAuUTuiHRUsv+L8kzGipc@mT%W-uh#H>*Dtr`&kYs+slG)UB9FF9GI1$%2 z#bnHz_ARm+oMuCyEX_-6yLeAF#wux7RzYgZwiFt4u6{?a-lZLiu<94pOMO8kX{ye; zKdjpfze{PKu%~E&Z6>5dZY}wV!dA?Sd zwH5f3gttbG=5w@xVwSzb@w0J|@fDzjGqBQ;u{&SDp?o=0I2j(VI;tHr9DI7fvEp_6 z2fod-&3$yZWp?(lXH7j7X^W~^C*>OVig(D($HR`u%0{}ZLBox`AET$Pmn1U5OR^;P zTqI@tBP13$krphpGPy#|8#RXz6)|Wsxgt<0fF3qa@f7mkgI3i@BO^~sA~7@bCb`e(RD;IE!Fx+Za|hZhH_~HNUyjWEV!~Q>WpQR=l#_>sL5)0 zAi~_uh1Eop&-hZF)kP!~)on#L7e|3=s^QHCf9=YyP|{e^{pJw=U4+=BN}C|wSj{jS zq(@TOoN3VR8XJs#!&9tX#6(5%6DLP*Us3}@uL3huaK)fsPg54P_@2z7)*j5F zSCI<*%+^fFV!gqcYSp|jibK-Uvk^9>=jVQB`1p;Z$|2A)4FDhGeo#ZvDx5v>dyI%p z;*SN53=)y<{p5@n^MqaSI|2g|8jkgqZ2F!X`ju6=xT=hA9Sc&T=4eZ;!!ipQb3G-FSAk^u_gohlZ zdJ1g7S7X7VFYcz#PJp+GpGMjefFLD*1^@+OMd|QMXjAj?$Rcvf+9FX48>Nbm5RS1! zQ>-%o)#wJWiw`wpD4R7!nxEI_m0mLcD467zlnOHVnCycf z!V3>ZYg!r`iKt660qh1UdicPS!yWW{h*W(68UJ>WFh(LA=L3=vvjef%Bt8EZ&~#Wh zBoMO~5ao1GzBqKjIOPvq3j1kCArT29M=y3{^AM%`XYz~%<6Kn`1&Ne)=z$h$ONKR4 z!CE>#C0d!aujn303heM3XEE-D@kr-zsSV^aRdBg+A1o}MlQCK zcFkEW?IkBuksiYwM+D~@D$CUeSSP3+qV;J7Co>7=bL@tLWk6^7ePR#e>4fFEqm^{8 zn-fi{4di^t{pDH@B48sj&h#Q2}T82TjJU_}imR^x|v;{$$axDDEC z@i7sFST#>T2QIE#^wT+aAQpB*AEBz*M~ayH)@{lWd^} zrS0L?N^)**fA8uV9hmjwbarMm6bF3l@mkHH-AmqPc z;cGW~MMCzmxKIV7C7Uw%;2B1txm;s5pYz5|Ik#&dCRb&kk*fDGJr%~0i%60Sj#l&m zcU>fk1R_xAJ<%`?`?Wvww^1WMYWb4qEyR{pCYy>&Q>)vBQ1LGBf<#5l{l%fzd-Z^H zMb_+@Xmq!|y|0goCvXQir^$}1ESsr$?x>8mkD4!cpK(Hqbyh6yG+;Wj@j?cDYcS0Q zqZXzrOlE#d6ue8~3>>!Fx8hGrLGA2U(jMTIvl5tY+un7Nb@;CQZJL)Ggqm|-eCmsB zMv=qjXdRBaJOONrN2xVKG5VpxuCDsq7#^>8RHN?&b_|B$|CJ77RnYJ_zKo?;_yD99 zQ+T($1x}IaKbo{0nwsKLoSaI{Oq1TPX_dG!j~jixcF{ww`By>vh&5$Fs=$~VIT#vO zf2zN#NzLy@wj!u0<5J;q!{Bew^9R^Wz_CJGS&lb6sn@PQq!>b#ZkfFTujpmIWWs68 zoAG_*IZ{tCt@%{?a6o1EK;Fn9<%cQmS9K1L3v9;*>i_bqf{1q)tA06SBf#r7(p;nG z0{Oh)yq)bg11uZ7{ls}}vycRr=O4?|#iWw{5 zQ}&^XjY=+k9$nu4fBQxZ-gC?hvX+(<9tPkeA7A7;wzld(Kn?7053EzaEu^xqLB_cg zt%kwm5HaWIU1>8)rXi0>TK$u)=x#ZbW(C}TYmsDhW?NlEdR8Q8!+owr7MmBg>R9CP zT(Tt3wB3P}#A;{^hQ95ufTryl?rm)vK{@kvGqJB#_CpV7Ro{{S3h=`NtbTpv&6`a7 z)nfp(L`&wST!h|%GfLKN5XxQ~rm2f{)Njlx&yZvm`$z6bS>Y7d`*Zr$UdrSIP&Tfc z5LY0V%LuAg$QD+rtr}XDducw&%jI32uO@=l12b|X9&vp6to^>lP-V0=t-pdOsv@b|VJ+#C4~#L>3l(Qk|B(4n((;Lma-(kk zL@FFyZEl3G0nBfO4EDd42lZ+T}enm#AA_J`n;YA@N93KUA#FC^( z+&>jb$0F4%>(fmTAV8<~Ua%zH_lLGU_y$zd8urkBGQgJsE;cX_7X{+G^ZXZWM z*V@@`)15rXzi9XDsPKAy*m1j|c|=Dy$)S!4rV=2qU4d=aJOllYP>gf#Ty{3P`suKq6{Fh^T)mT~M`3>LNy3vFc z69cigi_Wp{gYD&DSXx&$V(kE)HnyRyNVrf(*!wP=Qgvd=T1JR#0h1L#-IKI$?bqkV z*jJ#;p_A+h#d)32Z7gViKDZvAppFYN`yVDZ9W?>-LJkUg|L7twGZ9uz9#Bo*tKL6R zHK1UUwXuFBq2h@FJ0G+Ad)kvp3S%V~VLb2--C|p}ieIg!WsrY`PrwvpX|gyeHyp?K z7lU#9T!<->GmbZ4D4Bz~`T3Id%(=k2&%qvY9O*lGa99I!97OD#$w;KNK5lFPvX7C%9K)q43 zbRbi!mX^cTP?wkI#&LKb>biRL3GqRz=q+?hl{Rz+4ub#O0n!gvT?2&lUngDN=UIS? zrCDv{MWz@M5PF6bp&(KWQM~jWm(Q>rP8=c$hX(l7hWH=xzwn3M@JLFntOU=KXP-wV z5H<^jd|`|k0Po7ryc4)qKttjfZ)rEOC`PVkV?(!)vU=u-FOyT5oRE;_r<9&N=G~DZ z*hNM`p?n)LKGaXp1@!!oPx3Rvi_=uCq-r1y zctbDm;L_NLpcV6jw14G$6JKm07mIl>EB9RRj#+0AEzoJ5pXHC%mgxSCU;#<~CW!9~ z(v{Xt7Pqv0epRi>zPcd!LH6-;dkca84M|{z0uqnjF$r76a3zP>(8-s4XNRNFc77tT zP;Oe^F_1L{Ao6`|(+o3gc1w~+aiLbFAB+PiB-!dvmGHc751G?ZXu@4bRTaRS=UbE# z70IDI-;7(HR74T?LcKh`$+(FE>Ux5c|fcjQq{@PnE$`UVfTx_-*A{W zzWo~x%h)^m2ZzN!j%i=09*f=fw^S3+5~D3ejr0e+O8pNY<_f&}FCb>K|9=a_zR&^J zoxFMVWP#)T!O*v`QhAG!dpoRG?QhPNb;Tz-4E;H<5s#Fa(!};K~#Z}f%UIC7bazo zq@o_jL>Ke?wJAZ80SP6xv0u%4%A20l{UdpEU1TJ6bY=KP@!kzZA6Gm~n`oGFD;E7v zuD(ocK^CrvPX;ZWfWl+3yu=(|$O?W7XQ2aC4H{ffKmtW9Z)9l=H#+tC%<-lBRQB~{ zmT~I1i0=Jk_J#6as6-|`jj@wYRg)X}4^$GFu?;Xq6*Jk#|BM`6@X-UNay3-ku3I9c zaOpEtsZJuO!%ZFp$3F~b*keLgn2PaQv;vk7+$Jt!((EWS*H=#{8R%Kuf11uvFsOqs zmovwsjFg>#W@%c*KSJ#0*FF5Nss@cMh+14@^#4ngS|w}#mqZEQ!hg21)crpAzS!mt z@QK+(RnOT9wG8bZIvERY7`y)1@jo!BZuVc8l43n^P|A9$pcgryW#;OfB?Bs&z zzM5!rGhBL_wX7s%(((LXRRIGgZxwc58-IsSOYLbt8x22GHl`;XP4);IEux`wR1oPp zIQk|us*vYMh?~RA?x2d2^(jW8Gu8faYjwggp06IO?+Fk;0Z%4i`uM@ ziRr%zwS+T%&1rh;OU-udSkR9cow!S-8Zmm6Z3J&>ka`=|JWZq2j_yBg-+syKno?=F z4yVDY*RLSb?%ipS83WeJgwI{q@izibx1k_LLpHZT`rP3$uO7=^e5khf%L=+r{2-oA zJLsCN!`Mh^9|PE}KH9IDA@ck#AIqU1cF(^$AbjU(j0PigNiUZmbzcf+`~hD71N?f1 z;2iePd5v&@D#OqDnUvJZzrbPF&yFbk^|rMQH{4QoBM+2a(Ks?H%TPV@?&NS>vkR^4 zt8MO;5eyU5EXo{{aG92lN{2>PdDXNIC?t(sPtW0Q$8!>E}Lb28A20Yv3a(=SCIdFw=;=Q_sCA<-rnc~J z+O_PNM}22HI^|g>YO$s@KzosrQmwjI)$52Kx@^S5H(Qac0qgupe>QV&Snt@wzxvb? z?V@igrc!>_e8oGn<&UGVpumm3Ihy2rfmHmd8oXVDOlH1B$_nCzb(oZDq0i2Xj-BTH zMKHY4I-FKpbD8b?TBA%9EEU*UtU|SU1Rjm*EBBahBKe%+re6*m;x*re)boBvi8~yw z8^i+P*6yA`;@+!<9x23xGYj#K+@mXEusa1)IaJv?D1R`K+sSwhMAc?Z*gDej(N{c> zNp7ec_~s-#3v_L=lsi@oN=>QU{R;{$_Jcr?=Q31DmUonGu)J`tlN@Zp$J3t3E}FFE zyjqL5el2!;SXyqZ{!P#qPU?@X&%2#hQ?8GHVbnA|6D89T+InV1=mtK{b0TmVy>$$f>-&ZlOBvl-L zpEBJ;i}8IZfNR(fvtz{zzoh5MK>QidcqFj;EC1ip4S+W(BAb^O`-m_g+Ch5wht|)n zw7FIzy9JMgVTBvW;pC^dG_AIJ )# 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 literal 0 HcmV?d00001 diff --git a/proofs/RECHECK-EchoSearchExample.adoc b/proofs/RECHECK-EchoSearchExample.adoc new file mode 100644 index 0000000..a721f39 --- /dev/null +++ b/proofs/RECHECK-EchoSearchExample.adoc @@ -0,0 +1,225 @@ +// SPDX-License-Identifier: CC-BY-SA-4.0 +// SPDX-FileCopyrightText: 2025-2026 Jonathan D.A. Jewell += EchoSearchExample: Agda source, Rocq and Lean recheck legs +:toc: + +This is the per-theorem record that PROOF-POLICY §2.2, §5 and §8.5 ask +for (https://github.com/metadatastician/standards/blob/9bdf864cc7f2c8e24b4df84bf00d04158eee3ad5/3-practice/PROOF-POLICY.adoc[standards@9bdf864]). +It covers the headlines of `proofs/agda/EchoSearchExample.agda` (echo-types +#353), a theory development: a worked axis-8 exhibit with no dependence on +any one system's code. The Agda proof is the source of truth. + +[IMPORTANT] +==== +*Grade: `PWG-3`, not rested on axioms.* Both recheck legs are kernel-checked +with no axioms, but their correspondence state is `BRIDGE-PENDING`. A +`BRIDGE-PENDING` leg does not count towards a grade (§2.2, §8.2). The +statement comparison below was written by an agent. Under the estate +doctrine, an equivalence claim stays provisional until the owner has +reviewed it. Once the owner accepts the comparison, both legs become +`RECONCILED` and the computed grade is `PWG-2ii`. The `PWG-1` grade also +needs per-commit receipts from the CI lanes for every witness. +==== + +== Ledger + +[cols="2,1,1,1,1,3",options="header"] +|=== +|Leg |Route |§5 token |§2.2 state |Axioms |Receipt + +|Agda (source) +|— +|`PROVEN` +|`AGDA-VERIFIED` +|none +|Cold check at echo-types `ccec4d79866e3e433ae2268d2f8b7899396cb34f`, 2026-11-09. See "Receipts". + +|Rocq +|`re-proved` +|`PROVEN` +|`BRIDGE-PENDING` +|none (`Print Assumptions`: closed) +|`proofs/rocq/EchoSearchExample.v`, Coq 8.18.0, 2026-11-09. + +|Lean 4 +|`re-proved` +|`PROVEN` +|`BRIDGE-PENDING` +|none (`#print axioms`: none) +|`proofs/lean4/EchoSearchExample.lean`, Lean 4.30.0, 2026-11-09. +|=== + +Record (§8.5): `pwg: 3`, `foundation_diverse: false`. + +*Why re-proved, not transported.* The policy prefers Dedukti transport +(§2). No Agda→Dedukti→Rocq/Lean pipeline is set up in this repo. Separately, +no released Lambdapi Lean exporter exists, so the Lean leg would be a +re-proof in any case (§2). The theorems are small and concrete, so a hand +re-proof against the same definitions is the direct route. + +== Statement correspondence + +The comparison was made by reading: each Rocq and Lean definition restates +the Agda definition it mirrors, clause by clause. + +[cols="1,3,3,3",options="header"] +|=== +|Headline |Agda |Rocq |Lean 4 + +|`double` +|`double zero = zero`; `double (suc n) = suc (suc (double n))` +|same two clauses on `nat` +|`double 0 = 0`; `double (n+1) = double n + 2` (= `succ (succ (double n))` by `Nat.add` unfolding) + +|`search-double-6` +|`EchoS countUp double 6 4`, witness `(3 , s≤s⁴ z≤n , refl)` +|`EchoS countUp double 6 4`, `existT _ 3 (le_n 4, eq_refl)` +|`EchoS countUp double 6 4`, `⟨3, by decide, rfl⟩` + +|`search-double-6-decided` +|`bounded-search-is-decidable _≟_ countUp double 6 4 ≡ yes search-double-6`, by `refl` +|`bounded_search_is_decidable nat_eq_dec countUp double 6 4 = yes search_double_6`, by `reflexivity` +|`boundedSearchIsDecidable Nat.decEq countUp double 6 4 = Dec.yes searchDouble6`, by `rfl` + +|`search-as-echo` +|`Echo double 6` +|`Echo double 6` +|`Echo double 6` + +|`search-as-cost` +|`EchoC search-steps 4 double 6` (`Cost stepCostAlgebra`) +|`EchoC search_steps 4 double 6` +|`EchoC searchSteps 4 double 6` + +|`search-as-dec` +|`EchoDec double 6` +|`EchoDec double 6` +|`EchoDec double 6` + +|`search-as-feasible` +|`CEcho feasible double 6`, by `degrade-access free≤feasible` +|`CEcho feasible double 6`, by `degrade_access free_feasible` +|`CEcho .feasible double 6`, by `degradeAccess .freeFeasible` +|=== + +The definitions behind them: + +* `Echo f y = Σ A (λ x → f x ≡ y)` (`Echo.agda`). Rocq writes it as + `{x : A & f x = y}` (`sigT`), Lean as `(x : A) ×' (f x = y)` (`PSigma`). +* `EchoS enum f y n = Σ ℕ (λ k → (k < n) × (f (enum k) ≡ y))` + (`EchoSearch.agda`). Both targets use a proof-relevant Σ over `k` with the + same two components. +* `bounded-search-is-decidable` recurses structurally on the budget, and its + successor step tests the new top index `n` first, then recurses. The + targets recurse the same way and in the same order, so the `decided` + equation computes to the same witness. The Agda comment notes this is one + comparison, not an ascending walk. +* `EchoC` at `stepCostAlgebra = (ℕ, 0, _+_, _≤_, …)`: `Cost stepCostAlgebra` + unfolds to `Σ A (λ x → (f x ≡ y) × (cost x ≤ c))`. The targets restate + that instance directly, not the generic `CostAlgebra` record. The generic + record and its laws are not part of these headlines. +* `search-steps = suc`; `count-up-search-to-cost` re-pairs, because `k < n` is + `suc k ≤ n` definitionally. This holds in all three systems: stdlib `_<_`; + Rocq `lt n m := S n <= m`; Lean `Nat.lt n m := Nat.le (n+1) m`. +* `EchoDec f y = Dec (Echo f y)`; `search-to-dec s = yes (echo-search-forget s)`. +* `CEcho`, `_≤a_` (15 Hasse pairs) and `degrade-access` are restated in full, + case for case. + +== Residual differences and assumptions + +These do not change what the headlines state about this example, but they +are differences between the systems and are listed as the policy requires. + +. *Identity type.* Agda's `_≡_` is used under `--without-K`. Rocq's `eq` lives + in `Prop`, with no UIP axiom assumed. Lean's `Eq` lives in `Prop` with + definitional proof irrelevance, so K holds in Lean. Every proof here is a + closed computation (`refl` / `reflexivity` / `rfl`) or a re-pairing, so + none of them uses K. The Lean leg is still checked in a strictly stronger + theory. +. *Order and decision types.* Agda's `_<_` is a data type in `Set`; in Rocq + and Lean it is a `Prop`. Agda's stdlib `Dec` is a record (`does`/`proof`); + the targets use a local `yes`/`no` inductive with the same two cases. + Decidable equality on ℕ is stdlib `_≟_` in Agda, a `decide equality` term + in Rocq, and `Nat.decEq` in Lean. +. *Universes.* Agda is universe-polymorphic with `Lift` padding in `CEcho`. + Rocq uses `Type` with template polymorphism; Lean uses `Type u` with + `PUnit`. Both targets use the unit type where Agda uses `Lift (a ⊔ b) ⊤`. +. *Scope.* The `CostAlgebra` laws (`≤-refl`, `≤-trans`, `+-identityˡ`, + `+-mono-≤`) are not restated, because no headline in this module depends + on them. They are Agda-only facts for this theorem. + +== Receipts + +*Agda (PWG-3 receipt).* + +* Source: echo-types `ccec4d79866e3e433ae2268d2f8b7899396cb34f`, clean tree. + `proofs/agda/EchoSearchExample.agda` sha256 + `b73a9bb1fab531531f2442ea5f23cda74bd933e6e80e12e84986aa8ef716be33`. +* Checker: Agda 2.7.0.1 from `scripts/setup-agda.sh`, release archive sha256 + `975b515a14877ab6bce5bfc641e16c4a3ee52ca5d7f846577dee80aa2145db8a`. + Pins: stdlib `8326c7475af1fa456ca04a0203c168d5d7ff842b`, absolute-zero + `f486c29903434589117fa0662c6f29b0f17d1d5f`. +* Invocation: `agda --no-libraries -i $AGDA_STDLIB -i $ABSOLUTE_ZERO_AGDA + --ignore-interfaces --safe --without-K --cubical-compatible -i proofs/agda + proofs/agda/All.agda`. That is the §2.1 profile, cold; `All` imports + `EchoSearchExample`. +* The same run also checked `Smoke`, `AuditSmoke`, `characteristic/All`, + `examples/All`, `experimental/echo-additive/All`, `NarrowingSmoke`, the + `--safe --cubical` island and the five static guards. All exited 0. +* Import cone (§1.1): first-party `EchoSearchExample`, `Echo`, `EchoCost`, + `EchoDecidable`, `EchoAccess`, `EchoSearch`, plus the pinned stdlib. + Compiled under `--safe`, which refuses `postulate`. A comment-aware scan of + the first-party cone finds zero postulates. Postulate count: 0. +* Warnings: `UnsupportedIndexedMatch` (Cubical computation on transports) + appears in the cone, including `EchoSearch.agda` lines 192–204 (the + decider) and `EchoAccess.agda`. These are the known warnings triaged in + `PROOF-STATUS.adoc`. They are not errors and not postulates. +* Log: `docs/receipts/agda-cold-2026-11-09.log.gz`. The uncompressed log has + sha256 `7f9de4d1f874a0f249eadeb3fc675be346f437cb28cb31fd3e6db1b635e54eb0`. + +*Rocq leg.* `proofs/rocq/EchoSearchExample.v` sha256 +`548777f6d03abf60aece1d12e5d0bf52ffa5da25be636d937c28e360a981813d`, checked +with Coq 8.18.0 (OCaml 4.14.1; Ubuntu `coq 8.18.0+dfsg-1build2`). Invocation: +`bash scripts/check-recheck.sh rocq`, which runs `coqc -q` and requires every +`Print Assumptions` to report "Closed under the global context". Result: five +headlines, no axioms. + +*Lean leg.* `proofs/lean4/EchoSearchExample.lean` sha256 +`6ef569ac214e428e57b5b2cafa6ee55994360f3591a8e4882d3a4e4ae406fb98`, checked +with Lean 4.30.0 (commit `d024af099ca4bf2c86f649261ebf59565dc8c622`; release +archive sha256 `4dad74141c2c119ca1aa626656be83b8e14238afba97271fd7bf1eb3f081b319`). +Core only, with no imports and no Mathlib. Invocation: +`bash scripts/check-recheck.sh lean`, which requires no error, warning or +`sorry`, and every `#print axioms` to report none. Result: five headlines, no +axioms. + +*Sensitivity.* Planted errors make each leg fail: `double` changed to add one, +and the decided budget changed from 4 to 3, which leaves the witness out of +reach. Each mutant exits non-zero in both Rocq and Lean. + +*CI.* The `rocq-recheck` and `lean-recheck` jobs in `.github/workflows/agda.yml` +run the same scripts on every push and pull request. These are the +per-commit receipts that `PWG-1` will need. + +== Toolchain deviation (§6) + +* Legs affected: Rocq and Lean, for this theorem. +* Tools: Coq 8.18.0 from the Ubuntu 24.04 archive (`coq 8.18.0+dfsg-1build2`); + Lean 4.30.0 from the upstream release archive at the sha256 above. + `scripts/setup-recheck.sh` asserts both versions and fails on a mismatch. +* Why not Guix or the container: the repo's Agda lane already installs from a + checksum-pinned release archive (`scripts/setup-agda.sh`). These legs follow + the same pattern, so that every prover in CI comes from one method, until + the Guix manifest carries pinned Rocq and Lean. +* State: `open`. + +== Revalidation triggers + +Re-run all three legs, and recompute the grade from the receipts (§8.4.4), +if any of the following changes: + +* the Agda sources in the cone; +* either target file; +* the Agda, stdlib, absolute-zero, Coq or Lean pin. + +A failing leg drops the grade. diff --git a/proofs/lean4/EchoSearchExample.lean b/proofs/lean4/EchoSearchExample.lean new file mode 100644 index 0000000..e1baf49 --- /dev/null +++ b/proofs/lean4/EchoSearchExample.lean @@ -0,0 +1,176 @@ +/- +SPDX-License-Identifier: MPL-2.0 +SPDX-FileCopyrightText: 2025-2026 Jonathan D.A. Jewell + +Lean 4 recheck leg (re-proved) of proofs/agda/EchoSearchExample.agda. + +PROOF-POLICY section 2: every Agda theory proof is rechecked in Rocq and +Lean, with no Mathlib. This file is a hand re-proof in Lean core: no +imports beyond the prelude, no `sorry`, no new axioms. Each definition +restates the Agda definition it mirrors, and each theorem the Agda headline +of the same name. The statement correspondence and the residual +differences are recorded in proofs/RECHECK-EchoSearchExample.adoc. The +closing `#print axioms` commands must report no axioms. +-/ + +namespace EchoSearchExample + +universe u v + +/-! Echo.agda: `Echo f y := Σ (x : A), f x ≡ y` -/ +def Echo {A : Type u} {B : Type v} (f : A → B) (y : B) : Type u := + (x : A) ×' (f x = y) + +/-! EchoSearch.agda -/ +def SearchStrategy (A : Type u) : Type u := Nat → A + +/-- `EchoS enum f y n = Σ k, (k < n) × (f (enum k) ≡ y)` -/ +def EchoS {A : Type u} {B : Type v} + (enum : SearchStrategy A) (f : A → B) (y : B) (n : Nat) : Type := + (k : Nat) ×' (k < n) ×' (f (enum k) = y) + +def echoSearchForget {A : Type u} {B : Type v} + {enum : SearchStrategy A} {f : A → B} {y : B} {n : Nat} + (s : EchoS enum f y n) : Echo f y := + ⟨enum s.1, s.2.2⟩ + +/-- Agda's `Dec`, with `yes` / `no`. -/ +inductive Dec (P : Sort u) : Sort (max 1 u) where + | yes : P → Dec P + | no : (P → False) → Dec P + +theorem echoSearchBoundZero {A : Type u} {B : Type v} + (enum : SearchStrategy A) (f : A → B) (y : B) : + EchoS enum f y 0 → False := + fun s => Nat.not_lt_zero _ s.2.1 + +theorem ltSuccInv {k n : Nat} (h : k < n + 1) : k < n ∨ k = n := + Nat.lt_or_eq_of_le (Nat.le_of_lt_succ h) + +/-- `bounded-search-is-decidable`: structural recursion on the budget; the +successor step tests the new top index `n` FIRST, then recurses, as the +Agda procedure does. -/ +def boundedSearchIsDecidable {A : Type u} {B : Type v} + (deq : (x y : B) → Decidable (x = y)) + (enum : SearchStrategy A) (f : A → B) (y : B) : + (n : Nat) → Dec (EchoS enum f y n) + | 0 => Dec.no (echoSearchBoundZero enum f y) + | m + 1 => + match deq (f (enum m)) y with + | isTrue e => Dec.yes ⟨m, Nat.lt_succ_self m, e⟩ + | isFalse ne => + match boundedSearchIsDecidable deq enum f y m with + | Dec.yes s => Dec.yes ⟨s.1, Nat.lt_succ_of_lt s.2.1, s.2.2⟩ + | Dec.no below => + Dec.no fun s => + match ltSuccInv s.2.1 with + | Or.inl klt => below ⟨s.1, klt, s.2.2⟩ + | Or.inr keq => ne (keq ▸ s.2.2) + +/-! EchoSearchExample.agda -/ + +def double : Nat → Nat + | 0 => 0 + | n + 1 => double n + 2 + +def countUp : SearchStrategy Nat := fun k => k + +/-- The hit is at step `3 < 4`, where `double 3 = 6` by computation. -/ +def searchDouble6 : EchoS countUp double 6 4 := + ⟨3, by decide, rfl⟩ + +/-- The decider, run on this instance, computes to `yes` on exactly that +witness. -/ +theorem searchDouble6Decided : + boundedSearchIsDecidable (fun a b => Nat.decEq a b) countUp double 6 4 + = Dec.yes searchDouble6 := by + rfl + +/-- `EchoCost.Cost` at the step-count algebra `(ℕ, 0, +, ≤)`: the instance +unfolds to `Σ x, (f x ≡ y) × (cost x ≤ c)`. -/ +def EchoC {A : Type u} {B : Type v} + (cost : A → Nat) (c : Nat) (f : A → B) (y : B) : Type u := + (x : A) ×' (f x = y) ×' (cost x ≤ c) + +def searchSteps : Nat → Nat := Nat.succ + +/-- `k < n` is `k + 1 ≤ n` on the nose, so the bridge is a re-pairing. -/ +def countUpSearchToCost {B : Type v} {f : Nat → B} {y : B} {n : Nat} + (s : EchoS countUp f y n) : EchoC searchSteps n f y := + ⟨s.1, s.2.2, s.2.1⟩ + +/-- EchoDecidable: `EchoDec f y := Dec (Echo f y)`. -/ +def EchoDec {A : Type u} {B : Type v} (f : A → B) (y : B) : Type u := + Dec (Echo f y) + +def searchToDec {A : Type u} {B : Type v} + {enum : SearchStrategy A} {f : A → B} {y : B} {n : Nat} + (s : EchoS enum f y n) : EchoDec f y := + Dec.yes (echoSearchForget s) + +/-! EchoAccess: the five grades, the 15-pair Hasse order, `CEcho` and +`degrade-access`, restated in full. -/ + +inductive Access where + | free | decidable | enum | feasible | infeasible + +inductive LeA : Access → Access → Type where + | freeFree : LeA .free .free + | freeDecidable : LeA .free .decidable + | freeEnum : LeA .free .enum + | freeFeasible : LeA .free .feasible + | freeInfeasible : LeA .free .infeasible + | decidableDecidable : LeA .decidable .decidable + | decidableEnum : LeA .decidable .enum + | decidableFeasible : LeA .decidable .feasible + | decidableInfeasible : LeA .decidable .infeasible + | enumEnum : LeA .enum .enum + | enumFeasible : LeA .enum .feasible + | enumInfeasible : LeA .enum .infeasible + | feasibleFeasible : LeA .feasible .feasible + | feasibleInfeasible : LeA .feasible .infeasible + | infeasibleInfeasible : LeA .infeasible .infeasible + +def CEcho {A : Type u} {B : Type v} : Access → (A → B) → B → Type u + | .free, f, y => Echo f y + | .decidable, f, y => EchoDec f y + | .enum, _, _ => PUnit + | .feasible, _, _ => PUnit + | .infeasible, _, _ => PUnit + +def degradeAccess {A : Type u} {B : Type v} {f : A → B} {y : B} : + {c1 c2 : Access} → LeA c1 c2 → CEcho c1 f y → CEcho c2 f y + | _, _, .freeFree, e => e + | _, _, .freeDecidable, e => Dec.yes e + | _, _, .freeEnum, _ => PUnit.unit + | _, _, .freeFeasible, _ => PUnit.unit + | _, _, .freeInfeasible, _ => PUnit.unit + | _, _, .decidableDecidable, d => d + | _, _, .decidableEnum, _ => PUnit.unit + | _, _, .decidableFeasible, _ => PUnit.unit + | _, _, .decidableInfeasible, _ => PUnit.unit + | _, _, .enumEnum, e => e + | _, _, .enumFeasible, _ => PUnit.unit + | _, _, .enumInfeasible, _ => PUnit.unit + | _, _, .feasibleFeasible, e => e + | _, _, .feasibleInfeasible, _ => PUnit.unit + | _, _, .infeasibleInfeasible, e => e + +/-! The bridges fired on the concrete witness. -/ +def searchAsEcho : Echo double 6 := echoSearchForget searchDouble6 +def searchAsCost : EchoC searchSteps 4 double 6 := countUpSearchToCost searchDouble6 +def searchAsDec : EchoDec double 6 := searchToDec searchDouble6 +def searchAsFeasible : CEcho .feasible double 6 := + degradeAccess LeA.freeFeasible searchAsEcho + +/-- Computational sanity: the bridges carry the witness `3`. -/ +theorem searchAsEchoWitness : searchAsEcho.1 = 3 := rfl +theorem searchAsCostWitness : searchAsCost.1 = 3 := rfl + +end EchoSearchExample + +#print axioms EchoSearchExample.searchDouble6Decided +#print axioms EchoSearchExample.searchAsCost +#print axioms EchoSearchExample.searchAsDec +#print axioms EchoSearchExample.searchAsFeasible +#print axioms EchoSearchExample.searchAsCostWitness diff --git a/proofs/rocq/EchoSearchExample.v b/proofs/rocq/EchoSearchExample.v new file mode 100644 index 0000000..f93d125 --- /dev/null +++ b/proofs/rocq/EchoSearchExample.v @@ -0,0 +1,205 @@ +(* SPDX-License-Identifier: MPL-2.0 *) +(* SPDX-FileCopyrightText: 2025-2026 Jonathan D.A. Jewell *) + +(* Rocq recheck leg (re-proved) of proofs/agda/EchoSearchExample.agda. + + PROOF-POLICY section 2: every Agda theory proof is rechecked in Rocq and + Lean. This file is a hand re-proof, not a Dedukti transport. Each + definition restates the Agda definition it mirrors, and each theorem + restates the Agda headline of the same name. The statement-by-statement + correspondence, and the residual differences between the systems, are + recorded in proofs/RECHECK-EchoSearchExample.adoc. + + Core library only (Init + the prelude); no Require, no axioms. The + closing `Print Assumptions` commands must report "Closed under the + global context". *) + +(* ---------------------------------------------------------------- *) +(* Echo.agda: Echo f y := Sigma (x : A), f x = y *) +(* ---------------------------------------------------------------- *) + +Definition Echo {A B : Type} (f : A -> B) (y : B) : Type := + { x : A & f x = y }. + +(* ---------------------------------------------------------------- *) +(* EchoSearch.agda *) +(* ---------------------------------------------------------------- *) + +Definition SearchStrategy (A : Type) : Type := nat -> A. + +(* EchoS enum f y n = Sigma k, (k < n) x (f (enum k) = y) *) +Definition EchoS {A B : Type} + (enum : SearchStrategy A) (f : A -> B) (y : B) (n : nat) : Type := + { k : nat & ((k < n) * (f (enum k) = y))%type }. + +Definition echo_search_forget {A B : Type} + {enum : SearchStrategy A} {f : A -> B} {y : B} {n : nat} + (s : EchoS enum f y n) : Echo f y := + match s with existT _ k (_, eq) => existT _ (enum k) eq end. + +(* Agda's Dec, with yes / no. *) +Inductive Dec (P : Type) : Type := +| yes : P -> Dec P +| no : (P -> False) -> Dec P. +Arguments yes {P} _. +Arguments no {P} _. + +(* Decidable equality on nat, transparent so that the decider computes. *) +Definition nat_eq_dec : forall x y : nat, {x = y} + {x <> y}. +Proof. decide equality. Defined. + +(* An index below `S n` is either below `n` or is `n` itself. *) +Lemma lt_succ_inv : forall k n, k < S n -> (k < n) + (k = n). +Proof. + intros k n H. unfold lt in H. apply le_S_n in H. + destruct (nat_eq_dec k n) as [e | ne]; [ right; exact e | left ]. + revert ne. induction H as [| m Hm IH]; intro ne. + - exfalso. apply ne. reflexivity. + - apply le_n_S. exact Hm. +Qed. + +Lemma echo_search_bound_zero {A B : Type} + (enum : SearchStrategy A) (f : A -> B) (y : B) : + EchoS enum f y 0 -> False. +Proof. intros [k [H _]]. inversion H. Qed. + +(* bounded-search-is-decidable: structural recursion on the budget; the + successor step tests the new top index `n` FIRST, then recurses, as the + Agda procedure does. Defined (transparent) so it computes. *) +Fixpoint bounded_search_is_decidable {A B : Type} + (deq : forall x y : B, {x = y} + {x <> y}) + (enum : SearchStrategy A) (f : A -> B) (y : B) (n : nat) + : Dec (EchoS enum f y n) := + match n with + | O => no (echo_search_bound_zero enum f y) + | S m => + match deq (f (enum m)) y with + | left e => yes (existT _ m (le_n (S m), e)) + | right ne => + match bounded_search_is_decidable deq enum f y m with + | yes (existT _ k (klt, ek)) => yes (existT _ k (le_S _ _ klt, ek)) + | no below => + no (fun s => + match s with + | existT _ k (klt, ek) => + match lt_succ_inv k m klt with + | inl kltm => below (existT _ k (kltm, ek)) + | inr keq => + ne (eq_rect k (fun j => f (enum j) = y) ek m keq) + end + end) + end + end + end. + +(* ---------------------------------------------------------------- *) +(* EchoSearchExample.agda *) +(* ---------------------------------------------------------------- *) + +Fixpoint double (n : nat) : nat := + match n with + | O => O + | S m => S (S (double m)) + end. + +Definition countUp : SearchStrategy nat := fun k => k. + +(* The hit is at step 3 < 4, where double 3 = 6 by computation. *) +Definition search_double_6 : EchoS countUp double 6 4 := + existT _ 3 (le_n 4, eq_refl). + +(* The decider, run on this instance, computes to `yes` on exactly that + witness. *) +Theorem search_double_6_decided : + bounded_search_is_decidable nat_eq_dec countUp double 6 4 + = yes search_double_6. +Proof. reflexivity. Qed. + +(* EchoCost.Cost at the step-count algebra (N, 0, +, <=): the instance + unfolds to Sigma x, (f x = y) x (cost x <= c). *) +Definition EchoC {A B : Type} + (cost : A -> nat) (c : nat) (f : A -> B) (y : B) : Type := + { x : A & ((f x = y) * (cost x <= c))%type }. + +Definition search_steps : nat -> nat := S. + +(* `k < n` is `S k <= n` on the nose, so the bridge is a re-pairing. *) +Definition count_up_search_to_cost {B : Type} {f : nat -> B} {y : B} {n : nat} + (s : EchoS countUp f y n) : EchoC search_steps n f y := + match s with existT _ k (klt, eq) => existT _ k (eq, klt) end. + +(* EchoDecidable: EchoDec f y := Dec (Echo f y). *) +Definition EchoDec {A B : Type} (f : A -> B) (y : B) : Type := Dec (Echo f y). + +Definition search_to_dec {A B : Type} + {enum : SearchStrategy A} {f : A -> B} {y : B} {n : nat} + (s : EchoS enum f y n) : EchoDec f y := + yes (echo_search_forget s). + +(* EchoAccess: the five access grades, the 15-pair Hasse order, CEcho and + degrade-access, restated in full. *) +Inductive Access : Type := free | decidable | enum_ | feasible | infeasible. + +Inductive le_a : Access -> Access -> Type := +| free_free : le_a free free +| free_decidable : le_a free decidable +| free_enum : le_a free enum_ +| free_feasible : le_a free feasible +| free_infeasible : le_a free infeasible +| decidable_decidable : le_a decidable decidable +| decidable_enum : le_a decidable enum_ +| decidable_feasible : le_a decidable feasible +| decidable_infeasible : le_a decidable infeasible +| enum_enum : le_a enum_ enum_ +| enum_feasible : le_a enum_ feasible +| enum_infeasible : le_a enum_ infeasible +| feasible_feasible : le_a feasible feasible +| feasible_infeasible : le_a feasible infeasible +| infeasible_infeasible : le_a infeasible infeasible. + +Definition CEcho {A B : Type} (c : Access) (f : A -> B) (y : B) : Type := + match c with + | free => Echo f y + | decidable => EchoDec f y + | enum_ | feasible | infeasible => unit + end. + +Definition degrade_access {A B : Type} {f : A -> B} {y : B} + {c1 c2 : Access} (p : le_a c1 c2) : CEcho c1 f y -> CEcho c2 f y := + match p in le_a c1 c2 return CEcho c1 f y -> CEcho c2 f y with + | free_free => fun e => e + | free_decidable => fun e => yes e + | free_enum => fun _ => tt + | free_feasible => fun _ => tt + | free_infeasible => fun _ => tt + | decidable_decidable => fun d => d + | decidable_enum => fun _ => tt + | decidable_feasible => fun _ => tt + | decidable_infeasible => fun _ => tt + | enum_enum => fun e => e + | enum_feasible => fun _ => tt + | enum_infeasible => fun _ => tt + | feasible_feasible => fun e => e + | feasible_infeasible => fun _ => tt + | infeasible_infeasible => fun e => e + end. + +(* The bridges fired on the concrete witness. *) +Definition search_as_echo : Echo double 6 := echo_search_forget search_double_6. +Definition search_as_cost : EchoC search_steps 4 double 6 := + count_up_search_to_cost search_double_6. +Definition search_as_dec : EchoDec double 6 := search_to_dec search_double_6. +Definition search_as_feasible : CEcho feasible double 6 := + degrade_access free_feasible search_as_echo. + +(* Computational sanity: the bridges carry the witness 3. *) +Theorem search_as_echo_witness : projT1 search_as_echo = 3. +Proof. reflexivity. Qed. +Theorem search_as_cost_witness : projT1 search_as_cost = 3. +Proof. reflexivity. Qed. + +Print Assumptions search_double_6_decided. +Print Assumptions search_as_cost. +Print Assumptions search_as_dec. +Print Assumptions search_as_feasible. +Print Assumptions search_as_cost_witness. diff --git a/scripts/check-recheck.sh b/scripts/check-recheck.sh new file mode 100755 index 0000000..4fbd26a --- /dev/null +++ b/scripts/check-recheck.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: MPL-2.0 +# Check the Rocq and Lean recheck legs and fail on any axiom. +# Usage: scripts/check-recheck.sh [rocq|lean|all]. Needs coqc on PATH and +# LEAN set to the lean binary (scripts/setup-recheck.sh provides both). +# Save stdout and stderr if a receipt is needed. +set -euo pipefail +cd "$(dirname "$0")/.." +want="${1:-all}" +printf 'Source commit: %s\n' "$(git rev-parse HEAD)" + +if [ "$want" = all ] || [ "$want" = rocq ]; then + coqc --version + out="$(cd proofs/rocq && coqc -q EchoSearchExample.v 2>&1)" + printf '%s\n' "$out" + # Every Print Assumptions must close; any axiom fails the leg. + n_closed="$(printf '%s\n' "$out" | grep -c '^Closed under the global context$' || true)" + n_print="$(grep -c '^Print Assumptions' proofs/rocq/EchoSearchExample.v)" + if [ "$n_closed" -ne "$n_print" ]; then + printf 'Rocq leg: %s of %s Print Assumptions closed\n' "$n_closed" "$n_print" >&2 + exit 1 + fi + rm -f proofs/rocq/*.vo proofs/rocq/*.vok proofs/rocq/*.vos proofs/rocq/*.glob proofs/rocq/.*.aux + printf 'Rocq leg: OK (%s headlines, no axioms)\n' "$n_print" +fi + +if [ "$want" = all ] || [ "$want" = lean ]; then + lean="${LEAN:?set LEAN to the lean binary}" + "$lean" --version + out="$("$lean" proofs/lean4/EchoSearchExample.lean 2>&1)" + printf '%s\n' "$out" + if printf '%s\n' "$out" | grep -qE 'error|warning|sorry|depends on axioms'; then + printf 'Lean leg: error, warning, sorry or axiom reported\n' >&2 + exit 1 + fi + n_free="$(printf '%s\n' "$out" | grep -c 'does not depend on any axioms' || true)" + n_print="$(grep -c '^#print axioms' proofs/lean4/EchoSearchExample.lean)" + if [ "$n_free" -ne "$n_print" ]; then + printf 'Lean leg: %s of %s #print axioms axiom-free\n' "$n_free" "$n_print" >&2 + exit 1 + fi + printf 'Lean leg: OK (%s headlines, no axioms)\n' "$n_print" +fi diff --git a/scripts/setup-recheck.sh b/scripts/setup-recheck.sh new file mode 100755 index 0000000..51f24dc --- /dev/null +++ b/scripts/setup-recheck.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: MPL-2.0 +# Linux x86-64 toolchain for the Rocq and Lean recheck legs +# (PROOF-POLICY section 2). Versions are asserted; a mismatch fails before +# any proof is checked. +# +# Deviation (PROOF-POLICY section 6): these provers are installed from the +# Ubuntu archive (Rocq/Coq) and from the upstream Lean release archive at a +# checked-in SHA-256, not from the repo's Guix manifest or container. The +# Agda lane makes the same choice in scripts/setup-agda.sh. The record is in +# proofs/RECHECK-EchoSearchExample.adoc, "Toolchain deviation". State: open. +set -euo pipefail + +COQ_DEB_VERSION=8.18.0+dfsg-1build2 +COQ_VERSION=8.18.0 +LEAN_VERSION=4.30.0 +LEAN_SHA256=4dad74141c2c119ca1aa626656be83b8e14238afba97271fd7bf1eb3f081b319 + +test "$(uname -s)-$(uname -m)" = Linux-x86_64 +tool_dir="${RECHECK_TOOLS_DIR:-${RUNNER_TEMP:?RUNNER_TEMP or RECHECK_TOOLS_DIR is required}/echo-recheck}" +mkdir -p "$tool_dir" +tool_dir="$(cd "$tool_dir" && pwd)" + +want="${1:-all}" + +if [ "$want" = all ] || [ "$want" = rocq ]; then + if ! dpkg-query -W -f='${Version}' coq 2>/dev/null | grep -qx "$COQ_DEB_VERSION"; then + sudo_cmd="" + [ "$(id -u)" -eq 0 ] || sudo_cmd=sudo + $sudo_cmd apt-get update -qq + $sudo_cmd env DEBIAN_FRONTEND=noninteractive apt-get install -y -qq "coq=$COQ_DEB_VERSION" + fi + actual="$(coqc --print-version | awk '{print $1}')" + if [ "$actual" != "$COQ_VERSION" ]; then + printf 'Rocq/Coq mismatch: expected %s, got %s\n' "$COQ_VERSION" "$actual" >&2 + exit 1 + fi + printf 'coq=%s (deb %s)\n' "$actual" "$COQ_DEB_VERSION" +fi + +if [ "$want" = all ] || [ "$want" = lean ]; then + archive="$tool_dir/lean-$LEAN_VERSION-linux.tar.zst" + if [ ! -f "$archive" ]; then + curl --fail --location --retry 3 --proto '=https' --output "$archive" \ + "https://github.com/leanprover/lean4/releases/download/v$LEAN_VERSION/lean-$LEAN_VERSION-linux.tar.zst" + fi + printf '%s %s\n' "$LEAN_SHA256" "$archive" | sha256sum --check --strict - + tar --zstd -xf "$archive" -C "$tool_dir" + lean="$tool_dir/lean-$LEAN_VERSION-linux/bin/lean" + actual="$("$lean" --version)" + case "$actual" in + "Lean (version $LEAN_VERSION,"*) ;; + *) printf 'Lean mismatch: expected %s, got %s\n' "$LEAN_VERSION" "$actual" >&2; exit 1 ;; + esac + printf 'export LEAN=%q\n' "$lean" > "$tool_dir/env.sh" + [ -z "${GITHUB_ENV:-}" ] || printf 'LEAN=%s\n' "$lean" >> "$GITHUB_ENV" + printf '%s\nlean-archive-sha256=%s\n' "$actual" "$LEAN_SHA256" +fi From 4147da7cc17c130cad468ef7a63e98a15d289d5a Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 9 Nov 2026 14:23:30 +0000 Subject: [PATCH 2/4] proofs: EchoSearchExample legs RECONCILED by owner acceptance (PWG-2ii) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The owner accepted the recorded statement comparison for the Rocq and Lean legs on 2026-11-09, without a separate line-by-line review. Both legs move from BRIDGE-PENDING to RECONCILED, and both now count (PROOF-POLICY §8.2), so the computed grade is PWG-2ii, with no axioms. The record states how the reconciliation was made. PWG-1 still needs current pinned CI receipts for every witness. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01P4yFkxW5Heb8p2YW7ZYs9F --- PROOF-STATUS.adoc | 11 ++++++----- proofs/RECHECK-EchoSearchExample.adoc | 26 +++++++++++++++----------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/PROOF-STATUS.adoc b/PROOF-STATUS.adoc index b5ca506..9365df8 100644 --- a/PROOF-STATUS.adoc +++ b/PROOF-STATUS.adoc @@ -37,15 +37,16 @@ never assigned to the repository as a whole. |Theorem |PWG |Record |`EchoSearchExample` headlines (`search-double-6-decided`, `search-as-echo`, `search-as-cost`, `search-as-dec`, `search-as-feasible`) -|`PWG-3`, no axioms +|`PWG-2ii`, no axioms |link:proofs/RECHECK-EchoSearchExample.adoc[`proofs/RECHECK-EchoSearchExample.adoc`]. The Agda receipt is the cold check at `ccec4d7` (2026-11-09). The Rocq and -Lean legs are re-proved and kernel-checked with no axioms, but stay -`BRIDGE-PENDING` until the owner reviews the statement comparison. Once -accepted, the computed grade is `PWG-2ii`. +Lean legs are re-proved and kernel-checked with no axioms. They are +`RECONCILED` by owner acceptance of the recorded statement comparison +(2026-11-09). `PWG-1` additionally needs current pinned CI receipts for +every witness. |=== -Census: 1 theorem record is graded (`PWG-3`). Every other theorem in this +Census: 1 theorem record is graded (`PWG-2ii`), and none is at `PWG-3` or `PWG-1`. Every other theorem in this repository is `ungraded`, because no per-theorem record exists for it yet. Agda results for the whole closure are dated checks, not grades. diff --git a/proofs/RECHECK-EchoSearchExample.adoc b/proofs/RECHECK-EchoSearchExample.adoc index a721f39..8e1fe20 100644 --- a/proofs/RECHECK-EchoSearchExample.adoc +++ b/proofs/RECHECK-EchoSearchExample.adoc @@ -11,14 +11,18 @@ any one system's code. The Agda proof is the source of truth. [IMPORTANT] ==== -*Grade: `PWG-3`, not rested on axioms.* Both recheck legs are kernel-checked -with no axioms, but their correspondence state is `BRIDGE-PENDING`. A -`BRIDGE-PENDING` leg does not count towards a grade (§2.2, §8.2). The -statement comparison below was written by an agent. Under the estate -doctrine, an equivalence claim stays provisional until the owner has -reviewed it. Once the owner accepts the comparison, both legs become -`RECONCILED` and the computed grade is `PWG-2ii`. The `PWG-1` grade also -needs per-commit receipts from the CI lanes for every witness. +*Grade: `PWG-2ii`, not rested on axioms.* The Agda source is `PROVEN`. Both +recheck legs (Rocq and Lean) are kernel-checked as `PROVEN` with no axioms, +and are `RECONCILED` (§2.2), so both legs count (§8.2). + +*How the legs were reconciled.* An agent wrote the statement comparison +below. The owner accepted it on 2026-11-09 (echo-types#368), without a +separate line-by-line review. Treat the comparison, the residual +differences and the owner's acceptance together as the bridge record. + +`PWG-1` additionally needs current receipts from the pinned CI lanes +(`check`, `cold-check`, `rocq-recheck`, `lean-recheck`) on the exact source +commit for every witness. Those lanes now run on every push. ==== == Ledger @@ -37,19 +41,19 @@ needs per-commit receipts from the CI lanes for every witness. |Rocq |`re-proved` |`PROVEN` -|`BRIDGE-PENDING` +|`RECONCILED` |none (`Print Assumptions`: closed) |`proofs/rocq/EchoSearchExample.v`, Coq 8.18.0, 2026-11-09. |Lean 4 |`re-proved` |`PROVEN` -|`BRIDGE-PENDING` +|`RECONCILED` |none (`#print axioms`: none) |`proofs/lean4/EchoSearchExample.lean`, Lean 4.30.0, 2026-11-09. |=== -Record (§8.5): `pwg: 3`, `foundation_diverse: false`. +Record (§8.5): `pwg: 2ii`, `foundation_diverse: false`. All three legs: `PROVEN`, with no axioms. Rocq and Lean: route `re-proved`, §2.2 `RECONCILED` (owner acceptance, 2026-11-09). *Why re-proved, not transported.* The policy prefers Dedukti transport (§2). No Agda→Dedukti→Rocq/Lean pipeline is set up in this repo. Separately, From 7e9b5f446a50cc6e78faa815e8a5efe7092cdb0b Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 9 Nov 2026 15:24:09 +0000 Subject: [PATCH 3/4] proofs: check search_as_echo's assumptions; name each headline in the gate Review on echo-types#368: - Neither leg checked the assumptions of search_as_echo / searchAsEcho; the check on search_as_cost_witness was counted in its place. Both legs now check it, and scripts/check-recheck.sh requires each of the five PWG headlines by name, so a check on a supporting lemma cannot stand in. - check-recheck.sh and setup-recheck.sh reject a leg argument other than rocq, lean or all (exit 2) instead of passing with nothing checked. - When coqc or lean fails, the captured output is printed before exiting. Verified locally: `check-recheck.sh all` passes (Rocq 6 closed, Lean 6 axiom-free; 5 headlines each). Removing the search_as_echo check fails the Rocq leg by name; a planted Rocq error prints coqc's output. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01P4yFkxW5Heb8p2YW7ZYs9F --- proofs/lean4/EchoSearchExample.lean | 1 + proofs/rocq/EchoSearchExample.v | 1 + scripts/check-recheck.sh | 42 +++++++++++++++++++++++++---- scripts/setup-recheck.sh | 4 +++ 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/proofs/lean4/EchoSearchExample.lean b/proofs/lean4/EchoSearchExample.lean index e1baf49..82855e8 100644 --- a/proofs/lean4/EchoSearchExample.lean +++ b/proofs/lean4/EchoSearchExample.lean @@ -170,6 +170,7 @@ theorem searchAsCostWitness : searchAsCost.1 = 3 := rfl end EchoSearchExample #print axioms EchoSearchExample.searchDouble6Decided +#print axioms EchoSearchExample.searchAsEcho #print axioms EchoSearchExample.searchAsCost #print axioms EchoSearchExample.searchAsDec #print axioms EchoSearchExample.searchAsFeasible diff --git a/proofs/rocq/EchoSearchExample.v b/proofs/rocq/EchoSearchExample.v index f93d125..f6c4669 100644 --- a/proofs/rocq/EchoSearchExample.v +++ b/proofs/rocq/EchoSearchExample.v @@ -199,6 +199,7 @@ Theorem search_as_cost_witness : projT1 search_as_cost = 3. Proof. reflexivity. Qed. Print Assumptions search_double_6_decided. +Print Assumptions search_as_echo. Print Assumptions search_as_cost. Print Assumptions search_as_dec. Print Assumptions search_as_feasible. diff --git a/scripts/check-recheck.sh b/scripts/check-recheck.sh index 4fbd26a..ab715ab 100755 --- a/scripts/check-recheck.sh +++ b/scripts/check-recheck.sh @@ -7,37 +7,69 @@ set -euo pipefail cd "$(dirname "$0")/.." want="${1:-all}" +case "$want" in + all|rocq|lean) ;; + *) printf 'usage: %s [rocq|lean|all]\n' "$0" >&2; exit 2 ;; +esac printf 'Source commit: %s\n' "$(git rev-parse HEAD)" +# The five headlines of the PWG record (PROOF-STATUS.adoc). Each must have its +# own assumption check: a check on a supporting lemma never stands in for one. +rocq_headlines=(search_double_6_decided search_as_echo search_as_cost search_as_dec search_as_feasible) +lean_headlines=(searchDouble6Decided searchAsEcho searchAsCost searchAsDec searchAsFeasible) + if [ "$want" = all ] || [ "$want" = rocq ]; then + v=proofs/rocq/EchoSearchExample.v coqc --version - out="$(cd proofs/rocq && coqc -q EchoSearchExample.v 2>&1)" + if ! out="$(cd proofs/rocq && coqc -q EchoSearchExample.v 2>&1)"; then + printf '%s\n' "$out" + printf 'Rocq leg: coqc failed\n' >&2 + exit 1 + fi printf '%s\n' "$out" + for h in "${rocq_headlines[@]}"; do + if ! grep -qx "Print Assumptions $h\." "$v"; then + printf 'Rocq leg: no Print Assumptions for headline %s\n' "$h" >&2 + exit 1 + fi + done # Every Print Assumptions must close; any axiom fails the leg. n_closed="$(printf '%s\n' "$out" | grep -c '^Closed under the global context$' || true)" - n_print="$(grep -c '^Print Assumptions' proofs/rocq/EchoSearchExample.v)" + n_print="$(grep -c '^Print Assumptions' "$v")" if [ "$n_closed" -ne "$n_print" ]; then printf 'Rocq leg: %s of %s Print Assumptions closed\n' "$n_closed" "$n_print" >&2 exit 1 fi rm -f proofs/rocq/*.vo proofs/rocq/*.vok proofs/rocq/*.vos proofs/rocq/*.glob proofs/rocq/.*.aux - printf 'Rocq leg: OK (%s headlines, no axioms)\n' "$n_print" + printf 'Rocq leg: OK (%s headlines and %s checks in all, no axioms)\n' \ + "${#rocq_headlines[@]}" "$n_print" fi if [ "$want" = all ] || [ "$want" = lean ]; then lean="${LEAN:?set LEAN to the lean binary}" "$lean" --version - out="$("$lean" proofs/lean4/EchoSearchExample.lean 2>&1)" + if ! out="$("$lean" proofs/lean4/EchoSearchExample.lean 2>&1)"; then + printf '%s\n' "$out" + printf 'Lean leg: lean failed\n' >&2 + exit 1 + fi printf '%s\n' "$out" if printf '%s\n' "$out" | grep -qE 'error|warning|sorry|depends on axioms'; then printf 'Lean leg: error, warning, sorry or axiom reported\n' >&2 exit 1 fi + for h in "${lean_headlines[@]}"; do + if ! printf '%s\n' "$out" | grep -qF "'EchoSearchExample.$h' does not depend on any axioms"; then + printf 'Lean leg: headline %s has no axiom-free #print axioms result\n' "$h" >&2 + exit 1 + fi + done n_free="$(printf '%s\n' "$out" | grep -c 'does not depend on any axioms' || true)" n_print="$(grep -c '^#print axioms' proofs/lean4/EchoSearchExample.lean)" if [ "$n_free" -ne "$n_print" ]; then printf 'Lean leg: %s of %s #print axioms axiom-free\n' "$n_free" "$n_print" >&2 exit 1 fi - printf 'Lean leg: OK (%s headlines, no axioms)\n' "$n_print" + printf 'Lean leg: OK (%s headlines and %s checks in all, no axioms)\n' \ + "${#lean_headlines[@]}" "$n_print" fi diff --git a/scripts/setup-recheck.sh b/scripts/setup-recheck.sh index 51f24dc..97f96e4 100755 --- a/scripts/setup-recheck.sh +++ b/scripts/setup-recheck.sh @@ -22,6 +22,10 @@ mkdir -p "$tool_dir" tool_dir="$(cd "$tool_dir" && pwd)" want="${1:-all}" +case "$want" in + all|rocq|lean) ;; + *) printf 'usage: %s [rocq|lean|all]\n' "$0" >&2; exit 2 ;; +esac if [ "$want" = all ] || [ "$want" = rocq ]; then if ! dpkg-query -W -f='${Version}' coq 2>/dev/null | grep -qx "$COQ_DEB_VERSION"; then From a7ab6188c6db8ebaa551fba325914a29b33fd769 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 9 Nov 2026 15:24:35 +0000 Subject: [PATCH 4/4] =?UTF-8?q?proofs:=20record=20each=20leg's=20source=20?= =?UTF-8?q?commit;=20=C2=A78.4=20census;=20trigger=20wording?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review on echo-types#368: - The Rocq and Lean receipts now name the source repository and the checked commit (7e9b5f4, the commit that changed the legs) beside the new file digests, and report six checks, five headlines among them. - The record no longer says the CI lanes run on every push: they run on pull requests, pushes to main and master, and manual dispatch. - PROOF-STATUS's census follows PROOF-POLICY §8.4: a count per grade with the denominator (722 Smoke headline pins), naming ungraded and the lower rungs in the same line. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01P4yFkxW5Heb8p2YW7ZYs9F --- PROOF-STATUS.adoc | 8 ++++++-- proofs/RECHECK-EchoSearchExample.adoc | 24 +++++++++++++++--------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/PROOF-STATUS.adoc b/PROOF-STATUS.adoc index 9365df8..625cc74 100644 --- a/PROOF-STATUS.adoc +++ b/PROOF-STATUS.adoc @@ -46,8 +46,12 @@ Lean legs are re-proved and kernel-checked with no axioms. They are every witness. |=== -Census: 1 theorem record is graded (`PWG-2ii`), and none is at `PWG-3` or `PWG-1`. Every other theorem in this -repository is `ungraded`, because no per-theorem record exists for it yet. +Census (PROOF-POLICY §8.4), counted per theorem on 2026-11-09 over the 722 +headline pins in the `using` clauses of `proofs/agda/Smoke.agda` (the pins +include some definitions as well as theorems): `PWG-1` 0, `PWG-2ii` 5, +`PWG-2i` 0, `PWG-3` 0, `ungraded` 717. The five graded theorems are the +`EchoSearchExample` headlines above; every other pin is `ungraded` because no +per-theorem record exists for it yet. Agda results for the whole closure are dated checks, not grades. == Agda cold check (2026-11-09) diff --git a/proofs/RECHECK-EchoSearchExample.adoc b/proofs/RECHECK-EchoSearchExample.adoc index 8e1fe20..c4c1bbd 100644 --- a/proofs/RECHECK-EchoSearchExample.adoc +++ b/proofs/RECHECK-EchoSearchExample.adoc @@ -22,7 +22,9 @@ differences and the owner's acceptance together as the bridge record. `PWG-1` additionally needs current receipts from the pinned CI lanes (`check`, `cold-check`, `rocq-recheck`, `lean-recheck`) on the exact source -commit for every witness. Those lanes now run on every push. +commit for every witness. Those lanes run on pull requests, on pushes to +`main` and `master`, and on manual dispatch; a push to any other branch with +no open pull request produces no receipt. ==== == Ledger @@ -181,21 +183,25 @@ are differences between the systems and are listed as the policy requires. * Log: `docs/receipts/agda-cold-2026-11-09.log.gz`. The uncompressed log has sha256 `7f9de4d1f874a0f249eadeb3fc675be346f437cb28cb31fd3e6db1b635e54eb0`. -*Rocq leg.* `proofs/rocq/EchoSearchExample.v` sha256 -`548777f6d03abf60aece1d12e5d0bf52ffa5da25be636d937c28e360a981813d`, checked +*Rocq leg.* Source: `hyperpolymath/echo-types` at commit +`7e9b5f446a50cc6e78faa815e8a5efe7092cdb0b`. `proofs/rocq/EchoSearchExample.v` sha256 +`2a016469af61f11daf2df82ca5ecae6d6ec4b0a2d2a6406b18fef2b516836068`, checked with Coq 8.18.0 (OCaml 4.14.1; Ubuntu `coq 8.18.0+dfsg-1build2`). Invocation: `bash scripts/check-recheck.sh rocq`, which runs `coqc -q` and requires every -`Print Assumptions` to report "Closed under the global context". Result: five -headlines, no axioms. +`Print Assumptions` to report "Closed under the global context" and requires +one for each of the five headlines by name. Result: six checks (the five +headlines and `search_as_cost_witness`), all closed, no axioms. -*Lean leg.* `proofs/lean4/EchoSearchExample.lean` sha256 -`6ef569ac214e428e57b5b2cafa6ee55994360f3591a8e4882d3a4e4ae406fb98`, checked +*Lean leg.* Source: `hyperpolymath/echo-types` at commit +`7e9b5f446a50cc6e78faa815e8a5efe7092cdb0b`. `proofs/lean4/EchoSearchExample.lean` sha256 +`fdb271bfbaa9b1feeee99fce767cf269c8dbaa3da374d870300413ffa4068d94`, checked with Lean 4.30.0 (commit `d024af099ca4bf2c86f649261ebf59565dc8c622`; release archive sha256 `4dad74141c2c119ca1aa626656be83b8e14238afba97271fd7bf1eb3f081b319`). Core only, with no imports and no Mathlib. Invocation: `bash scripts/check-recheck.sh lean`, which requires no error, warning or -`sorry`, and every `#print axioms` to report none. Result: five headlines, no -axioms. +`sorry`, every `#print axioms` to report none, and an axiom-free result for +each of the five headlines by name. Result: six checks (the five headlines +and `searchAsCostWitness`), no axioms. *Sensitivity.* Planted errors make each leg fail: `double` changed to add one, and the decided budget changed from 4 to 3, which leaves the witness out of