proof_frog 0.2.0__tar.gz → 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {proof_frog-0.2.0 → proof_frog-0.6.0}/.github/workflows/black.yml +6 -2
- proof_frog-0.6.0/.github/workflows/emacs-lint.yml +34 -0
- proof_frog-0.6.0/.github/workflows/emacs-release.yml +47 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/.github/workflows/mypy.yml +5 -2
- {proof_frog-0.2.0 → proof_frog-0.6.0}/.github/workflows/pylint.yml +5 -2
- {proof_frog-0.2.0 → proof_frog-0.6.0}/.github/workflows/test.yml +7 -4
- proof_frog-0.6.0/.gitignore +18 -0
- proof_frog-0.6.0/CLAUDE.md +192 -0
- proof_frog-0.6.0/CLAUDE_MCP.md +322 -0
- proof_frog-0.6.0/Makefile +45 -0
- proof_frog-0.6.0/PKG-INFO +117 -0
- proof_frog-0.6.0/README.md +75 -0
- proof_frog-0.6.0/RELEASE.md +50 -0
- proof_frog-0.6.0/docs/latex-export.md +85 -0
- proof_frog-0.6.0/emacs/Makefile +63 -0
- proof_frog-0.6.0/emacs/README.md +175 -0
- proof_frog-0.6.0/emacs/prooffrog-mode.el +426 -0
- proof_frog-0.6.0/examples/.gitignore +5 -0
- proof_frog-0.6.0/examples/Games/Group/CDH.game +37 -0
- proof_frog-0.6.0/examples/Games/Group/DDH.game +25 -0
- proof_frog-0.6.0/examples/Games/Group/DDHMultiChal.game +35 -0
- proof_frog-0.6.0/examples/Games/Group/GapCDH.game +54 -0
- proof_frog-0.6.0/examples/Games/Group/GapCDH_NZ.game +51 -0
- proof_frog-0.6.0/examples/Games/Group/HashedDDH.game +35 -0
- proof_frog-0.6.0/examples/Games/Group/HashedDDHMultiChal.game +48 -0
- proof_frog-0.6.0/examples/Games/Hash/Regularity.game +32 -0
- proof_frog-0.6.0/examples/Games/Helpers/Probability/DistinctSampling.game +48 -0
- proof_frog-0.6.0/examples/Games/Helpers/Probability/NonzeroSampling.game +41 -0
- proof_frog-0.6.0/examples/Games/Helpers/Probability/ROFreshSampling.game +63 -0
- proof_frog-0.6.0/examples/Games/Helpers/Probability/ROFreshSampling2.game +70 -0
- proof_frog-0.6.0/examples/Games/Helpers/Probability/ROFreshSampling3.game +80 -0
- proof_frog-0.6.0/examples/Games/Helpers/Probability/ROFreshSampling4.game +90 -0
- proof_frog-0.6.0/examples/Games/Helpers/Probability/ROFreshSampling5.game +100 -0
- proof_frog-0.6.0/examples/Games/Helpers/Probability/ROMProgramming.game +58 -0
- proof_frog-0.6.0/examples/Games/Helpers/Probability/RandomTargetGuessing.game +40 -0
- proof_frog-0.6.0/examples/Games/KEM/Correctness.game +26 -0
- proof_frog-0.6.0/examples/Games/KEM/INDCCA_MultiChal.game +47 -0
- proof_frog-0.6.0/examples/Games/KEM/INDCCA_MultiChal_ROM.game +56 -0
- proof_frog-0.2.0/examples/Games/KEM/CPAKEM.game → proof_frog-0.6.0/examples/Games/KEM/INDCPA_MultiChal.game +8 -14
- proof_frog-0.2.0/examples/Games/MAC/Security.game → proof_frog-0.6.0/examples/Games/MAC/SUFCMA.game +8 -4
- proof_frog-0.6.0/examples/Games/PRF/PRFSecurity.game +29 -0
- proof_frog-0.6.0/examples/Games/PRF/PRFSecurity_MultiKey.game +20 -0
- proof_frog-0.6.0/examples/Games/PRG/PRGSecurity.game +20 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Games/PRP/Correctness.game +5 -2
- proof_frog-0.6.0/examples/Games/PubKeyEnc/Correctness.game +40 -0
- proof_frog-0.2.0/examples/Games/PubKeyEnc/CPA$.game → proof_frog-0.6.0/examples/Games/PubKeyEnc/INDCPA$_MultiChal.game +7 -8
- proof_frog-0.2.0/examples/Games/PubKeyEnc/OneTimeSecrecy.game → proof_frog-0.6.0/examples/Games/PubKeyEnc/INDCPA.game +7 -8
- proof_frog-0.2.0/examples/Games/PubKeyEnc/CPA.game → proof_frog-0.6.0/examples/Games/PubKeyEnc/INDCPA_MultiChal.game +7 -8
- proof_frog-0.6.0/examples/Games/PubKeyEnc/INDCPA_ROM_MultiChal.game +45 -0
- proof_frog-0.6.0/examples/Games/SymEnc/Correctness.game +20 -0
- proof_frog-0.2.0/examples/Games/SymEnc/CCA$.game → proof_frog-0.6.0/examples/Games/SymEnc/INDCCA$_MultiChal.game +6 -2
- proof_frog-0.2.0/examples/Games/SymEnc/CCABook.game → proof_frog-0.6.0/examples/Games/SymEnc/INDCCA_MultiChal.game +6 -2
- proof_frog-0.2.0/examples/Games/SymEnc/CPA$.game → proof_frog-0.6.0/examples/Games/SymEnc/INDCPA$_MultiChal.game +6 -2
- proof_frog-0.2.0/examples/Games/SymEnc/CPA.game → proof_frog-0.6.0/examples/Games/SymEnc/INDCPA_MultiChal.game +6 -2
- proof_frog-0.6.0/examples/Games/SymEnc/INDOT$.game +22 -0
- proof_frog-0.2.0/examples/Games/SymEnc/OneTimeSecrecy.game → proof_frog-0.6.0/examples/Games/SymEnc/INDOT.game +6 -2
- {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Games/SymEnc/KeyUniformity.game +4 -1
- proof_frog-0.6.0/examples/Primitives/Hash.primitive +8 -0
- proof_frog-0.6.0/examples/Primitives/KEM.primitive +12 -0
- proof_frog-0.6.0/examples/Primitives/MAC.primitive +11 -0
- proof_frog-0.6.0/examples/Primitives/NonNullableSymEnc.primitive +11 -0
- proof_frog-0.6.0/examples/Primitives/PRF.primitive +9 -0
- proof_frog-0.6.0/examples/Primitives/PRG.primitive +8 -0
- proof_frog-0.6.0/examples/Primitives/PRP.primitive +10 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Primitives/PubKeyEnc.primitive +4 -2
- {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Primitives/SymEnc.primitive +3 -1
- proof_frog-0.6.0/examples/Proofs/Group/CDH_implies_HashedDDH.proof +80 -0
- proof_frog-0.6.0/examples/Proofs/Group/DDHMultiChal_implies_HashedDDHMultiChal.proof +86 -0
- proof_frog-0.6.0/examples/Proofs/Group/DDH_implies_CDH.proof +78 -0
- proof_frog-0.6.0/examples/Proofs/Group/DDH_implies_HashedDDH.proof +77 -0
- proof_frog-0.6.0/examples/Proofs/Group/GapCDH_implies_GapCDH_NZ.proof +94 -0
- proof_frog-0.6.0/examples/Proofs/KEM/HashedElGamalKEM_INDCCA.proof +145 -0
- proof_frog-0.6.0/examples/Proofs/KEM/KEMPRF_Correctness.proof +54 -0
- proof_frog-0.6.0/examples/Proofs/KEM/KEMPRF_INDCCA.proof +110 -0
- proof_frog-0.6.0/examples/Proofs/KEM/KEMPRF_INDCPA.proof +105 -0
- proof_frog-0.6.0/examples/Proofs/PRF/PRFSecurity_implies_PRFSecurity_MultiKey.proof +63 -0
- proof_frog-0.6.0/examples/Proofs/PRG/CounterPRG_PRGSecurity.proof +128 -0
- proof_frog-0.6.0/examples/Proofs/PRG/TriplingPRG_PRGSecurity.proof +54 -0
- proof_frog-0.6.0/examples/Proofs/PubKeyEnc/ElGamal_Correctness.proof +27 -0
- proof_frog-0.6.0/examples/Proofs/PubKeyEnc/ElGamal_INDCPA_MultiChal.proof +69 -0
- proof_frog-0.6.0/examples/Proofs/PubKeyEnc/HashedElGamal_INDCPA_MultiChal.proof +72 -0
- proof_frog-0.6.0/examples/Proofs/PubKeyEnc/HashedElGamal_INDCPA_ROM_MultiChal.proof +139 -0
- proof_frog-0.2.0/examples/Proofs/PubEnc/KEMDEMCPA.proof → proof_frog-0.6.0/examples/Proofs/PubKeyEnc/HybridKEMDEM_INDCPA_MultiChal.proof +79 -89
- proof_frog-0.2.0/examples/Proofs/PubEnc/Hybrid.proof → proof_frog-0.6.0/examples/Proofs/PubKeyEnc/HybridPKEDEM_INDCPA_MultiChal.proof +51 -52
- proof_frog-0.6.0/examples/Proofs/PubKeyEnc/INDCPA_implies_INDCPA_MultiChal.proof +73 -0
- proof_frog-0.2.0/examples/Proofs/SymEnc/EncryptThenMACCCA.proof → proof_frog-0.6.0/examples/Proofs/SymEnc/EncryptThenMAC_INDCCA_MultiChal.proof +52 -47
- proof_frog-0.6.0/examples/Proofs/SymEnc/GeneralDoubleSymEnc_INDCPA$_MultiChal.proof +48 -0
- proof_frog-0.6.0/examples/Proofs/SymEnc/GeneralDoubleSymEnc_INDOT$.proof +49 -0
- proof_frog-0.6.0/examples/Proofs/SymEnc/INDCPA$_MultiChal_implies_INDCPA_MultiChal.proof +43 -0
- proof_frog-0.6.0/examples/Proofs/SymEnc/INDOT$_implies_DoubleSymEnc_INDOT$.proof +43 -0
- proof_frog-0.6.0/examples/Proofs/SymEnc/INDOT$_implies_INDOT.proof +56 -0
- proof_frog-0.6.0/examples/Proofs/SymEnc/ModOTP_INDOT.proof +40 -0
- proof_frog-0.6.0/examples/Proofs/SymEnc/SymEncPRF_INDCPA$_MultiChal.proof +183 -0
- proof_frog-0.6.0/examples/Proofs/SymEnc/SymEncPRF_INDOT$.proof +162 -0
- proof_frog-0.6.0/examples/README.md +54 -0
- proof_frog-0.6.0/examples/Schemes/KEM/HashedElGamalKEM.scheme +33 -0
- proof_frog-0.6.0/examples/Schemes/KEM/KEMPRF.scheme +32 -0
- proof_frog-0.6.0/examples/Schemes/PRG/CounterPRG.scheme +15 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Schemes/PRG/TriplingPRG.scheme +4 -2
- proof_frog-0.6.0/examples/Schemes/PubKeyEnc/ElGamal.scheme +24 -0
- proof_frog-0.6.0/examples/Schemes/PubKeyEnc/HashedElGamal.scheme +28 -0
- proof_frog-0.2.0/examples/Schemes/PubEnc/KEMDEM.scheme → proof_frog-0.6.0/examples/Schemes/PubKeyEnc/HybridKEMDEM.scheme +7 -7
- proof_frog-0.6.0/examples/Schemes/PubKeyEnc/HybridPKEDEM.scheme +32 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Schemes/SymEnc/DoubleSymEnc.scheme +4 -3
- {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Schemes/SymEnc/EncryptThenMAC.scheme +7 -6
- {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Schemes/SymEnc/GeneralDoubleSymEnc.scheme +4 -3
- proof_frog-0.6.0/examples/Schemes/SymEnc/ModOTP.scheme +21 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Schemes/SymEnc/OTP.scheme +3 -2
- proof_frog-0.6.0/examples/Schemes/SymEnc/SymEncPRF.scheme +26 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/GHP18_Correctness.proof +96 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/GHP18_INDCCA_First.proof +508 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/GHP18_INDCCA_Second.proof +508 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/GHP18_INDCPA_First.proof +135 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/GHP18_INDCPA_Second.proof +135 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/KEMCombiner.scheme +59 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/KEMCorrectnessKG.game +25 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/README.md +68 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRF.primitive +10 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFFirstKeyMultiKey.game +21 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFFirstKeySecurity.game +31 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFFirstKeySecurity_implies_TwoKeyPRFFirstKeyMultiKey.proof +64 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFSecondKeyMultiKey.game +21 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFSecondKeySecurity.game +31 -0
- proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFSecondKeySecurity_implies_TwoKeyPRFSecondKeyMultiKey.proof +64 -0
- proof_frog-0.6.0/examples/applications/StarHunters-COSS26/C2PRI.game +48 -0
- proof_frog-0.6.0/examples/applications/StarHunters-COSS26/CK.scheme +55 -0
- proof_frog-0.6.0/examples/applications/StarHunters-COSS26/CK_INDCCA_PostQuantum.proof +489 -0
- proof_frog-0.6.0/examples/applications/StarHunters-COSS26/CK_INDCCA_PreQuantum.proof +753 -0
- proof_frog-0.6.0/examples/applications/StarHunters-COSS26/INDCCA_PKE.game +67 -0
- proof_frog-0.6.0/examples/applications/StarHunters-COSS26/LCK.scheme +28 -0
- proof_frog-0.6.0/examples/applications/StarHunters-COSS26/LCK_INDCCA.proof +64 -0
- proof_frog-0.6.0/examples/applications/StarHunters-COSS26/PKE.primitive +12 -0
- proof_frog-0.6.0/examples/applications/StarHunters-COSS26/TwoKeyPRF.primitive +10 -0
- proof_frog-0.6.0/examples/applications/StarHunters-COSS26/TwoKeyPRFFirstKeySecurity.game +31 -0
- proof_frog-0.6.0/examples/applications/StarHunters-COSS26/TwoKeyPRFSecondKeySecurity.game +31 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/BOUNDS-CFRG-20260722.md +199 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/README.md +137 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/REPORT-CFRG-20260722.md +353 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/Group/NGCorrectness.game +35 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/Group/RandomScalarDist.game +37 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/Group/SDH.game +68 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/Group/SDH_SS.game +66 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KDF/KDFCollisionResistance.game +31 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KDF/KDFFirstKeyPRF.game +46 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KDF/KDFPRFSec.game +47 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KDF/KDFSecondKeyPRF.game +45 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/HON_BIND_K_CT_DIFFKEY.game +82 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/HON_BIND_K_CT_SAMEKEY.game +69 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/HON_BIND_K_PK.game +81 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_CT_DIFFKEY.game +64 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_CT_ROM_DIFFKEY.game +60 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_CT_ROM_SAMEKEY.game +54 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_CT_SAMEKEY.game +60 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_PK.game +61 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_PK_ROM.game +62 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/C2PRI.game +50 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Correctness.game +37 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/CorrectnessWithDK.game +31 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/INDCCA.game +49 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/INDCCA_ROM.game +60 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/KeyGenEquiv.game +29 -0
- proof_frog-0.2.0/examples/Games/PRG/Security.game → proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/PRG/PRGSec.game +7 -2
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/CGLazyROOneSeeded.ec +20 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/CGLazyROOneSeeded.game +77 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/CGLazyROTwoSeeded.ec +17 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/CGLazyROTwoSeeded.game +92 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROOneSeeded.ec +241 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROOneSeeded.game +67 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoSeeded.ec +309 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoSeeded.game +93 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoViewsExcluded.ec +273 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoViewsExcluded.game +108 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoViewsExcludedProgrammed.ec +291 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoViewsExcludedProgrammed.game +138 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/HashInputPacking.primitive +19 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/KDF.primitive +15 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/KEM.primitive +25 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/Label.primitive +14 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/NominalGroup.primitive +44 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/PRG.primitive +8 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_Correctness.proof +111 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_INDCCA_PQ.proof +468 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_INDCCA_T.proof +468 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_LEAK_BIND_K_CT_DIFFKEY.proof +156 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_LEAK_BIND_K_CT_SAMEKEY.proof +140 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_LEAK_BIND_K_PK.proof +181 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_Correctness.proof +239 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_HON_BIND_K_CT_DIFFKEY.proof +432 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_HON_BIND_K_CT_SAMEKEY.proof +339 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_HON_BIND_K_PK.proof +443 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_INDCCA_PQ.proof +637 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_INDCCA_T.proof +695 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_LEAK_BIND_K_CT_DIFFKEY.proof +485 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_LEAK_BIND_K_CT_SAMEKEY.proof +394 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_LEAK_BIND_K_PK.proof +528 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_Correctness.proof +101 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_INDCCA_PQ.proof +432 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_INDCCA_T.proof +719 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_LEAK_BIND_K_CT_DIFFKEY.proof +174 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_LEAK_BIND_K_CT_SAMEKEY.proof +135 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_LEAK_BIND_K_PK.proof +182 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_Correctness.proof +242 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_HON_BIND_K_CT_DIFFKEY.proof +517 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_HON_BIND_K_CT_SAMEKEY.proof +396 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_HON_BIND_K_PK.proof +517 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_INDCCA_PQ.proof +663 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_INDCCA_T.proof +993 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_LEAK_BIND_K_CT_DIFFKEY.proof +488 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_LEAK_BIND_K_CT_SAMEKEY.proof +372 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_LEAK_BIND_K_PK.proof +507 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/Generic/LEAK_implies_HON_BIND_K_CT_DIFFKEY.proof +74 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/Generic/LEAK_implies_HON_BIND_K_CT_SAMEKEY.proof +71 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/Generic/LEAK_implies_HON_BIND_K_PK.proof +75 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_Correctness.proof +115 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_INDCCA_PQ.proof +479 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_INDCCA_T.proof +337 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_LEAK_BIND_K_CT_DIFFKEY.proof +103 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_LEAK_BIND_K_CT_SAMEKEY.proof +99 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_LEAK_BIND_K_PK.proof +105 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_Correctness.proof +243 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_INDCCA_PQ.proof +644 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_INDCCA_T.proof +527 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_LEAK_BIND_K_CT_DIFFKEY.proof +106 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_LEAK_BIND_K_CT_SAMEKEY.proof +100 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_LEAK_BIND_K_PK.proof +106 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_Correctness.proof +96 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_INDCCA_PQ.proof +424 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_INDCCA_T.proof +510 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_LEAK_BIND_K_CT_DIFFKEY.proof +100 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_LEAK_BIND_K_CT_SAMEKEY.proof +96 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_LEAK_BIND_K_PK.proof +102 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_Correctness.proof +239 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_INDCCA_PQ.proof +670 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_INDCCA_T.proof +772 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_LEAK_BIND_K_CT_DIFFKEY.proof +103 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_LEAK_BIND_K_CT_SAMEKEY.proof +98 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_LEAK_BIND_K_PK.proof +105 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CG/CGHashEncoding.scheme +55 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CG/CGRandomOracleKDF.scheme +27 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CG/CGRandomOraclePRG.scheme +27 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CG/CG_expanded.scheme +111 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CG/CG_seedbased.scheme +146 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CK/CKRandomOraclePRG.scheme +40 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CK/CK_expanded.scheme +96 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CK/CK_seedbased.scheme +130 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/Helpers/SeededKEMWrapper.scheme +61 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UG/UGHashEncoding.scheme +44 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UG/UGRandomOracleKDF.scheme +36 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UG/UG_expanded.scheme +113 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UG/UG_seedbased.scheme +144 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UK/UK_expanded.scheme +102 -0
- proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UK/UK_seedbased.scheme +128 -0
- proof_frog-0.6.0/examples/joy/Games/SymEnc/Correctness.game +22 -0
- proof_frog-0.6.0/examples/joy/Games/SymEnc/OneTimeSecrecy.game +22 -0
- proof_frog-0.6.0/examples/joy/Games/SymEnc/OneTimeSecrecyLR.game +23 -0
- proof_frog-0.2.0/examples/Primitives/NonNullableSymEnc.primitive → proof_frog-0.6.0/examples/joy/Primitives/SymEnc.primitive +3 -1
- proof_frog-0.6.0/examples/joy/Proofs/Ch1/OTPCorrectness.proof +23 -0
- proof_frog-0.6.0/examples/joy/Proofs/Ch2/ChainedEncryptionSecure.proof +70 -0
- proof_frog-0.6.0/examples/joy/Proofs/Ch2/OTPSecure.proof +22 -0
- proof_frog-0.6.0/examples/joy/Proofs/Ch2/OTPSecureLR.proof +49 -0
- proof_frog-0.6.0/examples/joy/README.md +38 -0
- proof_frog-0.6.0/examples/joy/Schemes/SymEnc/ChainedEncryption.scheme +34 -0
- proof_frog-0.6.0/examples/joy/Schemes/SymEnc/OTP.scheme +24 -0
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/2/2_12_DoubleOTP.scheme +5 -3
- proof_frog-0.6.0/examples/joy_old/2/2_13.proof +22 -0
- proof_frog-0.6.0/examples/joy_old/2/2_15.proof +1 -0
- proof_frog-0.6.0/examples/joy_old/2_Exercises/2_13.proof +43 -0
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/2_Exercises/2_13_SymEncSquared.scheme +6 -4
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/2_Exercises/2_14.game +3 -1
- proof_frog-0.6.0/examples/joy_old/2_Exercises/2_14_Backward.proof +52 -0
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/2_Exercises/2_14_Forward.proof +16 -14
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/2_Exercises/2_15.game +5 -3
- proof_frog-0.6.0/examples/joy_old/2_Exercises/2_15_Backward.proof +39 -0
- proof_frog-0.6.0/examples/joy_old/2_Exercises/2_15_Forward.proof +40 -0
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5/5_2_PseudoOTP.scheme +5 -3
- proof_frog-0.6.0/examples/joy_old/5/5_3.proof +50 -0
- proof_frog-0.6.0/examples/joy_old/5/5_5_TriplingPRGSecure.proof +1 -0
- proof_frog-0.6.0/examples/joy_old/5_Exercises/5_10.proof +67 -0
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5_Exercises/5_10.scheme +4 -2
- proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_PseudoOTP_OTUC.proof +48 -0
- proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_a.proof +54 -0
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5_Exercises/5_8_a.scheme +4 -2
- proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_b.proof +38 -0
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5_Exercises/5_8_b.scheme +4 -2
- proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_e.proof +46 -0
- proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_e.scheme +13 -0
- proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_f.proof +47 -0
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5_Exercises/5_8_f.scheme +4 -2
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/7_Exercises/7_13.game +3 -1
- proof_frog-0.6.0/examples/joy_old/7_Exercises/7_13_Backward.proof +52 -0
- proof_frog-0.6.0/examples/joy_old/7_Exercises/7_13_Forward.proof +40 -0
- proof_frog-0.6.0/examples/joy_old/9_Exercises/9_6_CCA$impliesCCA.proof +45 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/jupyter/Dockerfile +1 -2
- proof_frog-0.6.0/jupyter/README.md +4 -0
- proof_frog-0.6.0/jupyter/kernel/kernel.json +4 -0
- proof_frog-0.6.0/media/screenshot-web.png +0 -0
- proof_frog-0.6.0/proof_frog/_examples_pin.py +3 -0
- proof_frog-0.6.0/proof_frog/_git_sha.py +2 -0
- proof_frog-0.6.0/proof_frog/advantage.py +847 -0
- proof_frog-0.6.0/proof_frog/antlr/Game.g4 +11 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/antlr/Primitive.g4 +1 -1
- proof_frog-0.6.0/proof_frog/antlr/Proof.g4 +80 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/antlr/Scheme.g4 +1 -1
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/antlr/Shared.g4 +47 -13
- proof_frog-0.6.0/proof_frog/dependencies.py +462 -0
- proof_frog-0.6.0/proof_frog/describe.py +107 -0
- proof_frog-0.6.0/proof_frog/diagnostics.py +362 -0
- proof_frog-0.6.0/proof_frog/export/latex/__init__.py +1 -0
- proof_frog-0.6.0/proof_frog/export/latex/backends/__init__.py +5 -0
- proof_frog-0.6.0/proof_frog/export/latex/backends/base.py +38 -0
- proof_frog-0.6.0/proof_frog/export/latex/backends/cryptocode.py +227 -0
- proof_frog-0.6.0/proof_frog/export/latex/diff.py +101 -0
- proof_frog-0.6.0/proof_frog/export/latex/document.py +76 -0
- proof_frog-0.6.0/proof_frog/export/latex/exporter.py +75 -0
- proof_frog-0.6.0/proof_frog/export/latex/expr_renderer.py +560 -0
- proof_frog-0.6.0/proof_frog/export/latex/ir.py +123 -0
- proof_frog-0.6.0/proof_frog/export/latex/macros.py +204 -0
- proof_frog-0.6.0/proof_frog/export/latex/module_renderer.py +232 -0
- proof_frog-0.6.0/proof_frog/export/latex/proof_context.py +243 -0
- proof_frog-0.6.0/proof_frog/export/latex/proof_renderer.py +658 -0
- proof_frog-0.6.0/proof_frog/export/latex/stmt_renderer.py +205 -0
- proof_frog-0.6.0/proof_frog/export/latex/type_renderer.py +14 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/frog_ast.py +445 -56
- proof_frog-0.6.0/proof_frog/frog_parser.py +2125 -0
- proof_frog-0.6.0/proof_frog/lsp/__init__.py +5 -0
- proof_frog-0.6.0/proof_frog/lsp/completion.py +329 -0
- proof_frog-0.6.0/proof_frog/lsp/diagnostics.py +154 -0
- proof_frog-0.6.0/proof_frog/lsp/document_state.py +40 -0
- proof_frog-0.6.0/proof_frog/lsp/folding.py +151 -0
- proof_frog-0.6.0/proof_frog/lsp/navigation.py +299 -0
- proof_frog-0.6.0/proof_frog/lsp/proof_features.py +269 -0
- proof_frog-0.6.0/proof_frog/lsp/rename.py +158 -0
- proof_frog-0.6.0/proof_frog/lsp/server.py +296 -0
- proof_frog-0.6.0/proof_frog/lsp/symbols.py +193 -0
- proof_frog-0.6.0/proof_frog/mcp_server.py +546 -0
- proof_frog-0.6.0/proof_frog/parsing/Game.interp +179 -0
- proof_frog-0.6.0/proof_frog/parsing/Game.tokens +133 -0
- proof_frog-0.6.0/proof_frog/parsing/GameLexer.interp +227 -0
- proof_frog-0.6.0/proof_frog/parsing/GameLexer.py +313 -0
- proof_frog-0.6.0/proof_frog/parsing/GameLexer.tokens +133 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/GameParser.py +1911 -1040
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/GameVisitor.py +97 -7
- proof_frog-0.6.0/proof_frog/parsing/Primitive.interp +176 -0
- proof_frog-0.6.0/proof_frog/parsing/Primitive.tokens +131 -0
- proof_frog-0.6.0/proof_frog/parsing/PrimitiveLexer.interp +224 -0
- proof_frog-0.6.0/proof_frog/parsing/PrimitiveLexer.py +307 -0
- proof_frog-0.6.0/proof_frog/parsing/PrimitiveLexer.tokens +131 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/PrimitiveParser.py +1767 -979
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/PrimitiveVisitor.py +92 -7
- proof_frog-0.6.0/proof_frog/parsing/Proof.interp +233 -0
- proof_frog-0.6.0/proof_frog/parsing/Proof.tokens +169 -0
- proof_frog-0.6.0/proof_frog/parsing/ProofLexer.interp +281 -0
- proof_frog-0.6.0/proof_frog/parsing/ProofLexer.py +395 -0
- proof_frog-0.6.0/proof_frog/parsing/ProofLexer.tokens +169 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/ProofParser.py +3196 -1436
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/ProofVisitor.py +182 -7
- proof_frog-0.6.0/proof_frog/parsing/Scheme.interp +183 -0
- proof_frog-0.6.0/proof_frog/parsing/Scheme.tokens +137 -0
- proof_frog-0.6.0/proof_frog/parsing/SchemeLexer.interp +233 -0
- proof_frog-0.6.0/proof_frog/parsing/SchemeLexer.py +322 -0
- proof_frog-0.6.0/proof_frog/parsing/SchemeLexer.tokens +137 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/SchemeParser.py +1796 -1009
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/SchemeVisitor.py +92 -7
- proof_frog-0.6.0/proof_frog/proof_engine.py +1990 -0
- proof_frog-0.6.0/proof_frog/proof_frog.py +576 -0
- proof_frog-0.6.0/proof_frog/scaffolding.py +273 -0
- proof_frog-0.6.0/proof_frog/semantic_analysis.py +3346 -0
- proof_frog-0.6.0/proof_frog/suggestions.py +141 -0
- proof_frog-0.6.0/proof_frog/transforms/__init__.py +17 -0
- proof_frog-0.6.0/proof_frog/transforms/_base.py +286 -0
- proof_frog-0.6.0/proof_frog/transforms/_ordering.py +198 -0
- proof_frog-0.6.0/proof_frog/transforms/_requirements.py +73 -0
- proof_frog-0.6.0/proof_frog/transforms/_wrappers.py +664 -0
- proof_frog-0.6.0/proof_frog/transforms/algebraic.py +2591 -0
- proof_frog-0.6.0/proof_frog/transforms/alpha_rename.py +278 -0
- proof_frog-0.6.0/proof_frog/transforms/assumptions.py +130 -0
- proof_frog-0.6.0/proof_frog/transforms/control_flow.py +2930 -0
- proof_frog-0.6.0/proof_frog/transforms/inlining.py +5024 -0
- proof_frog-0.6.0/proof_frog/transforms/map_iteration.py +357 -0
- proof_frog-0.6.0/proof_frog/transforms/map_reindex.py +592 -0
- proof_frog-0.6.0/proof_frog/transforms/pipelines.py +235 -0
- proof_frog-0.6.0/proof_frog/transforms/random_functions.py +3957 -0
- proof_frog-0.6.0/proof_frog/transforms/sampling.py +2348 -0
- proof_frog-0.6.0/proof_frog/transforms/standardization.py +805 -0
- proof_frog-0.6.0/proof_frog/transforms/structural.py +337 -0
- proof_frog-0.6.0/proof_frog/transforms/symbolic.py +143 -0
- proof_frog-0.6.0/proof_frog/transforms/tuples.py +638 -0
- proof_frog-0.6.0/proof_frog/transforms/types.py +310 -0
- proof_frog-0.6.0/proof_frog/visitors.py +1525 -0
- proof_frog-0.6.0/proof_frog/web/app.js +288 -0
- proof_frog-0.6.0/proof_frog/web/cm-mode.js +63 -0
- proof_frog-0.6.0/proof_frog/web/editor.js +420 -0
- proof_frog-0.6.0/proof_frog/web/favicon.ico +0 -0
- proof_frog-0.6.0/proof_frog/web/file-tree.js +166 -0
- proof_frog-0.6.0/proof_frog/web/game-hops.js +121 -0
- proof_frog-0.6.0/proof_frog/web/index.html +598 -0
- proof_frog-0.6.0/proof_frog/web/inline-game.js +329 -0
- proof_frog-0.6.0/proof_frog/web/insertion.js +174 -0
- proof_frog-0.6.0/proof_frog/web/live-reload.js +131 -0
- proof_frog-0.6.0/proof_frog/web/new-file.js +73 -0
- proof_frog-0.6.0/proof_frog/web/prooffrog-128.png +0 -0
- proof_frog-0.6.0/proof_frog/web/prooffrog-16.png +0 -0
- proof_frog-0.6.0/proof_frog/web/prooffrog-180.png +0 -0
- proof_frog-0.6.0/proof_frog/web/prooffrog-32.png +0 -0
- proof_frog-0.6.0/proof_frog/web/prooffrog-48.png +0 -0
- proof_frog-0.6.0/proof_frog/web/prooffrog-64.png +0 -0
- proof_frog-0.6.0/proof_frog/web/prooffrog.png +0 -0
- proof_frog-0.6.0/proof_frog/web/resize.js +83 -0
- proof_frog-0.6.0/proof_frog/web/state.js +74 -0
- proof_frog-0.6.0/proof_frog/web/style.css +562 -0
- proof_frog-0.6.0/proof_frog/web/wizard.js +1358 -0
- proof_frog-0.6.0/proof_frog/web_server.py +1263 -0
- proof_frog-0.6.0/pyproject.toml +110 -0
- proof_frog-0.6.0/tests/integration/__init__.py +0 -0
- proof_frog-0.6.0/tests/integration/lemma_fixtures/BaseAssumption.game +17 -0
- proof_frog-0.6.0/tests/integration/lemma_fixtures/DerivedSecurity.game +17 -0
- proof_frog-0.6.0/tests/integration/lemma_fixtures/SimplePRG.primitive +5 -0
- proof_frog-0.6.0/tests/integration/lemma_fixtures/bad_lemma.proof +16 -0
- proof_frog-0.6.0/tests/integration/lemma_fixtures/lemma_proof.proof +27 -0
- proof_frog-0.6.0/tests/integration/lemma_fixtures/outer.proof +18 -0
- proof_frog-0.6.0/tests/integration/lemma_fixtures/outer_bad_lemma.proof +18 -0
- proof_frog-0.6.0/tests/integration/test_advantage_bound.py +69 -0
- proof_frog-0.6.0/tests/integration/test_ast.py +94 -0
- proof_frog-0.6.0/tests/integration/test_bound_check.py +96 -0
- proof_frog-0.6.0/tests/integration/test_check.py +37 -0
- proof_frog-0.6.0/tests/integration/test_check_gate.py +64 -0
- proof_frog-0.6.0/tests/integration/test_cli_json.py +107 -0
- proof_frog-0.6.0/tests/integration/test_diagnostics_parity.py +146 -0
- proof_frog-0.6.0/tests/integration/test_distinguishers.py +1105 -0
- proof_frog-0.6.0/tests/integration/test_file_metadata.py +189 -0
- proof_frog-0.6.0/tests/integration/test_latex_export.py +165 -0
- proof_frog-0.6.0/tests/integration/test_latex_export_proof.py +71 -0
- proof_frog-0.6.0/tests/integration/test_lemmas.py +67 -0
- proof_frog-0.6.0/tests/integration/test_proofs.py +43 -0
- proof_frog-0.6.0/tests/integration/test_rc3_control_flow.py +389 -0
- proof_frog-0.6.0/tests/integration/test_rc3_map_iteration.py +129 -0
- proof_frog-0.6.0/tests/integration/test_rc3_random_functions.py +256 -0
- proof_frog-0.6.0/tests/integration/test_rc4_alpha_rename.py +244 -0
- proof_frog-0.6.0/tests/integration/test_rc4_control_flow.py +237 -0
- proof_frog-0.6.0/tests/integration/test_rc4_random_functions.py +147 -0
- proof_frog-0.6.0/tests/integration/test_rc4_sampling.py +159 -0
- proof_frog-0.6.0/tests/integration/test_rc5_domain_invariance.py +227 -0
- proof_frog-0.6.0/tests/integration/test_scaffolding.py +361 -0
- proof_frog-0.6.0/tests/integration/test_this_keyword.py +46 -0
- proof_frog-0.6.0/tests/integration/test_web_server.py +254 -0
- proof_frog-0.6.0/tests/unit/__init__.py +0 -0
- proof_frog-0.6.0/tests/unit/engine/__init__.py +0 -0
- proof_frog-0.6.0/tests/unit/engine/test_advantage.py +495 -0
- proof_frog-0.6.0/tests/unit/engine/test_apply_reduction.py +308 -0
- proof_frog-0.6.0/tests/unit/engine/test_canonicalization_trace.py +96 -0
- proof_frog-0.6.0/tests/unit/engine/test_extract_subsets_pairs.py +62 -0
- proof_frog-0.6.0/tests/unit/engine/test_inliner_early_return.py +433 -0
- proof_frog-0.6.0/tests/unit/engine/test_inliner_name_collision.py +206 -0
- proof_frog-0.6.0/tests/unit/engine/test_inliner_nested_calls.py +211 -0
- proof_frog-0.6.0/tests/unit/engine/test_modint_proof_engine.py +702 -0
- proof_frog-0.6.0/tests/unit/engine/test_non_interchangeable.py +213 -0
- proof_frog-0.6.0/tests/unit/engine/test_resolve_step_game.py +23 -0
- proof_frog-0.6.0/tests/unit/engine/test_this_inlining.py +135 -0
- proof_frog-0.6.0/tests/unit/engine/test_z3_residual_equivalence.py +200 -0
- proof_frog-0.6.0/tests/unit/export/__init__.py +0 -0
- proof_frog-0.6.0/tests/unit/export/latex/__init__.py +0 -0
- proof_frog-0.6.0/tests/unit/export/latex/fixtures/destructuring.game +22 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_backend_cryptocode.py +270 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_destructuring_render.py +107 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_diff.py +133 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_expr_decorations.py +123 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_expr_renderer.py +252 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_expr_typed_ops.py +88 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_expr_xor.py +62 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_include_mode.py +97 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_ir.py +33 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_macros.py +118 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_pdflatex_smoke.py +64 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_pdflatex_sweep.py +78 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_proof_context.py +124 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_proof_renderer.py +327 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_render_game.py +56 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_render_primitive.py +76 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_render_scheme.py +22 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_stmt_renderer.py +174 -0
- proof_frog-0.6.0/tests/unit/export/latex/test_type_renderer.py +43 -0
- proof_frog-0.6.0/tests/unit/other/__init__.py +0 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/other}/test_dependencies.py +1 -1
- proof_frog-0.6.0/tests/unit/other/test_describe.py +126 -0
- proof_frog-0.6.0/tests/unit/other/test_path_security.py +193 -0
- proof_frog-0.6.0/tests/unit/other/test_suggestions.py +121 -0
- proof_frog-0.6.0/tests/unit/parsing/__init__.py +0 -0
- proof_frog-0.6.0/tests/unit/parsing/test_advantage_clause.py +69 -0
- proof_frog-0.6.0/tests/unit/parsing/test_bitstring_literals.py +225 -0
- proof_frog-0.6.0/tests/unit/parsing/test_destructuring.py +226 -0
- proof_frog-0.6.0/tests/unit/parsing/test_expression_str.py +165 -0
- proof_frog-0.6.0/tests/unit/parsing/test_helpers_after_theorem.py +96 -0
- proof_frog-0.6.0/tests/unit/parsing/test_method_annotations.py +116 -0
- proof_frog-0.6.0/tests/unit/parsing/test_modint_parsing.py +429 -0
- proof_frog-0.6.0/tests/unit/parsing/test_parse_errors.py +515 -0
- proof_frog-0.6.0/tests/unit/parsing/test_proof_bound_clause.py +65 -0
- proof_frog-0.6.0/tests/unit/parsing/test_random_functions_parsing.py +176 -0
- proof_frog-0.6.0/tests/unit/parsing/test_requires_parse.py +60 -0
- proof_frog-0.6.0/tests/unit/parsing/test_roundtrip_surface_forms.py +143 -0
- proof_frog-0.6.0/tests/unit/parsing/test_set_minus_sampling.py +83 -0
- proof_frog-0.6.0/tests/unit/test_diagnostics.py +251 -0
- proof_frog-0.6.0/tests/unit/test_diagnostics_integration.py +146 -0
- proof_frog-0.6.0/tests/unit/test_provenance.py +126 -0
- proof_frog-0.6.0/tests/unit/transforms/__init__.py +0 -0
- proof_frog-0.6.0/tests/unit/transforms/test_absorb_redundant_early_return.py +370 -0
- proof_frog-0.6.0/tests/unit/transforms/test_alpha_rename.py +100 -0
- proof_frog-0.6.0/tests/unit/transforms/test_alpha_simplify_if.py +211 -0
- proof_frog-0.6.0/tests/unit/transforms/test_apply_assumptions.py +166 -0
- proof_frog-0.6.0/tests/unit/transforms/test_boolean_absorption.py +121 -0
- proof_frog-0.6.0/tests/unit/transforms/test_boolean_identity.py +169 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_branch_elimination.py +47 -2
- proof_frog-0.6.0/tests/unit/transforms/test_challenge_exclusion_injective.py +235 -0
- proof_frog-0.6.0/tests/unit/transforms/test_challenge_exclusion_rf.py +481 -0
- proof_frog-0.6.0/tests/unit/transforms/test_challenge_exclusion_rf_alias.py +93 -0
- proof_frog-0.6.0/tests/unit/transforms/test_challenge_exclusion_slice_guard.py +432 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_collapse_assignment.py +26 -2
- proof_frog-0.6.0/tests/unit/transforms/test_collapse_single_index_tuple.py +161 -0
- proof_frog-0.6.0/tests/unit/transforms/test_concat_equality_decompose.py +374 -0
- proof_frog-0.6.0/tests/unit/transforms/test_counter_guarded_field_to_local.py +698 -0
- proof_frog-0.6.0/tests/unit/transforms/test_cross_method_cse.py +537 -0
- proof_frog-0.6.0/tests/unit/transforms/test_dead_guarded_assignment_elimination.py +228 -0
- proof_frog-0.6.0/tests/unit/transforms/test_dead_null_guard.py +141 -0
- proof_frog-0.6.0/tests/unit/transforms/test_dedup_deterministic.py +424 -0
- proof_frog-0.6.0/tests/unit/transforms/test_deterministic_transforms.py +315 -0
- proof_frog-0.6.0/tests/unit/transforms/test_distinct_const_rf_to_uniform.py +352 -0
- proof_frog-0.6.0/tests/unit/transforms/test_else_unwrap.py +170 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_expand_tuples.py +108 -21
- proof_frog-0.6.0/tests/unit/transforms/test_extract_repeated_tuple_access.py +289 -0
- proof_frog-0.6.0/tests/unit/transforms/test_extract_rf_calls.py +93 -0
- proof_frog-0.6.0/tests/unit/transforms/test_factor_common_guard.py +360 -0
- proof_frog-0.6.0/tests/unit/transforms/test_field_lex_min_by_rhs.py +197 -0
- proof_frog-0.6.0/tests/unit/transforms/test_flatten_concat_chain.py +182 -0
- proof_frog-0.6.0/tests/unit/transforms/test_fold_equivalent_return_branch.py +180 -0
- proof_frog-0.6.0/tests/unit/transforms/test_fold_tuple_deterministic.py +99 -0
- proof_frog-0.6.0/tests/unit/transforms/test_fold_tuple_index.py +93 -0
- proof_frog-0.6.0/tests/unit/transforms/test_forward_expression_alias.py +299 -0
- proof_frog-0.6.0/tests/unit/transforms/test_fresh_input_rf_to_uniform.py +390 -0
- proof_frog-0.6.0/tests/unit/transforms/test_function_determinism.py +103 -0
- proof_frog-0.6.0/tests/unit/transforms/test_groupelem_cancellation.py +210 -0
- proof_frog-0.6.0/tests/unit/transforms/test_groupelem_simplification.py +222 -0
- proof_frog-0.6.0/tests/unit/transforms/test_guard_condition_simplification.py +199 -0
- proof_frog-0.6.0/tests/unit/transforms/test_hoist_deterministic_call_to_initialize.py +872 -0
- proof_frog-0.6.0/tests/unit/transforms/test_hoist_duplicate_branch.py +109 -0
- proof_frog-0.6.0/tests/unit/transforms/test_hoist_field_pure_alias.py +261 -0
- proof_frog-0.6.0/tests/unit/transforms/test_hoist_group_exp_to_initialize.py +300 -0
- proof_frog-0.6.0/tests/unit/transforms/test_if_condition_alias.py +617 -0
- proof_frog-0.6.0/tests/unit/transforms/test_if_condition_alias_array_access.py +44 -0
- proof_frog-0.6.0/tests/unit/transforms/test_if_false_return_to_conjunction.py +283 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_if_simplification.py +3 -2
- proof_frog-0.6.0/tests/unit/transforms/test_if_split_branch_assignment.py +177 -0
- proof_frog-0.6.0/tests/unit/transforms/test_if_to_boolean_assignment.py +181 -0
- proof_frog-0.6.0/tests/unit/transforms/test_injective_equality_group_exp.py +291 -0
- proof_frog-0.6.0/tests/unit/transforms/test_injective_equality_simplify.py +296 -0
- proof_frog-0.6.0/tests/unit/transforms/test_inline_multi_use_pure.py +201 -0
- proof_frog-0.6.0/tests/unit/transforms/test_inline_single_use_field.py +596 -0
- proof_frog-0.6.0/tests/unit/transforms/test_inline_single_use_field_via_local_promotion.py +244 -0
- proof_frog-0.6.0/tests/unit/transforms/test_inline_single_use_variable.py +328 -0
- proof_frog-0.6.0/tests/unit/transforms/test_lazy_map_pair_to_sampled_function.py +399 -0
- proof_frog-0.6.0/tests/unit/transforms/test_lazy_map_scan.py +731 -0
- proof_frog-0.6.0/tests/unit/transforms/test_lazy_map_to_sampled_function.py +540 -0
- proof_frog-0.6.0/tests/unit/transforms/test_local_function_field_to_let.py +266 -0
- proof_frog-0.6.0/tests/unit/transforms/test_local_rf_to_uniform.py +240 -0
- proof_frog-0.6.0/tests/unit/transforms/test_localize_init_only_field_sample.py +124 -0
- proof_frog-0.6.0/tests/unit/transforms/test_map_key_reindex.py +345 -0
- proof_frog-0.6.0/tests/unit/transforms/test_map_key_reindex_prime_order.py +117 -0
- proof_frog-0.6.0/tests/unit/transforms/test_map_key_reindex_soundness.py +221 -0
- proof_frog-0.6.0/tests/unit/transforms/test_merge_product_samples.py +158 -0
- proof_frog-0.6.0/tests/unit/transforms/test_merge_uniform_samples.py +193 -0
- proof_frog-0.6.0/tests/unit/transforms/test_modint_visitors.py +240 -0
- proof_frog-0.6.0/tests/unit/transforms/test_near_misses.py +2263 -0
- proof_frog-0.6.0/tests/unit/transforms/test_normalize_commutative.py +177 -0
- proof_frog-0.6.0/tests/unit/transforms/test_normalize_product_literal.py +291 -0
- proof_frog-0.6.0/tests/unit/transforms/test_ordering.py +321 -0
- proof_frog-0.6.0/tests/unit/transforms/test_parameter_standardizing.py +124 -0
- proof_frog-0.6.0/tests/unit/transforms/test_redundant_conditional_return.py +231 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_redundant_copies.py +21 -2
- proof_frog-0.6.0/tests/unit/transforms/test_redundant_field_copy.py +235 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_remove_duplicate_fields.py +53 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_remove_unnecessary_statements.py +21 -0
- proof_frog-0.6.0/tests/unit/transforms/test_requirements_helpers.py +61 -0
- proof_frog-0.6.0/tests/unit/transforms/test_simplify_not.py +110 -0
- proof_frog-0.6.0/tests/unit/transforms/test_simplify_return.py +293 -0
- proof_frog-0.6.0/tests/unit/transforms/test_single_call_field_to_local.py +445 -0
- proof_frog-0.6.0/tests/unit/transforms/test_single_call_field_to_local_f056.py +54 -0
- proof_frog-0.6.0/tests/unit/transforms/test_sink_uniform_sample.py +270 -0
- proof_frog-0.6.0/tests/unit/transforms/test_slice_of_inline_concat.py +229 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_slice_simplification.py +71 -4
- proof_frog-0.6.0/tests/unit/transforms/test_split_opaque_tuple_field.py +219 -0
- proof_frog-0.6.0/tests/unit/transforms/test_split_uniform_samples.py +408 -0
- proof_frog-0.6.0/tests/unit/transforms/test_stabilize_independent.py +254 -0
- proof_frog-0.6.0/tests/unit/transforms/test_subset_type_normalizer.py +415 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_symbolic_computation_transformer.py +36 -4
- proof_frog-0.6.0/tests/unit/transforms/test_tuple_equality_decompose.py +84 -0
- proof_frog-0.6.0/tests/unit/transforms/test_uniform_bijection_elimination.py +332 -0
- proof_frog-0.6.0/tests/unit/transforms/test_uniform_modint_simplification.py +105 -0
- proof_frog-0.6.0/tests/unit/transforms/test_uniform_xor_simplification.py +184 -0
- proof_frog-0.6.0/tests/unit/transforms/test_uniq_exclusion_branch_elim.py +448 -0
- proof_frog-0.6.0/tests/unit/transforms/test_unique_rf_simplification.py +364 -0
- proof_frog-0.6.0/tests/unit/transforms/test_unreachable_transformer.py +843 -0
- proof_frog-0.6.0/tests/unit/transforms/test_var_count_visitor.py +174 -0
- proof_frog-0.6.0/tests/unit/transforms/test_variable_standardizing.py +183 -0
- proof_frog-0.6.0/tests/unit/transforms/test_xor_cancellation.py +456 -0
- proof_frog-0.6.0/tests/unit/typechecking/__init__.py +0 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_check_type_visitor.py +472 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_compare_types.py +203 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_deterministic_sampling_free.py +117 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_generic_for_map_array.py +339 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_ill_formed.py +413 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_let_block_sampling.py +105 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_modint_type_checking.py +387 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_product_type_comparison.py +58 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_random_functions_typechecking.py +130 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_requires_semantics.py +122 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_resolve_tuple_alias.py +71 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_semantic_errors.py +485 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_this_keyword.py +103 -0
- proof_frog-0.6.0/tests/unit/typechecking/test_uniq_minus_split.py +119 -0
- proof_frog-0.6.0/tests/unit/visitors/__init__.py +0 -0
- proof_frog-0.6.0/tests/unit/visitors/test_cow_transformer.py +195 -0
- proof_frog-0.6.0/tests/unit/visitors/test_extract_subsets_pairs.py +100 -0
- proof_frog-0.6.0/tests/unit/visitors/test_instantiation_transformer.py +162 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/visitors}/test_same_field_visitor.py +52 -3
- proof_frog-0.6.0/tests/unit/visitors/test_z3_formula_visitor_opaque.py +268 -0
- proof_frog-0.6.0/tests/unit/visitors/test_z3_formula_visitor_product_type.py +106 -0
- proof_frog-0.6.0/vscode-extension/.vscodeignore +8 -0
- proof_frog-0.6.0/vscode-extension/LICENSE +21 -0
- proof_frog-0.6.0/vscode-extension/README.md +42 -0
- proof_frog-0.6.0/vscode-extension/language-configuration.json +26 -0
- proof_frog-0.6.0/vscode-extension/package-lock.json +4471 -0
- proof_frog-0.6.0/vscode-extension/package.json +86 -0
- proof_frog-0.6.0/vscode-extension/prooffrog.png +0 -0
- proof_frog-0.6.0/vscode-extension/src/extension.ts +172 -0
- proof_frog-0.6.0/vscode-extension/src/proof_tree.ts +87 -0
- proof_frog-0.6.0/vscode-extension/syntaxes/prooffrog.tmLanguage.json +124 -0
- proof_frog-0.6.0/vscode-extension/tsconfig.json +15 -0
- proof_frog-0.2.0/.gitignore +0 -5
- proof_frog-0.2.0/.vscode/launch.json +0 -18
- proof_frog-0.2.0/.vscode/settings.json +0 -11
- proof_frog-0.2.0/PKG-INFO +0 -51
- proof_frog-0.2.0/README.md +0 -35
- proof_frog-0.2.0/examples/Book/2/2_13.proof +0 -33
- proof_frog-0.2.0/examples/Book/2/2_15.proof +0 -1
- proof_frog-0.2.0/examples/Book/2_Exercises/2_13.proof +0 -40
- proof_frog-0.2.0/examples/Book/2_Exercises/2_14_Backward.proof +0 -50
- proof_frog-0.2.0/examples/Book/2_Exercises/2_15_Backward.proof +0 -37
- proof_frog-0.2.0/examples/Book/2_Exercises/2_15_Forward.proof +0 -38
- proof_frog-0.2.0/examples/Book/5/5_3.proof +0 -78
- proof_frog-0.2.0/examples/Book/5/5_5_TriplingPRGSecure.proof +0 -1
- proof_frog-0.2.0/examples/Book/5_Exercises/5_10.proof +0 -94
- proof_frog-0.2.0/examples/Book/5_Exercises/5_8_PseudoOTP_OTUC.proof +0 -46
- proof_frog-0.2.0/examples/Book/5_Exercises/5_8_ThreePartBitStringSampling.game +0 -17
- proof_frog-0.2.0/examples/Book/5_Exercises/5_8_a.proof +0 -85
- proof_frog-0.2.0/examples/Book/5_Exercises/5_8_b.proof +0 -65
- proof_frog-0.2.0/examples/Book/5_Exercises/5_8_e.proof +0 -44
- proof_frog-0.2.0/examples/Book/5_Exercises/5_8_e.scheme +0 -12
- proof_frog-0.2.0/examples/Book/5_Exercises/5_8_f.proof +0 -60
- proof_frog-0.2.0/examples/Book/7_Exercises/7_13_Backward.proof +0 -50
- proof_frog-0.2.0/examples/Book/7_Exercises/7_13_Forward.proof +0 -38
- proof_frog-0.2.0/examples/Book/9_Exercises/9_6_CCA$impliesCCA.proof +0 -43
- proof_frog-0.2.0/examples/Games/DigitalSignature/Security.game +0 -47
- proof_frog-0.2.0/examples/Games/Hash/Security.game +0 -29
- proof_frog-0.2.0/examples/Games/KEM/Correctness.game +0 -39
- proof_frog-0.2.0/examples/Games/KeyAgreement/Security.game +0 -17
- proof_frog-0.2.0/examples/Games/Misc/BitStringSampling.game +0 -16
- proof_frog-0.2.0/examples/Games/Misc/OTPOTS.game +0 -15
- proof_frog-0.2.0/examples/Games/Misc/OTPUniform.game +0 -15
- proof_frog-0.2.0/examples/Games/Misc/Predict.game +0 -14
- proof_frog-0.2.0/examples/Games/Misc/Sample.game +0 -18
- proof_frog-0.2.0/examples/Games/PRF/Security.game +0 -25
- proof_frog-0.2.0/examples/Games/PRP/Security.game +0 -26
- proof_frog-0.2.0/examples/Games/PRP/StrongSecurity.game +0 -42
- proof_frog-0.2.0/examples/Games/PubKeyEnc/Correctness.game +0 -37
- proof_frog-0.2.0/examples/Games/SecretSharing/Correctness.game +0 -32
- proof_frog-0.2.0/examples/Games/SecretSharing/Security.game +0 -39
- proof_frog-0.2.0/examples/Games/SymEnc/AE.game +0 -37
- proof_frog-0.2.0/examples/Games/SymEnc/CCA.game +0 -73
- proof_frog-0.2.0/examples/Games/SymEnc/Correctness.game +0 -17
- proof_frog-0.2.0/examples/Games/SymEnc/OneTimeUniformCiphertexts.game +0 -18
- proof_frog-0.2.0/examples/Primitives/DigitalSignature.primitive +0 -10
- proof_frog-0.2.0/examples/Primitives/Hash.primitive +0 -6
- proof_frog-0.2.0/examples/Primitives/KEM.primitive +0 -10
- proof_frog-0.2.0/examples/Primitives/KeyAgreement.primitive +0 -6
- proof_frog-0.2.0/examples/Primitives/MAC.primitive +0 -9
- proof_frog-0.2.0/examples/Primitives/PRF.primitive +0 -7
- proof_frog-0.2.0/examples/Primitives/PRG.primitive +0 -6
- proof_frog-0.2.0/examples/Primitives/PRP.primitive +0 -8
- proof_frog-0.2.0/examples/Primitives/SecretSharing.primitive +0 -10
- proof_frog-0.2.0/examples/Proofs/Misc/PredictIndistinguishable.proof.todo +0 -50
- proof_frog-0.2.0/examples/Proofs/Misc/SampleIndistinguishable.proof.todo +0 -56
- proof_frog-0.2.0/examples/Proofs/PRG/CounterPRGSecure.proof.todo +0 -188
- proof_frog-0.2.0/examples/Proofs/PRG/TriplingPRGSecure.proof +0 -76
- proof_frog-0.2.0/examples/Proofs/PubEnc/OTSimpliesCPA.proof +0 -63
- proof_frog-0.2.0/examples/Proofs/SecretSharing/OTPSecretSharingSecure.proof.todo +0 -152
- proof_frog-0.2.0/examples/Proofs/SymEnc/CPA$impliesCPA.proof +0 -37
- proof_frog-0.2.0/examples/Proofs/SymEnc/DoubleCPA$.proof +0 -43
- proof_frog-0.2.0/examples/Proofs/SymEnc/GeneralDoubleOTUC.proof +0 -44
- proof_frog-0.2.0/examples/Proofs/SymEnc/OTUCimpliesDoubleOTUC.proof +0 -38
- proof_frog-0.2.0/examples/Proofs/SymEnc/OTUCimpliesOTS.proof +0 -50
- proof_frog-0.2.0/examples/Proofs/SymEnc/SymEncPRFCPA$Secure.proof.todo +0 -152
- proof_frog-0.2.0/examples/README.md +0 -2
- proof_frog-0.2.0/examples/Schemes/PRG/CounterPRG.scheme +0 -15
- proof_frog-0.2.0/examples/Schemes/PubEnc/Hybrid.scheme +0 -27
- proof_frog-0.2.0/examples/Schemes/SecretSharing/OTP.scheme +0 -18
- proof_frog-0.2.0/examples/Schemes/SymEnc/OFB.scheme +0 -38
- proof_frog-0.2.0/examples/Schemes/SymEnc/SymEncPRF.scheme +0 -26
- proof_frog-0.2.0/ill-formed/fixtures/EmptyPrimitive.primitive +0 -3
- proof_frog-0.2.0/ill-formed/fixtures/SimplePrimitive.primitive +0 -5
- proof_frog-0.2.0/ill-formed/fixtures/VoidFPrimitive.primitive +0 -3
- proof_frog-0.2.0/ill-formed/primitives/InvalidExpression.primitive +0 -5
- proof_frog-0.2.0/ill-formed/primitives/InvalidMethodParameterType.primitive +0 -9
- proof_frog-0.2.0/ill-formed/primitives/InvalidMethodReturnType.primitive +0 -9
- proof_frog-0.2.0/ill-formed/primitives/InvalidParameter.primitive +0 -5
- proof_frog-0.2.0/ill-formed/primitives/MismatchedType.primitive +0 -3
- proof_frog-0.2.0/ill-formed/primitives/RepeatedField.primitive +0 -4
- proof_frog-0.2.0/ill-formed/primitives/RepeatedMethod.primitive +0 -4
- proof_frog-0.2.0/ill-formed/primitives/RepeatedMethodParam.primitive +0 -6
- proof_frog-0.2.0/ill-formed/primitives/RepeatedParameter.primitive +0 -3
- proof_frog-0.2.0/ill-formed/primitives/UndefinedType.primitive +0 -3
- proof_frog-0.2.0/ill-formed/scheme/BadIf.scheme +0 -10
- proof_frog-0.2.0/ill-formed/scheme/IncorrectReturn.scheme +0 -9
- proof_frog-0.2.0/ill-formed/scheme/general/InvalidExpression.scheme +0 -7
- proof_frog-0.2.0/ill-formed/scheme/general/InvalidParameter.scheme +0 -7
- proof_frog-0.2.0/ill-formed/scheme/general/MismatchedType.scheme +0 -5
- proof_frog-0.2.0/ill-formed/scheme/general/RepeatedField.scheme +0 -6
- proof_frog-0.2.0/ill-formed/scheme/general/RepeatedMethod.scheme +0 -6
- proof_frog-0.2.0/ill-formed/scheme/general/RepeatedMethodParam.scheme +0 -8
- proof_frog-0.2.0/ill-formed/scheme/general/RepeatedParameter.scheme +0 -5
- proof_frog-0.2.0/ill-formed/scheme/general/UndefinedType.scheme +0 -5
- proof_frog-0.2.0/ill-formed/scheme/scheme-specific/IncorrectOverride.scheme +0 -7
- proof_frog-0.2.0/ill-formed/scheme/scheme-specific/NonExistentExtend.scheme +0 -3
- proof_frog-0.2.0/ill-formed/scheme/scheme-specific/NotOverridingFields.scheme +0 -7
- proof_frog-0.2.0/ill-formed/scheme/scheme-specific/NotOverridingMethods.scheme +0 -5
- proof_frog-0.2.0/jupyter/kernel/kernel.json +0 -4
- proof_frog-0.2.0/proof_frog/antlr/Game.g4 +0 -7
- proof_frog-0.2.0/proof_frog/antlr/Proof.g4 +0 -46
- proof_frog-0.2.0/proof_frog/dependencies.py +0 -241
- proof_frog-0.2.0/proof_frog/frog_parser.py +0 -739
- proof_frog-0.2.0/proof_frog/parsing/Game.interp +0 -153
- proof_frog-0.2.0/proof_frog/parsing/Game.tokens +0 -112
- proof_frog-0.2.0/proof_frog/parsing/GameLexer.interp +0 -194
- proof_frog-0.2.0/proof_frog/parsing/GameLexer.py +0 -257
- proof_frog-0.2.0/proof_frog/parsing/GameLexer.tokens +0 -112
- proof_frog-0.2.0/proof_frog/parsing/Primitive.interp +0 -153
- proof_frog-0.2.0/proof_frog/parsing/Primitive.tokens +0 -112
- proof_frog-0.2.0/proof_frog/parsing/PrimitiveLexer.interp +0 -194
- proof_frog-0.2.0/proof_frog/parsing/PrimitiveLexer.py +0 -257
- proof_frog-0.2.0/proof_frog/parsing/PrimitiveLexer.tokens +0 -112
- proof_frog-0.2.0/proof_frog/parsing/Proof.interp +0 -189
- proof_frog-0.2.0/proof_frog/parsing/Proof.tokens +0 -136
- proof_frog-0.2.0/proof_frog/parsing/ProofLexer.interp +0 -230
- proof_frog-0.2.0/proof_frog/parsing/ProofLexer.py +0 -314
- proof_frog-0.2.0/proof_frog/parsing/ProofLexer.tokens +0 -136
- proof_frog-0.2.0/proof_frog/parsing/Scheme.interp +0 -160
- proof_frog-0.2.0/proof_frog/parsing/Scheme.tokens +0 -118
- proof_frog-0.2.0/proof_frog/parsing/SchemeLexer.interp +0 -203
- proof_frog-0.2.0/proof_frog/parsing/SchemeLexer.py +0 -270
- proof_frog-0.2.0/proof_frog/parsing/SchemeLexer.tokens +0 -118
- proof_frog-0.2.0/proof_frog/proof_engine.py +0 -792
- proof_frog-0.2.0/proof_frog/proof_frog.py +0 -86
- proof_frog-0.2.0/proof_frog/semantic_analysis.py +0 -1273
- proof_frog-0.2.0/proof_frog/visitors.py +0 -1625
- proof_frog-0.2.0/pyproject.toml +0 -70
- proof_frog-0.2.0/regenerateParser.sh +0 -11
- proof_frog-0.2.0/requirements-dev.txt +0 -5
- proof_frog-0.2.0/requirements.txt +0 -4
- proof_frog-0.2.0/testAST.sh +0 -46
- proof_frog-0.2.0/testParsing.sh +0 -29
- proof_frog-0.2.0/testProofTypeCheck.sh +0 -9
- proof_frog-0.2.0/testProofs.sh +0 -26
- proof_frog-0.2.0/tests/test_simplify_return.py +0 -63
- proof_frog-0.2.0/tests/test_unreachable_transformer.py +0 -368
- {proof_frog-0.2.0 → proof_frog-0.6.0}/.gitattributes +0 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/.gitmodules +0 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/LICENSE +0 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/LICENSE +0 -0
- {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5/5_4_TriplingPRG.scheme +0 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/jupyter/example/OTUCimpliesOTS.ipynb +0 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0/jupyter}/jupyter_kernel.py +0 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/media/NSERC.jpg +0 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/__init__.py +0 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/__main__.py +0 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/__init__.py +0 -0
- {proof_frog-0.2.0 → proof_frog-0.6.0}/tests/__init__.py +0 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_remove_unnecessary_field.py +0 -0
- {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/visitors}/test_substitution_transformer.py +0 -0
|
@@ -4,16 +4,18 @@ on:
|
|
|
4
4
|
push:
|
|
5
5
|
branches:
|
|
6
6
|
- main
|
|
7
|
+
- dev
|
|
7
8
|
pull_request:
|
|
8
9
|
branches:
|
|
9
10
|
- main
|
|
11
|
+
- dev
|
|
10
12
|
|
|
11
13
|
jobs:
|
|
12
14
|
build:
|
|
13
15
|
runs-on: ubuntu-latest
|
|
14
16
|
strategy:
|
|
15
17
|
matrix:
|
|
16
|
-
python-version: ["3.
|
|
18
|
+
python-version: ["3.11"]
|
|
17
19
|
steps:
|
|
18
20
|
- uses: actions/checkout@v3
|
|
19
21
|
- name: Set up Python ${{ matrix.python-version }}
|
|
@@ -23,7 +25,9 @@ jobs:
|
|
|
23
25
|
- name: Install dependencies
|
|
24
26
|
run: |
|
|
25
27
|
python -m pip install --upgrade pip
|
|
26
|
-
pip install -
|
|
28
|
+
pip install -e ".[dev]"
|
|
29
|
+
- name: Generate examples pin
|
|
30
|
+
run: make examples-pin
|
|
27
31
|
- name: black
|
|
28
32
|
run: |
|
|
29
33
|
black --check proof_frog
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: emacs-lint
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths: ["emacs/**"]
|
|
7
|
+
pull_request:
|
|
8
|
+
branches: [main]
|
|
9
|
+
paths: ["emacs/**"]
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
lint:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
strategy:
|
|
15
|
+
matrix:
|
|
16
|
+
emacs-version: ["27.2", "28.2", "29.4"]
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- uses: purcell/setup-emacs@master
|
|
21
|
+
with:
|
|
22
|
+
version: ${{ matrix.emacs-version }}
|
|
23
|
+
|
|
24
|
+
- name: Byte-compile
|
|
25
|
+
working-directory: emacs
|
|
26
|
+
run: make compile
|
|
27
|
+
|
|
28
|
+
- name: Package-lint
|
|
29
|
+
working-directory: emacs
|
|
30
|
+
run: make lint
|
|
31
|
+
|
|
32
|
+
- name: Checkdoc
|
|
33
|
+
working-directory: emacs
|
|
34
|
+
run: make checkdoc
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
name: emacs-release
|
|
2
|
+
|
|
3
|
+
# Triggered only by emacs-specific release tags (e.g. emacs-v0.1.0), mirroring
|
|
4
|
+
# the vscode-v* tag convention. This must NOT fire on the main ProofFrog
|
|
5
|
+
# release tags (v0.5.0, ...), which ship the Python package, not the Emacs mode.
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
tags: ["emacs-v*"]
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
release:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
permissions:
|
|
14
|
+
contents: write
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- uses: purcell/setup-emacs@master
|
|
19
|
+
with:
|
|
20
|
+
version: "29.4"
|
|
21
|
+
|
|
22
|
+
- name: Update version from tag
|
|
23
|
+
working-directory: emacs
|
|
24
|
+
run: |
|
|
25
|
+
VERSION="${GITHUB_REF_NAME#emacs-v}"
|
|
26
|
+
sed -i "s/;; Version: .*/;; Version: ${VERSION}/" prooffrog-mode.el
|
|
27
|
+
|
|
28
|
+
- name: Byte-compile
|
|
29
|
+
working-directory: emacs
|
|
30
|
+
run: make compile
|
|
31
|
+
|
|
32
|
+
- name: Package-lint
|
|
33
|
+
working-directory: emacs
|
|
34
|
+
run: make lint
|
|
35
|
+
|
|
36
|
+
- name: Build package tarball
|
|
37
|
+
working-directory: emacs
|
|
38
|
+
run: make package
|
|
39
|
+
|
|
40
|
+
- name: Create release with package asset
|
|
41
|
+
env:
|
|
42
|
+
GH_TOKEN: ${{ github.token }}
|
|
43
|
+
run: |
|
|
44
|
+
VERSION="${GITHUB_REF_NAME#emacs-v}"
|
|
45
|
+
gh release create "$GITHUB_REF_NAME" emacs/prooffrog-mode-*.tar \
|
|
46
|
+
--title "prooffrog-mode ${VERSION}" \
|
|
47
|
+
--notes "Emacs package release for prooffrog-mode ${VERSION}"
|
|
@@ -4,9 +4,11 @@ on:
|
|
|
4
4
|
push:
|
|
5
5
|
branches:
|
|
6
6
|
- main
|
|
7
|
+
- dev
|
|
7
8
|
pull_request:
|
|
8
9
|
branches:
|
|
9
10
|
- main
|
|
11
|
+
- dev
|
|
10
12
|
|
|
11
13
|
jobs:
|
|
12
14
|
build:
|
|
@@ -23,8 +25,9 @@ jobs:
|
|
|
23
25
|
- name: Install dependencies
|
|
24
26
|
run: |
|
|
25
27
|
python -m pip install --upgrade pip
|
|
26
|
-
pip install -
|
|
27
|
-
|
|
28
|
+
pip install -e ".[dev]"
|
|
29
|
+
- name: Generate examples pin
|
|
30
|
+
run: make examples-pin
|
|
28
31
|
- name: mypy
|
|
29
32
|
run: |
|
|
30
33
|
mypy proof_frog --no-warn-unused-ignores
|
|
@@ -4,9 +4,11 @@ on:
|
|
|
4
4
|
push:
|
|
5
5
|
branches:
|
|
6
6
|
- main
|
|
7
|
+
- dev
|
|
7
8
|
pull_request:
|
|
8
9
|
branches:
|
|
9
10
|
- main
|
|
11
|
+
- dev
|
|
10
12
|
|
|
11
13
|
jobs:
|
|
12
14
|
build:
|
|
@@ -23,8 +25,9 @@ jobs:
|
|
|
23
25
|
- name: Install dependencies
|
|
24
26
|
run: |
|
|
25
27
|
python -m pip install --upgrade pip
|
|
26
|
-
pip install -
|
|
27
|
-
|
|
28
|
+
pip install -e ".[dev]"
|
|
29
|
+
- name: Generate examples pin
|
|
30
|
+
run: make examples-pin
|
|
28
31
|
- name: Analysing the code with pylint
|
|
29
32
|
run: |
|
|
30
33
|
pylint proof_frog
|
|
@@ -4,9 +4,11 @@ on:
|
|
|
4
4
|
push:
|
|
5
5
|
branches:
|
|
6
6
|
- main
|
|
7
|
+
- dev
|
|
7
8
|
pull_request:
|
|
8
9
|
branches:
|
|
9
10
|
- main
|
|
11
|
+
- dev
|
|
10
12
|
|
|
11
13
|
jobs:
|
|
12
14
|
build:
|
|
@@ -25,8 +27,9 @@ jobs:
|
|
|
25
27
|
- name: Install dependencies
|
|
26
28
|
run: |
|
|
27
29
|
python -m pip install --upgrade pip
|
|
28
|
-
pip install -
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
pip install -e ".[dev]"
|
|
31
|
+
- name: Generate examples pin
|
|
32
|
+
run: make examples-pin
|
|
33
|
+
- name: run tests
|
|
31
34
|
run: |
|
|
32
|
-
|
|
35
|
+
pytest
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
**/.DS_Store
|
|
2
|
+
**/__pycache__/
|
|
3
|
+
dist
|
|
4
|
+
proofOutput.txt
|
|
5
|
+
.venv
|
|
6
|
+
.claude
|
|
7
|
+
.vscode
|
|
8
|
+
.worktrees
|
|
9
|
+
extras
|
|
10
|
+
*~
|
|
11
|
+
|
|
12
|
+
# Emacs
|
|
13
|
+
emacs/*.elc
|
|
14
|
+
|
|
15
|
+
# VSCode extension
|
|
16
|
+
vscode-extension/node_modules/
|
|
17
|
+
vscode-extension/out/
|
|
18
|
+
vscode-extension/*.vsix
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# ProofFrog Dev — Claude Instructions
|
|
2
|
+
|
|
3
|
+
## Dev Setup
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
python3 -m venv .venv
|
|
7
|
+
.venv/bin/pip install -e ".[dev]"
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Commands
|
|
11
|
+
|
|
12
|
+
- **Run tests**: `pytest` (runs in parallel via `pytest-xdist` `-n auto` by default; use `-n0` to disable). Don't use `--timeout`. Long-running tests are marked `slow` (e.g. the LaTeX-export pdflatex compile sweep in `tests/unit/export/latex/test_pdflatex_sweep.py`, skipped without `pdflatex` on PATH); deselect with `-m "not slow"`.
|
|
13
|
+
- **All CI checks**: `make lint` — runs `black --check`, `mypy`, and `pylint` in sequence (must all pass before committing)
|
|
14
|
+
- **Auto-format**: `make format` — runs `black` to reformat in place, then re-run `make lint`
|
|
15
|
+
- **CLI**: `python -m proof_frog [version|parse|check|prove|describe|step-detail|inlined-game|canonicalization-trace|step-after-transform|export-latex|download-examples|web|lsp|mcp] <file>`
|
|
16
|
+
- **Build package**: `make build` — regenerates parser, stamps examples pin, then runs `flit build`. Always use this instead of bare `flit build`.
|
|
17
|
+
- **Build VSCode extension**: `make vscode-extension`
|
|
18
|
+
- **Package VSCode extension**: `make vscode-vsix`
|
|
19
|
+
- **Regenerate parser**: `make parser` — regenerates ANTLR parsing code from grammar files into `proof_frog/parsing/`
|
|
20
|
+
- **Stamp examples pin**: `make examples-pin` — writes `proof_frog/_examples_pin.py` with the git submodule commit SHA (used by `download-examples` command). Run automatically by `make build`.
|
|
21
|
+
- **Stamp git SHA**: `make git-sha` — writes `proof_frog/_git_sha.py` with the short commit SHA of `HEAD` (used by the `version` command to annotate dev builds). Run automatically by `make build`. The `version` command prefers a live `git rev-parse` and falls back to this stamped file.
|
|
22
|
+
|
|
23
|
+
## Sandbox compatibility
|
|
24
|
+
|
|
25
|
+
Claude Code's sandbox blocks `ProcessPoolExecutor`, which the proof engine uses for parallel equivalence checking. To work around this, the engine honors the `PROOFFROG_SEQUENTIAL` environment variable: if set, `ProofEngine.__init__` forces `parallel=False` regardless of the constructor argument. This variable is set in `.claude/settings.local.json` so every command Claude spawns in this repo runs the engine sequentially. Users running the engine outside Claude are unaffected. If you need to test parallel behavior from a Claude-spawned shell, prefix the command with `env -u PROOFFROG_SEQUENTIAL`.
|
|
26
|
+
|
|
27
|
+
## CI Checks (must pass before committing)
|
|
28
|
+
|
|
29
|
+
The CI runs three checks on every push/PR to `main`. Always run `make lint` locally first.
|
|
30
|
+
|
|
31
|
+
- `black --check proof_frog` — enforces formatting (Python 3.10 compatible style)
|
|
32
|
+
- `mypy proof_frog --no-warn-unused-ignores` — strict type checking
|
|
33
|
+
- `pylint proof_frog` — style/quality linting (target: 10.00/10)
|
|
34
|
+
- `cd vscode-extension && npx tsc --noEmit` — TypeScript type checking for the VSCode extension
|
|
35
|
+
|
|
36
|
+
### Patterns for suppressions
|
|
37
|
+
- ANTLR-generated `ErrorListener` subclasses need `# type: ignore[misc]` on the class line and `# type: ignore[override, no-untyped-def]` on `syntaxError`
|
|
38
|
+
- Flask route functions inside `create_app` should use `-> Any:` return type (avoids `no-untyped-def` and `return-value` errors)
|
|
39
|
+
- Intentional broad `except Exception` catches in web/server code: `# pylint: disable=broad-exception-caught`
|
|
40
|
+
- Accesses to `_`-prefixed engine methods from outside the class: use a `# pylint: disable=protected-access` / `# pylint: enable=protected-access` block
|
|
41
|
+
- Lazy imports inside a function body (e.g. CLI subcommands): add `# pylint: disable=import-outside-toplevel` as the first line inside the function
|
|
42
|
+
- Cross-file duplicate-code warnings between related modules: add `# pylint: disable=duplicate-code` at module level with an explanatory comment
|
|
43
|
+
- `match` blocks that assign a union type: declare `var: TypeA | TypeB | TypeC` before the `match` so mypy doesn't infer the type from the first case only
|
|
44
|
+
|
|
45
|
+
## Architecture
|
|
46
|
+
|
|
47
|
+
- `proof_frog/proof_frog.py` — CLI entry point (`version`, `parse`, `check`, `prove`, `describe`, `step-detail`, `inlined-game`, `canonicalization-trace`, `step-after-transform`, `web`, `lsp`, `mcp` commands)
|
|
48
|
+
- `proof_frog/frog_ast.py` — AST node definitions
|
|
49
|
+
- `proof_frog/frog_parser.py` — ANTLR-based parser
|
|
50
|
+
- `proof_frog/proof_engine.py` — Proof verification (Z3 + SymPy). On success, `HopResult` carries per-hop advantage bookkeeping (`justification`, `reduction`, `direction`) and the engine stores the synthesized `advantage_bound`, printed after the summary table.
|
|
51
|
+
- `proof_frog/advantage.py` — Advantage-bound synthesis: a pure fold over a verified proof's `hop_results` (or the proof AST via `synthesize_from_steps`) that composes the triangle-inequality sum of per-hop losses into a SymPy expression over opaque `Adv_i` symbols. Equivalence hops contribute 0; assumption/lemma hops contribute one term each (repeats collapse to `k * Adv^X(B)`, distinct reductions numbered `B1`, `B2`, ...). Inductive proofs are reported as unsupported. No transforms, no Z3. **Tier 2 (helper-game bounds):** when a `by_assumption` hop's notion resolves to a helper `.game` file carrying a declared `advantage <= ...;` clause, `resolve_statistical` substitutes the clause's game parameters (from the assumption instantiation) and replaces the opaque term with the concrete statistical expression (set cardinalities `|S|` stay opaque positive symbols). The clause's free variables include per-oracle query counts written `count_<Oracle>`; each is *derived* by statically counting how many times the composed reduction invokes that oracle (`_derive_oracle_count` / `_count_calls_in_statements`: `Initialize` bodies count once, other reduction methods count `count_<method>` times = the theorem game's own per-oracle query count; loops multiply, `if` branches sum as an upper bound). So the synthesized bound is stated in the theorem game's query counts (e.g. `count_CTXT`, `count_Solve`), and Initialize-time sampling yields a constant. An integer `calls <= N` cap pins the surviving counts to `N` (sound, since statistical bounds are monotone in the counts). Genuine cryptographic assumptions carry no clause and stay symbolic. `AdvantageBound.substituted_expression()` gives the fully-inlined SymPy form (for Tier 3). **Tier 3 (check a claimed bound):** a proof may declare a `bound:` clause (between `theorem:` and `games:`) stating the bound the author believes it establishes: numeric arithmetic over `advantage(<notion> compose <reduction>)` references (the reduction is named from the proof file's declared reductions; `advantage(<notion>)` with no `compose` is a directly-played hop), per-oracle counts `count_<Oracle>` of the theorem game, cardinalities, and `let:` params. `check_claimed_bound` matches each `advantage(...)` reference to the synthesized term by exact `(notion, reduction)` identity (an unmatched reference becomes fresh nonnegative slack — safe), then decides `claimed - synthesized >= 0` over the nonnegativity region: SymPy for the easy cases, else Z3 over the reals (`_sympy_to_z3` / `_decide_nonnegative`; real region superset of the integer domain, so a `>= 0` proof there is sound; symbolic exponents / `unknown` / timeout => undecided, never verified). Three-valued: `verified` (claim is a valid upper bound), `not_verified` (provably smaller — fails `prove` unless `--skip-bound`, witness shown), `undecided` (warns only). The parser wraps the claim in `frog_ast.ClaimedBound` (kept opaque to the generic name-resolution/type-check walk via `Visitor.should_descend`, like `AdvantageClause`); `NameResolutionVisitor._check_claimed_bound` validates well-formedness (declared reduction composing the named notion, `count_` naming a real theorem oracle).
|
|
52
|
+
- `proof_frog/semantic_analysis.py` — Type checking / semantic analysis
|
|
53
|
+
- `proof_frog/visitors.py` — AST visitor/transformer base classes (`Visitor[U]`, `Transformer`, `BlockTransformer`) and core utility visitors/transformers (substitution, inlining, Z3/SymPy conversion, type maps)
|
|
54
|
+
- `proof_frog/transforms/` — Modular canonicalization pipeline; each file defines `TransformPass` subclasses in a specific domain (algebraic, sampling, control flow, inlining, symbolic, types, tuples, structural, standardization, assumptions, alpha-rename). `pipelines.py` assembles passes into `CORE_PIPELINE` (fixed-point canonicalization) and `STANDARDIZATION_PIPELINE` (post-canonicalization normalization). `_base.py` provides `TransformPass`, `PipelineContext`, and the `run_pipeline()`/`run_standardization()` runners.
|
|
55
|
+
- `proof_frog/diagnostics.py` — Diagnostic engine for proof hop failures (diff classification, near-miss matching, explanation generation, engine limitation detection)
|
|
56
|
+
- `proof_frog/describe.py` — Human-readable descriptions of primitives/schemes/games
|
|
57
|
+
- `proof_frog/dependencies.py` — Dependency resolution for proof files
|
|
58
|
+
- `proof_frog/mcp_server.py` — MCP server for tool-based proof interaction
|
|
59
|
+
- `proof_frog/web_server.py` — Flask web server (`web` command, branch `ds-web`). Exposes `/api/file-metadata` (GET + POST), `/api/parse`, `/api/check`, `/api/prove`, `/api/inline`, `/api/describe`, `/api/inlined-game`, and `/api/scaffold/{intermediate-game,reduction,reduction-hop}` for the toolbar Insert dropdown
|
|
60
|
+
- `proof_frog/scaffolding.py` — AST-based code-generation helpers used by the web wizard scaffold endpoints. Uses `visitors.SubstitutionTransformer` to do formal-parameter substitution when cloning game/reduction stubs (avoids `proof_engine.instantiate` because that inlines field-level type aliases too eagerly)
|
|
61
|
+
- `proof_frog/web/` — Vanilla ES module web client. The toolbar exposes file actions, an Insert ▾ dropdown listing wizards applicable to the active file, Parse / Type Check / Run Proof, and engine introspection actions (Describe, Inlined Game). `wizard.js` registers all wizards in `wizardConfig` and provides modal HTML helpers; modal HTML lives in `index.html`; `insertion.js` has line-scanning helpers for client-side structural insertion points
|
|
62
|
+
- `proof_frog/lsp/` — Language Server Protocol implementation (`lsp` command)
|
|
63
|
+
- `server.py` — pygls-based LSP server, feature registration, event handlers
|
|
64
|
+
- `document_state.py` — per-document state tracking (AST, source, parse errors)
|
|
65
|
+
- `diagnostics.py` — parse and semantic analysis error reporting
|
|
66
|
+
- `navigation.py` — go-to-definition, hover, import resolution
|
|
67
|
+
- `completion.py` — completion items, let-binding resolution, signature help
|
|
68
|
+
- `symbols.py` — document symbol provider (Outline panel)
|
|
69
|
+
- `rename.py` — rename support (F2) for local symbols
|
|
70
|
+
- `folding.py` — folding ranges for code blocks and comment groups
|
|
71
|
+
- `proof_features.py` — proof verification, code lens, proof hops tree view
|
|
72
|
+
- `vscode-extension/` — VSCode extension (TypeScript) for syntax highlighting and LSP client
|
|
73
|
+
- `proof_frog/parsing/` — ANTLR-generated code; do not edit manually
|
|
74
|
+
|
|
75
|
+
## File Types
|
|
76
|
+
|
|
77
|
+
- `.primitive` — cryptographic primitive definitions
|
|
78
|
+
- `.scheme` — cryptographic scheme definitions
|
|
79
|
+
- `.game` — game definitions
|
|
80
|
+
- `.proof` — game-hopping proof scripts
|
|
81
|
+
|
|
82
|
+
## Conventions
|
|
83
|
+
|
|
84
|
+
- **Never commit to git unless explicitly asked by the user.**
|
|
85
|
+
- Python 3.11+, built with Flit (`pyproject.toml`)
|
|
86
|
+
- `parsing/` directory is excluded from black, mypy, and pylint
|
|
87
|
+
- Proof imports and lemma paths resolve relative to the importing file's directory (`resolve_import_path` in `proof_frog/frog_parser.py`)
|
|
88
|
+
- Tests live in `tests/`, organized into `tests/integration/` (proof runs, CLI, AST checks, web server endpoints, wizard scaffolding) and `tests/unit/` (by area: engine, transforms, typechecking, visitors, parsing, other); `tests/integration/test_proofs.py` runs all `examples/**/*.proof` files as subprocesses; `tests/integration/test_web_server.py` covers `/api/file-metadata`; `tests/integration/test_scaffolding.py` covers wizard scaffold endpoints with smoke / parse-splice / type-check-splice levels
|
|
89
|
+
- Only use ASCII characters in primitive/scheme/game/proof files.
|
|
90
|
+
- LSP server uses `pygls` and communicates over stdio; uses full document sync (`TextDocumentSyncKind.Full`)
|
|
91
|
+
- The LSP caches a `last_good_ast` per document so completion/hover work even when the file has syntax errors
|
|
92
|
+
- When adding or modifying a `TransformPass` in `proof_frog/transforms/`, also add near-miss instrumentation: at key precondition-failure points where the transform almost fires but doesn't, append a `NearMiss` to `ctx.near_misses` (from `PipelineContext`). Update the engine limitation registry in `proof_frog/diagnostics.py` if the transform has known gaps. Add unit tests for near-miss reporting in `tests/unit/transforms/test_near_misses.py`.
|
|
93
|
+
- When making changes that affect architecture, commands, test structure, or conventions, update CLAUDE.md to reflect those changes.
|
|
94
|
+
|
|
95
|
+
## Domain Knowledge
|
|
96
|
+
|
|
97
|
+
ProofFrog checks the validity of transitions in a cryptographic game hopping proof (in the reduction security paradigm, part of the provable security paradigm), written in a domain-specific language called **FrogLang**.
|
|
98
|
+
|
|
99
|
+
### Components of cryptographic game hopping proofs
|
|
100
|
+
|
|
101
|
+
A **cryptographic primitive** (grammar file: `proof_frog/antlr/Primitive.g4`; extension: `.primitive`) specifies the sets and functions that define a cryptographic operation, like symmetric key encryption or digital signatures.
|
|
102
|
+
|
|
103
|
+
A **cryptographic scheme** (grammar file: `proof_frog/antlr/Scheme.g4`; extension: `.scheme`) is an instantiation of a cryptographic primitive. Often cryptographic schemes are built generically from other primitives. Scheme methods can call other methods in the same scheme using the `this` keyword (e.g., `this.DeriveKey(seed)`). During proof verification, `this` references are rewritten to the scheme's instance name so the inliner resolves them.
|
|
104
|
+
|
|
105
|
+
A **game** (grammar file: `proof_frog/antlr/Game.g4`) is a stateful set of methods, representing the adversary's interaction with a system. There are some optional state variables, an `Initialize` method that would be run once to set up the state, and then some oracle methods that the adversary would call to interact with the system.
|
|
106
|
+
|
|
107
|
+
A **cryptographic security property** (extension: `.game`) is specified as a pair of games; the two games are often called the two "sides" of the security property. In ProofFrog, security properties are specified as left/right games, where the adversary is tasked to distinguish between two games, rather than win/lose games which sometimes appear in the literature. If needed, win/lose games such as unforgeability can usually be reformulated as left/right games.
|
|
108
|
+
|
|
109
|
+
A **game hopping proof** (grammar file: `proof_frog/antlr/Proof.g4`; extension: `.proof`) is used to show that a scheme satisfies a security property, assuming certain security properties hold for underlying primitives.
|
|
110
|
+
|
|
111
|
+
- The main body of a cryptographic proof defines the sets and schemes that are involved in the proof (in a `let:` section), states the cryptographic security properties that are assumed to hold for underlying schemes (in an `assume` section), and then states a `theorem:`, which is that a particular security property holds for a target scheme. Then the proof lists a sequence of games.
|
|
112
|
+
- A key operation in a game hopping proof is **inlining**, in which two modules are composed together by inserting the source code of methods from one module into all the places where those methods are called in the other module.
|
|
113
|
+
- The first and last games in the sequence of games are the two sides of the security property composed with the target scheme.
|
|
114
|
+
- Subsequent games may be stated explicitly by providing an **intermediate game**, or implicitly by composing a game (for an underlying primitive) with a **reduction**.
|
|
115
|
+
- Each hop in the game sequence must be justified as either an **interchangeability-based hop**, in which the two adjacent games are **interchangeable** (demonstrated by code equivalence using the ProofFrog engine), or a **reduction-based hop**. A reduction-based hop is justified by exhibiting a reduction to an assumed security property and verifying that the reduction composed with each side of that property is interchangeable with the respective adjacent game.
|
|
116
|
+
- Reductions and intermediate games are separately written out at the top of the proof file.
|
|
117
|
+
- A proof may reference other proof files as **lemmas** via a `lemma:` section between `assume:` and `theorem:`. Each lemma entry has the form `SecurityProperty(params) by 'path/to/proof.proof';`. The engine verifies each lemma proof, checks that its assumptions are available, and adds the lemma's theorem to the available assumptions. Use `--skip-lemmas` on the CLI to bypass lemma verification.
|
|
118
|
+
- An **induction** argument in a game hopping proof involves a loop of games which gradually transition from one game to another.
|
|
119
|
+
|
|
120
|
+
### The ProofFrog engine
|
|
121
|
+
|
|
122
|
+
To check interchangeability of two games, the ProofFrog engine focuses primarily on manipulating the abstract syntax trees (ASTs) of games to arrive at a canonical form that is equivalent under the semantics of the domain-specific language. Some transformations dispatch logic to an SMT solver (Z3) or a symbolic computation tool (sympy) to reason about possible program simplifications.
|
|
123
|
+
|
|
124
|
+
When modifying the proof engine, be careful to ensure that transformations preserve the intended semantics of the domain-specific language. Introduce both positive and negative unit tests.
|
|
125
|
+
|
|
126
|
+
### FrogLang Quick Reference
|
|
127
|
+
|
|
128
|
+
The essentials for writing correct FrogLang:
|
|
129
|
+
|
|
130
|
+
**Types:**
|
|
131
|
+
- `Int`, `Bool`, `Void` — primitive types
|
|
132
|
+
- `BitString<n>` — bit strings of length `n` (cardinality `2^n`)
|
|
133
|
+
- `ModInt<q>` — integers mod `q` with modular arithmetic
|
|
134
|
+
- `Array<T, n>` — fixed-size arrays indexed `0` to `n-1`
|
|
135
|
+
- `Map<K, V>` — finite partial functions (initially empty; accessing an absent key is undefined)
|
|
136
|
+
- `Set<T>` — finite sets
|
|
137
|
+
- `Function<D, R>` — deterministic function from D to R; when sampled (`<-`), produces a random function (consistent on repeated inputs, independent across distinct inputs)
|
|
138
|
+
- `T?` — optional type (value of `T` or `None`)
|
|
139
|
+
- `[T1, T2, ..., Tn]` — tuples; access by constant index `t[0]`, `t[1]`
|
|
140
|
+
|
|
141
|
+
**Operators (key gotchas):**
|
|
142
|
+
- `+` on `BitString<n>` is **XOR**, not addition
|
|
143
|
+
- `||` is overloaded: logical OR on `Bool`, concatenation on `BitString`
|
|
144
|
+
- `^` is right-associative exponentiation
|
|
145
|
+
- `|x|` — cardinality/length (sets, maps, bitstrings, arrays)
|
|
146
|
+
- Set operations: `in`, `subsets`, `union`, `\` (difference)
|
|
147
|
+
- Bitstring slicing: `a[i : j]` yields `BitString<j - i>`
|
|
148
|
+
|
|
149
|
+
**Sampling:**
|
|
150
|
+
- `Type x <- Type;` — uniform random sample (e.g., `BitString<n> r <- BitString<n>;`)
|
|
151
|
+
- `Type x <-uniq[S] Type;` — sample uniformly from `Type \ S` (rejection sampling)
|
|
152
|
+
- `M[k] <- Type;` — sample into a map entry
|
|
153
|
+
- `Function<D, R> H <- Function<D, R>;` — sample a random function (ROM)
|
|
154
|
+
|
|
155
|
+
**Non-determinism default:** Scheme method calls (e.g., `F.evaluate(k, x)`) are **non-deterministic by default** — each invocation may return a different result even with the same arguments.
|
|
156
|
+
|
|
157
|
+
**Function<D, R> in proofs:** In a proof's `let:` block, `Function<D, R> H;` declares a known deterministic function (standard model — the adversary can compute it). `Function<D, R> H <- Function<D, R>;` samples a random function (ROM). The engine treats `Function` calls as deterministic (same input → same output) and only applies random-function simplifications to sampled Functions.
|
|
158
|
+
|
|
159
|
+
**Advantage clause (helper games):** A `.game` file may declare its statistical distinguishing bound with an optional `advantage <= <expr>;` clause between the two games and `export as`. The bound is numeric arithmetic (`+ - * / ^`, `|S|` cardinality, literals) over the games' shared parameters and per-oracle query counts written `count_<Oracle>` (e.g. `count_Samp`), where `<Oracle>` names a (non-Initialize) method of the games; the semantic checker enforces well-formedness only (it is a *declared* unconditional fact, trusted like the helper game itself). Genuine cryptographic assumptions get no clause. Consumed by `advantage.py` (Tier 2), which derives each `count_<Oracle>` from how the composed reduction drives that oracle, yielding a bound in the theorem game's own query counts.
|
|
160
|
+
|
|
161
|
+
**Claimed bound (proofs):** A `.proof` file may declare a `bound:` clause between `theorem:` and `games:` stating the advantage bound the author believes the proof establishes. It is numeric arithmetic over three kinds of atom: `advantage(<notion> compose <reduction>)` referencing an assumed/lemma security game against a reduction *named from the proof file* (or `advantage(<notion>)` for a directly-played hop), per-oracle counts `count_<Oracle>` of the theorem game, cardinalities `|Type|`, and `let:` parameters — the same vocabulary the synthesized `Advantage bound:` line prints in. The reduction is normally written as a **bare name** (`advantage(PRGSec(G) compose R_PRG_L)`) — matched to the synthesized term by reduction name — but its full argument list is also accepted (`R_PRG_L(KEM_PQ, NG, G, H, L, hybrid)`) and matched exactly. Multi-line clauses (one `+ ...` term per line) are fine (whitespace-insensitive). After a proof verifies, the engine checks `claimed >= synthesized` symbolically (Tier 3, `advantage.check_claimed_bound`) and reports `verified` / `NOT verified` / `undecided`; a `NOT verified` claim fails `prove` unless `--skip-bound` is passed. "verified" means the claim is a valid (possibly loose) upper bound on what the proof establishes, not an independent security proof. The LaTeX exporter (`export-latex`) renders the claimed bound in the theorem statement's concrete-security inequality when a `bound:` clause is present (`advantage(...)` -> `\Adv{notion}{reduction}`, `count_<Oracle>` -> `q_{Oracle}`, `/` -> `\frac`), falling back to the synthesized bound otherwise (`proof_renderer._render_claimed_bound`).
|
|
162
|
+
|
|
163
|
+
**Method annotations:** Primitive method declarations support `deterministic` and `injective` modifiers (e.g., `deterministic injective BitString<n> Encode(GroupElem g);`). `deterministic` tells the engine the method always returns the same output for the same inputs (enabling expression aliasing, field hoisting, tuple folding through function calls, same-method call deduplication via `DeduplicateDeterministicCalls`, and cross-method field alias propagation via `CrossMethodFieldAlias`). `injective` tells the engine the method maps distinct inputs to distinct outputs (enabling the `ChallengeExclusionRFToUniform` transform to see through encoding wrappers). Methods without these annotations are treated conservatively. When a scheme extends a primitive, the typechecker requires the scheme's implementation of each method to declare exactly the same `deterministic`/`injective` modifiers (and the same return/parameter types, with `T?` not accepted in place of `T`) as the primitive.
|
|
164
|
+
|
|
165
|
+
**What the engine considers semantics-preserving:**
|
|
166
|
+
- XOR/ModInt with uniform: `u <- BitString<n>; return u + m;` ≡ `u <- BitString<n>; return u;` (when `u` used once)
|
|
167
|
+
- XOR cancellation: `x + x` → `0^n`; XOR identity: `x + 0^n` → `x`
|
|
168
|
+
- Sample merge: independent `BitString<n>` and `BitString<m>` used only via concatenation → single `BitString<n+m>`
|
|
169
|
+
- Sample split: `BitString<n>` accessed only via non-overlapping slices → independent samples per slice
|
|
170
|
+
- Random function on distinct inputs (via `<-uniq` sampling) → independent uniform samples
|
|
171
|
+
- Random function on fresh `<-uniq` input used only in that call → independent uniform sample (`FreshInputRFToUniform`)
|
|
172
|
+
- Dead code elimination, constant folding, single-use variable inlining, branch elimination, tuple index folding
|
|
173
|
+
|
|
174
|
+
### Guidelines for creating FrogLang files
|
|
175
|
+
|
|
176
|
+
- **Naming**: Use naming conventions from the cryptographic literature rather than sequentially naming variables `v0`, `v1`, etc.
|
|
177
|
+
- **Proofs**: Write out what the intermediate games are intended to be before creating the reductions that hop between games. Use comments at the top of the file to describe: the main result, the high-level proof idea, and descriptions of the sequence of games. For each reduction or intermediate game, add a comment explaining its main idea.
|
|
178
|
+
- **Scope discipline**: Do exactly what is asked and nothing more. If asked to add an intermediate game, add it — do not also think ahead about what reductions will be needed or comment on upcoming proof steps. Work on reductions only when explicitly asked to.
|
|
179
|
+
- **MCP**: Read `CLAUDE_MCP.md` at the start of any session involving ProofFrog proof work. It contains the full MCP tool usage guide, including how to write intermediate games, reductions, and diagnose failing steps. A MCP server exists to allow Claude to interact with the ProofFrog engine to check if code parses and type checks, and see which steps of a game hopping proof are valid. Key tools: `get_step_detail(proof_path, step_index)` returns the canonical form of a game step in an existing proof — read the `canonical` field, not `output` (which has mangled internal names). `get_inlined_game(proof_path, step_text)` returns the canonical form of an arbitrary game step using the proof's let:/assume: context, without the step needing to appear in the proof yet. **If the MCP server is stale** (e.g. because the proof engine was modified during the session), use the equivalent CLI commands (`step-detail`, `inlined-game`, `canonicalization-trace`, `step-after-transform`) instead — they always use the currently installed engine. See the "CLI fallback" section in `CLAUDE_MCP.md`.
|
|
180
|
+
- **Writing intermediate games**: To write an intermediate game that matches how a game step canonicalizes, use `get_step_detail` (if the step is already in the proof's games: list) or `get_inlined_game` (to evaluate any step text against the proof's let block). Write a `Game` definition whose body matches the returned `canonical` form. Prefer type aliases like `E.Ciphertext` and `BitString<G.lambda>` over raw sizes for readability.
|
|
181
|
+
- **Engine limitations**: The ProofFrog engine is fairly limited and may have bugs. If a step where certain pieces of code should canonicalize to each other doesn't validate, pause and tell the user so they can investigate whether the engine should be fixed.
|
|
182
|
+
- **Assumptions**: If the user specifies a particular set of security assumptions to use, stick to those unless stuck. It is okay to suggest or automatically add helper assumptions from `examples/Games/Helpers/` (e.g. `Probability/UniqueSampling.game`), which encode statistical facts that hold unconditionally. Genuine cryptographic assumptions about specific primitives (e.g. `examples/Games/Hash/Regularity.game`) should only be introduced when the user agrees, since they are real security assumptions, not free facts.
|
|
183
|
+
- **Assumption-game oracle bodies should inline semantic contracts directly**: When writing an assumption game (e.g., `GapTest`) whose helper oracle witnesses a relation like "does `y = Eval(sk, x)`?", write the oracle body as the relation itself (`return y == T.Eval(sk, x);`), not as an opaque primitive call. This makes the contract visible to the engine's inlining + `LazyMapScan` / `MapKeyReindex` pipeline and avoids relying on the injective-call recognition fallback.
|
|
184
|
+
- **Assumption hops are bidirectional**: An assumption hop in the games list can go Real→Random or Random→Real; indistinguishability is symmetric so both directions are valid. Sometimes, in the forward (left) half of a symmetric proof the hop goes Real→Random and in the reverse (right) half it goes Random→Real.
|
|
185
|
+
- **Reduction parameter rule**: A reduction's parameter list must include every parameter needed to instantiate the composed security game, even if that parameter is not referenced in the reduction body.
|
|
186
|
+
- **Standard four-step pattern for a reduction hop**: Each use of a reduction in the games sequence occupies four consecutive entries — two interchangeability hops flanking one assumption hop:
|
|
187
|
+
```
|
|
188
|
+
G_A against Adversary; // interchangeability with Security.Side1 compose R
|
|
189
|
+
Security.Side1 compose R against Adversary; // interchangeability
|
|
190
|
+
Security.Side2 compose R against Adversary; // by assumption (Side1 -> Side2)
|
|
191
|
+
G_B against Adversary; // interchangeability with Security.Side2 compose R
|
|
192
|
+
```
|