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.
Files changed (785) hide show
  1. {proof_frog-0.2.0 → proof_frog-0.6.0}/.github/workflows/black.yml +6 -2
  2. proof_frog-0.6.0/.github/workflows/emacs-lint.yml +34 -0
  3. proof_frog-0.6.0/.github/workflows/emacs-release.yml +47 -0
  4. {proof_frog-0.2.0 → proof_frog-0.6.0}/.github/workflows/mypy.yml +5 -2
  5. {proof_frog-0.2.0 → proof_frog-0.6.0}/.github/workflows/pylint.yml +5 -2
  6. {proof_frog-0.2.0 → proof_frog-0.6.0}/.github/workflows/test.yml +7 -4
  7. proof_frog-0.6.0/.gitignore +18 -0
  8. proof_frog-0.6.0/CLAUDE.md +192 -0
  9. proof_frog-0.6.0/CLAUDE_MCP.md +322 -0
  10. proof_frog-0.6.0/Makefile +45 -0
  11. proof_frog-0.6.0/PKG-INFO +117 -0
  12. proof_frog-0.6.0/README.md +75 -0
  13. proof_frog-0.6.0/RELEASE.md +50 -0
  14. proof_frog-0.6.0/docs/latex-export.md +85 -0
  15. proof_frog-0.6.0/emacs/Makefile +63 -0
  16. proof_frog-0.6.0/emacs/README.md +175 -0
  17. proof_frog-0.6.0/emacs/prooffrog-mode.el +426 -0
  18. proof_frog-0.6.0/examples/.gitignore +5 -0
  19. proof_frog-0.6.0/examples/Games/Group/CDH.game +37 -0
  20. proof_frog-0.6.0/examples/Games/Group/DDH.game +25 -0
  21. proof_frog-0.6.0/examples/Games/Group/DDHMultiChal.game +35 -0
  22. proof_frog-0.6.0/examples/Games/Group/GapCDH.game +54 -0
  23. proof_frog-0.6.0/examples/Games/Group/GapCDH_NZ.game +51 -0
  24. proof_frog-0.6.0/examples/Games/Group/HashedDDH.game +35 -0
  25. proof_frog-0.6.0/examples/Games/Group/HashedDDHMultiChal.game +48 -0
  26. proof_frog-0.6.0/examples/Games/Hash/Regularity.game +32 -0
  27. proof_frog-0.6.0/examples/Games/Helpers/Probability/DistinctSampling.game +48 -0
  28. proof_frog-0.6.0/examples/Games/Helpers/Probability/NonzeroSampling.game +41 -0
  29. proof_frog-0.6.0/examples/Games/Helpers/Probability/ROFreshSampling.game +63 -0
  30. proof_frog-0.6.0/examples/Games/Helpers/Probability/ROFreshSampling2.game +70 -0
  31. proof_frog-0.6.0/examples/Games/Helpers/Probability/ROFreshSampling3.game +80 -0
  32. proof_frog-0.6.0/examples/Games/Helpers/Probability/ROFreshSampling4.game +90 -0
  33. proof_frog-0.6.0/examples/Games/Helpers/Probability/ROFreshSampling5.game +100 -0
  34. proof_frog-0.6.0/examples/Games/Helpers/Probability/ROMProgramming.game +58 -0
  35. proof_frog-0.6.0/examples/Games/Helpers/Probability/RandomTargetGuessing.game +40 -0
  36. proof_frog-0.6.0/examples/Games/KEM/Correctness.game +26 -0
  37. proof_frog-0.6.0/examples/Games/KEM/INDCCA_MultiChal.game +47 -0
  38. proof_frog-0.6.0/examples/Games/KEM/INDCCA_MultiChal_ROM.game +56 -0
  39. proof_frog-0.2.0/examples/Games/KEM/CPAKEM.game → proof_frog-0.6.0/examples/Games/KEM/INDCPA_MultiChal.game +8 -14
  40. proof_frog-0.2.0/examples/Games/MAC/Security.game → proof_frog-0.6.0/examples/Games/MAC/SUFCMA.game +8 -4
  41. proof_frog-0.6.0/examples/Games/PRF/PRFSecurity.game +29 -0
  42. proof_frog-0.6.0/examples/Games/PRF/PRFSecurity_MultiKey.game +20 -0
  43. proof_frog-0.6.0/examples/Games/PRG/PRGSecurity.game +20 -0
  44. {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Games/PRP/Correctness.game +5 -2
  45. proof_frog-0.6.0/examples/Games/PubKeyEnc/Correctness.game +40 -0
  46. proof_frog-0.2.0/examples/Games/PubKeyEnc/CPA$.game → proof_frog-0.6.0/examples/Games/PubKeyEnc/INDCPA$_MultiChal.game +7 -8
  47. proof_frog-0.2.0/examples/Games/PubKeyEnc/OneTimeSecrecy.game → proof_frog-0.6.0/examples/Games/PubKeyEnc/INDCPA.game +7 -8
  48. proof_frog-0.2.0/examples/Games/PubKeyEnc/CPA.game → proof_frog-0.6.0/examples/Games/PubKeyEnc/INDCPA_MultiChal.game +7 -8
  49. proof_frog-0.6.0/examples/Games/PubKeyEnc/INDCPA_ROM_MultiChal.game +45 -0
  50. proof_frog-0.6.0/examples/Games/SymEnc/Correctness.game +20 -0
  51. proof_frog-0.2.0/examples/Games/SymEnc/CCA$.game → proof_frog-0.6.0/examples/Games/SymEnc/INDCCA$_MultiChal.game +6 -2
  52. proof_frog-0.2.0/examples/Games/SymEnc/CCABook.game → proof_frog-0.6.0/examples/Games/SymEnc/INDCCA_MultiChal.game +6 -2
  53. proof_frog-0.2.0/examples/Games/SymEnc/CPA$.game → proof_frog-0.6.0/examples/Games/SymEnc/INDCPA$_MultiChal.game +6 -2
  54. proof_frog-0.2.0/examples/Games/SymEnc/CPA.game → proof_frog-0.6.0/examples/Games/SymEnc/INDCPA_MultiChal.game +6 -2
  55. proof_frog-0.6.0/examples/Games/SymEnc/INDOT$.game +22 -0
  56. proof_frog-0.2.0/examples/Games/SymEnc/OneTimeSecrecy.game → proof_frog-0.6.0/examples/Games/SymEnc/INDOT.game +6 -2
  57. {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Games/SymEnc/KeyUniformity.game +4 -1
  58. proof_frog-0.6.0/examples/Primitives/Hash.primitive +8 -0
  59. proof_frog-0.6.0/examples/Primitives/KEM.primitive +12 -0
  60. proof_frog-0.6.0/examples/Primitives/MAC.primitive +11 -0
  61. proof_frog-0.6.0/examples/Primitives/NonNullableSymEnc.primitive +11 -0
  62. proof_frog-0.6.0/examples/Primitives/PRF.primitive +9 -0
  63. proof_frog-0.6.0/examples/Primitives/PRG.primitive +8 -0
  64. proof_frog-0.6.0/examples/Primitives/PRP.primitive +10 -0
  65. {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Primitives/PubKeyEnc.primitive +4 -2
  66. {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Primitives/SymEnc.primitive +3 -1
  67. proof_frog-0.6.0/examples/Proofs/Group/CDH_implies_HashedDDH.proof +80 -0
  68. proof_frog-0.6.0/examples/Proofs/Group/DDHMultiChal_implies_HashedDDHMultiChal.proof +86 -0
  69. proof_frog-0.6.0/examples/Proofs/Group/DDH_implies_CDH.proof +78 -0
  70. proof_frog-0.6.0/examples/Proofs/Group/DDH_implies_HashedDDH.proof +77 -0
  71. proof_frog-0.6.0/examples/Proofs/Group/GapCDH_implies_GapCDH_NZ.proof +94 -0
  72. proof_frog-0.6.0/examples/Proofs/KEM/HashedElGamalKEM_INDCCA.proof +145 -0
  73. proof_frog-0.6.0/examples/Proofs/KEM/KEMPRF_Correctness.proof +54 -0
  74. proof_frog-0.6.0/examples/Proofs/KEM/KEMPRF_INDCCA.proof +110 -0
  75. proof_frog-0.6.0/examples/Proofs/KEM/KEMPRF_INDCPA.proof +105 -0
  76. proof_frog-0.6.0/examples/Proofs/PRF/PRFSecurity_implies_PRFSecurity_MultiKey.proof +63 -0
  77. proof_frog-0.6.0/examples/Proofs/PRG/CounterPRG_PRGSecurity.proof +128 -0
  78. proof_frog-0.6.0/examples/Proofs/PRG/TriplingPRG_PRGSecurity.proof +54 -0
  79. proof_frog-0.6.0/examples/Proofs/PubKeyEnc/ElGamal_Correctness.proof +27 -0
  80. proof_frog-0.6.0/examples/Proofs/PubKeyEnc/ElGamal_INDCPA_MultiChal.proof +69 -0
  81. proof_frog-0.6.0/examples/Proofs/PubKeyEnc/HashedElGamal_INDCPA_MultiChal.proof +72 -0
  82. proof_frog-0.6.0/examples/Proofs/PubKeyEnc/HashedElGamal_INDCPA_ROM_MultiChal.proof +139 -0
  83. proof_frog-0.2.0/examples/Proofs/PubEnc/KEMDEMCPA.proof → proof_frog-0.6.0/examples/Proofs/PubKeyEnc/HybridKEMDEM_INDCPA_MultiChal.proof +79 -89
  84. proof_frog-0.2.0/examples/Proofs/PubEnc/Hybrid.proof → proof_frog-0.6.0/examples/Proofs/PubKeyEnc/HybridPKEDEM_INDCPA_MultiChal.proof +51 -52
  85. proof_frog-0.6.0/examples/Proofs/PubKeyEnc/INDCPA_implies_INDCPA_MultiChal.proof +73 -0
  86. proof_frog-0.2.0/examples/Proofs/SymEnc/EncryptThenMACCCA.proof → proof_frog-0.6.0/examples/Proofs/SymEnc/EncryptThenMAC_INDCCA_MultiChal.proof +52 -47
  87. proof_frog-0.6.0/examples/Proofs/SymEnc/GeneralDoubleSymEnc_INDCPA$_MultiChal.proof +48 -0
  88. proof_frog-0.6.0/examples/Proofs/SymEnc/GeneralDoubleSymEnc_INDOT$.proof +49 -0
  89. proof_frog-0.6.0/examples/Proofs/SymEnc/INDCPA$_MultiChal_implies_INDCPA_MultiChal.proof +43 -0
  90. proof_frog-0.6.0/examples/Proofs/SymEnc/INDOT$_implies_DoubleSymEnc_INDOT$.proof +43 -0
  91. proof_frog-0.6.0/examples/Proofs/SymEnc/INDOT$_implies_INDOT.proof +56 -0
  92. proof_frog-0.6.0/examples/Proofs/SymEnc/ModOTP_INDOT.proof +40 -0
  93. proof_frog-0.6.0/examples/Proofs/SymEnc/SymEncPRF_INDCPA$_MultiChal.proof +183 -0
  94. proof_frog-0.6.0/examples/Proofs/SymEnc/SymEncPRF_INDOT$.proof +162 -0
  95. proof_frog-0.6.0/examples/README.md +54 -0
  96. proof_frog-0.6.0/examples/Schemes/KEM/HashedElGamalKEM.scheme +33 -0
  97. proof_frog-0.6.0/examples/Schemes/KEM/KEMPRF.scheme +32 -0
  98. proof_frog-0.6.0/examples/Schemes/PRG/CounterPRG.scheme +15 -0
  99. {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Schemes/PRG/TriplingPRG.scheme +4 -2
  100. proof_frog-0.6.0/examples/Schemes/PubKeyEnc/ElGamal.scheme +24 -0
  101. proof_frog-0.6.0/examples/Schemes/PubKeyEnc/HashedElGamal.scheme +28 -0
  102. proof_frog-0.2.0/examples/Schemes/PubEnc/KEMDEM.scheme → proof_frog-0.6.0/examples/Schemes/PubKeyEnc/HybridKEMDEM.scheme +7 -7
  103. proof_frog-0.6.0/examples/Schemes/PubKeyEnc/HybridPKEDEM.scheme +32 -0
  104. {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Schemes/SymEnc/DoubleSymEnc.scheme +4 -3
  105. {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Schemes/SymEnc/EncryptThenMAC.scheme +7 -6
  106. {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Schemes/SymEnc/GeneralDoubleSymEnc.scheme +4 -3
  107. proof_frog-0.6.0/examples/Schemes/SymEnc/ModOTP.scheme +21 -0
  108. {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/Schemes/SymEnc/OTP.scheme +3 -2
  109. proof_frog-0.6.0/examples/Schemes/SymEnc/SymEncPRF.scheme +26 -0
  110. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/GHP18_Correctness.proof +96 -0
  111. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/GHP18_INDCCA_First.proof +508 -0
  112. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/GHP18_INDCCA_Second.proof +508 -0
  113. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/GHP18_INDCPA_First.proof +135 -0
  114. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/GHP18_INDCPA_Second.proof +135 -0
  115. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/KEMCombiner.scheme +59 -0
  116. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/KEMCorrectnessKG.game +25 -0
  117. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/README.md +68 -0
  118. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRF.primitive +10 -0
  119. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFFirstKeyMultiKey.game +21 -0
  120. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFFirstKeySecurity.game +31 -0
  121. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFFirstKeySecurity_implies_TwoKeyPRFFirstKeyMultiKey.proof +64 -0
  122. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFSecondKeyMultiKey.game +21 -0
  123. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFSecondKeySecurity.game +31 -0
  124. proof_frog-0.6.0/examples/applications/KEMCombiner-GHP18/TwoKeyPRFSecondKeySecurity_implies_TwoKeyPRFSecondKeyMultiKey.proof +64 -0
  125. proof_frog-0.6.0/examples/applications/StarHunters-COSS26/C2PRI.game +48 -0
  126. proof_frog-0.6.0/examples/applications/StarHunters-COSS26/CK.scheme +55 -0
  127. proof_frog-0.6.0/examples/applications/StarHunters-COSS26/CK_INDCCA_PostQuantum.proof +489 -0
  128. proof_frog-0.6.0/examples/applications/StarHunters-COSS26/CK_INDCCA_PreQuantum.proof +753 -0
  129. proof_frog-0.6.0/examples/applications/StarHunters-COSS26/INDCCA_PKE.game +67 -0
  130. proof_frog-0.6.0/examples/applications/StarHunters-COSS26/LCK.scheme +28 -0
  131. proof_frog-0.6.0/examples/applications/StarHunters-COSS26/LCK_INDCCA.proof +64 -0
  132. proof_frog-0.6.0/examples/applications/StarHunters-COSS26/PKE.primitive +12 -0
  133. proof_frog-0.6.0/examples/applications/StarHunters-COSS26/TwoKeyPRF.primitive +10 -0
  134. proof_frog-0.6.0/examples/applications/StarHunters-COSS26/TwoKeyPRFFirstKeySecurity.game +31 -0
  135. proof_frog-0.6.0/examples/applications/StarHunters-COSS26/TwoKeyPRFSecondKeySecurity.game +31 -0
  136. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/BOUNDS-CFRG-20260722.md +199 -0
  137. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/README.md +137 -0
  138. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/REPORT-CFRG-20260722.md +353 -0
  139. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/Group/NGCorrectness.game +35 -0
  140. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/Group/RandomScalarDist.game +37 -0
  141. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/Group/SDH.game +68 -0
  142. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/Group/SDH_SS.game +66 -0
  143. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KDF/KDFCollisionResistance.game +31 -0
  144. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KDF/KDFFirstKeyPRF.game +46 -0
  145. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KDF/KDFPRFSec.game +47 -0
  146. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KDF/KDFSecondKeyPRF.game +45 -0
  147. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/HON_BIND_K_CT_DIFFKEY.game +82 -0
  148. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/HON_BIND_K_CT_SAMEKEY.game +69 -0
  149. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/HON_BIND_K_PK.game +81 -0
  150. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_CT_DIFFKEY.game +64 -0
  151. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_CT_ROM_DIFFKEY.game +60 -0
  152. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_CT_ROM_SAMEKEY.game +54 -0
  153. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_CT_SAMEKEY.game +60 -0
  154. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_PK.game +61 -0
  155. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Binding/LEAK_BIND_K_PK_ROM.game +62 -0
  156. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/C2PRI.game +50 -0
  157. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/Correctness.game +37 -0
  158. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/CorrectnessWithDK.game +31 -0
  159. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/INDCCA.game +49 -0
  160. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/INDCCA_ROM.game +60 -0
  161. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/KEM/KeyGenEquiv.game +29 -0
  162. 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
  163. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/CGLazyROOneSeeded.ec +20 -0
  164. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/CGLazyROOneSeeded.game +77 -0
  165. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/CGLazyROTwoSeeded.ec +17 -0
  166. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/CGLazyROTwoSeeded.game +92 -0
  167. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROOneSeeded.ec +241 -0
  168. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROOneSeeded.game +67 -0
  169. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoSeeded.ec +309 -0
  170. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoSeeded.game +93 -0
  171. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoViewsExcluded.ec +273 -0
  172. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoViewsExcluded.game +108 -0
  173. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoViewsExcludedProgrammed.ec +291 -0
  174. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/games/ROM/LazyROTwoViewsExcludedProgrammed.game +138 -0
  175. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/HashInputPacking.primitive +19 -0
  176. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/KDF.primitive +15 -0
  177. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/KEM.primitive +25 -0
  178. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/Label.primitive +14 -0
  179. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/NominalGroup.primitive +44 -0
  180. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/primitives/PRG.primitive +8 -0
  181. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_Correctness.proof +111 -0
  182. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_INDCCA_PQ.proof +468 -0
  183. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_INDCCA_T.proof +468 -0
  184. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_LEAK_BIND_K_CT_DIFFKEY.proof +156 -0
  185. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_LEAK_BIND_K_CT_SAMEKEY.proof +140 -0
  186. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_expanded_LEAK_BIND_K_PK.proof +181 -0
  187. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_Correctness.proof +239 -0
  188. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_HON_BIND_K_CT_DIFFKEY.proof +432 -0
  189. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_HON_BIND_K_CT_SAMEKEY.proof +339 -0
  190. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_HON_BIND_K_PK.proof +443 -0
  191. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_INDCCA_PQ.proof +637 -0
  192. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_INDCCA_T.proof +695 -0
  193. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_LEAK_BIND_K_CT_DIFFKEY.proof +485 -0
  194. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_LEAK_BIND_K_CT_SAMEKEY.proof +394 -0
  195. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CG/CG_seedbased_LEAK_BIND_K_PK.proof +528 -0
  196. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_Correctness.proof +101 -0
  197. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_INDCCA_PQ.proof +432 -0
  198. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_INDCCA_T.proof +719 -0
  199. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_LEAK_BIND_K_CT_DIFFKEY.proof +174 -0
  200. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_LEAK_BIND_K_CT_SAMEKEY.proof +135 -0
  201. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_expanded_LEAK_BIND_K_PK.proof +182 -0
  202. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_Correctness.proof +242 -0
  203. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_HON_BIND_K_CT_DIFFKEY.proof +517 -0
  204. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_HON_BIND_K_CT_SAMEKEY.proof +396 -0
  205. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_HON_BIND_K_PK.proof +517 -0
  206. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_INDCCA_PQ.proof +663 -0
  207. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_INDCCA_T.proof +993 -0
  208. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_LEAK_BIND_K_CT_DIFFKEY.proof +488 -0
  209. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_LEAK_BIND_K_CT_SAMEKEY.proof +372 -0
  210. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/CK/CK_seedbased_LEAK_BIND_K_PK.proof +507 -0
  211. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/Generic/LEAK_implies_HON_BIND_K_CT_DIFFKEY.proof +74 -0
  212. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/Generic/LEAK_implies_HON_BIND_K_CT_SAMEKEY.proof +71 -0
  213. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/Generic/LEAK_implies_HON_BIND_K_PK.proof +75 -0
  214. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_Correctness.proof +115 -0
  215. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_INDCCA_PQ.proof +479 -0
  216. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_INDCCA_T.proof +337 -0
  217. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_LEAK_BIND_K_CT_DIFFKEY.proof +103 -0
  218. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_LEAK_BIND_K_CT_SAMEKEY.proof +99 -0
  219. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_expanded_LEAK_BIND_K_PK.proof +105 -0
  220. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_Correctness.proof +243 -0
  221. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_INDCCA_PQ.proof +644 -0
  222. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_INDCCA_T.proof +527 -0
  223. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_LEAK_BIND_K_CT_DIFFKEY.proof +106 -0
  224. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_LEAK_BIND_K_CT_SAMEKEY.proof +100 -0
  225. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UG/UG_seedbased_LEAK_BIND_K_PK.proof +106 -0
  226. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_Correctness.proof +96 -0
  227. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_INDCCA_PQ.proof +424 -0
  228. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_INDCCA_T.proof +510 -0
  229. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_LEAK_BIND_K_CT_DIFFKEY.proof +100 -0
  230. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_LEAK_BIND_K_CT_SAMEKEY.proof +96 -0
  231. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_expanded_LEAK_BIND_K_PK.proof +102 -0
  232. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_Correctness.proof +239 -0
  233. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_INDCCA_PQ.proof +670 -0
  234. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_INDCCA_T.proof +772 -0
  235. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_LEAK_BIND_K_CT_DIFFKEY.proof +103 -0
  236. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_LEAK_BIND_K_CT_SAMEKEY.proof +98 -0
  237. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/proofs/UK/UK_seedbased_LEAK_BIND_K_PK.proof +105 -0
  238. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CG/CGHashEncoding.scheme +55 -0
  239. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CG/CGRandomOracleKDF.scheme +27 -0
  240. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CG/CGRandomOraclePRG.scheme +27 -0
  241. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CG/CG_expanded.scheme +111 -0
  242. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CG/CG_seedbased.scheme +146 -0
  243. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CK/CKRandomOraclePRG.scheme +40 -0
  244. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CK/CK_expanded.scheme +96 -0
  245. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/CK/CK_seedbased.scheme +130 -0
  246. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/Helpers/SeededKEMWrapper.scheme +61 -0
  247. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UG/UGHashEncoding.scheme +44 -0
  248. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UG/UGRandomOracleKDF.scheme +36 -0
  249. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UG/UG_expanded.scheme +113 -0
  250. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UG/UG_seedbased.scheme +144 -0
  251. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UK/UK_expanded.scheme +102 -0
  252. proof_frog-0.6.0/examples/applications/cfrg-hybrid-kems/schemes/UK/UK_seedbased.scheme +128 -0
  253. proof_frog-0.6.0/examples/joy/Games/SymEnc/Correctness.game +22 -0
  254. proof_frog-0.6.0/examples/joy/Games/SymEnc/OneTimeSecrecy.game +22 -0
  255. proof_frog-0.6.0/examples/joy/Games/SymEnc/OneTimeSecrecyLR.game +23 -0
  256. proof_frog-0.2.0/examples/Primitives/NonNullableSymEnc.primitive → proof_frog-0.6.0/examples/joy/Primitives/SymEnc.primitive +3 -1
  257. proof_frog-0.6.0/examples/joy/Proofs/Ch1/OTPCorrectness.proof +23 -0
  258. proof_frog-0.6.0/examples/joy/Proofs/Ch2/ChainedEncryptionSecure.proof +70 -0
  259. proof_frog-0.6.0/examples/joy/Proofs/Ch2/OTPSecure.proof +22 -0
  260. proof_frog-0.6.0/examples/joy/Proofs/Ch2/OTPSecureLR.proof +49 -0
  261. proof_frog-0.6.0/examples/joy/README.md +38 -0
  262. proof_frog-0.6.0/examples/joy/Schemes/SymEnc/ChainedEncryption.scheme +34 -0
  263. proof_frog-0.6.0/examples/joy/Schemes/SymEnc/OTP.scheme +24 -0
  264. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/2/2_12_DoubleOTP.scheme +5 -3
  265. proof_frog-0.6.0/examples/joy_old/2/2_13.proof +22 -0
  266. proof_frog-0.6.0/examples/joy_old/2/2_15.proof +1 -0
  267. proof_frog-0.6.0/examples/joy_old/2_Exercises/2_13.proof +43 -0
  268. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/2_Exercises/2_13_SymEncSquared.scheme +6 -4
  269. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/2_Exercises/2_14.game +3 -1
  270. proof_frog-0.6.0/examples/joy_old/2_Exercises/2_14_Backward.proof +52 -0
  271. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/2_Exercises/2_14_Forward.proof +16 -14
  272. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/2_Exercises/2_15.game +5 -3
  273. proof_frog-0.6.0/examples/joy_old/2_Exercises/2_15_Backward.proof +39 -0
  274. proof_frog-0.6.0/examples/joy_old/2_Exercises/2_15_Forward.proof +40 -0
  275. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5/5_2_PseudoOTP.scheme +5 -3
  276. proof_frog-0.6.0/examples/joy_old/5/5_3.proof +50 -0
  277. proof_frog-0.6.0/examples/joy_old/5/5_5_TriplingPRGSecure.proof +1 -0
  278. proof_frog-0.6.0/examples/joy_old/5_Exercises/5_10.proof +67 -0
  279. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5_Exercises/5_10.scheme +4 -2
  280. proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_PseudoOTP_OTUC.proof +48 -0
  281. proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_a.proof +54 -0
  282. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5_Exercises/5_8_a.scheme +4 -2
  283. proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_b.proof +38 -0
  284. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5_Exercises/5_8_b.scheme +4 -2
  285. proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_e.proof +46 -0
  286. proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_e.scheme +13 -0
  287. proof_frog-0.6.0/examples/joy_old/5_Exercises/5_8_f.proof +47 -0
  288. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5_Exercises/5_8_f.scheme +4 -2
  289. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/7_Exercises/7_13.game +3 -1
  290. proof_frog-0.6.0/examples/joy_old/7_Exercises/7_13_Backward.proof +52 -0
  291. proof_frog-0.6.0/examples/joy_old/7_Exercises/7_13_Forward.proof +40 -0
  292. proof_frog-0.6.0/examples/joy_old/9_Exercises/9_6_CCA$impliesCCA.proof +45 -0
  293. {proof_frog-0.2.0 → proof_frog-0.6.0}/jupyter/Dockerfile +1 -2
  294. proof_frog-0.6.0/jupyter/README.md +4 -0
  295. proof_frog-0.6.0/jupyter/kernel/kernel.json +4 -0
  296. proof_frog-0.6.0/media/screenshot-web.png +0 -0
  297. proof_frog-0.6.0/proof_frog/_examples_pin.py +3 -0
  298. proof_frog-0.6.0/proof_frog/_git_sha.py +2 -0
  299. proof_frog-0.6.0/proof_frog/advantage.py +847 -0
  300. proof_frog-0.6.0/proof_frog/antlr/Game.g4 +11 -0
  301. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/antlr/Primitive.g4 +1 -1
  302. proof_frog-0.6.0/proof_frog/antlr/Proof.g4 +80 -0
  303. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/antlr/Scheme.g4 +1 -1
  304. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/antlr/Shared.g4 +47 -13
  305. proof_frog-0.6.0/proof_frog/dependencies.py +462 -0
  306. proof_frog-0.6.0/proof_frog/describe.py +107 -0
  307. proof_frog-0.6.0/proof_frog/diagnostics.py +362 -0
  308. proof_frog-0.6.0/proof_frog/export/latex/__init__.py +1 -0
  309. proof_frog-0.6.0/proof_frog/export/latex/backends/__init__.py +5 -0
  310. proof_frog-0.6.0/proof_frog/export/latex/backends/base.py +38 -0
  311. proof_frog-0.6.0/proof_frog/export/latex/backends/cryptocode.py +227 -0
  312. proof_frog-0.6.0/proof_frog/export/latex/diff.py +101 -0
  313. proof_frog-0.6.0/proof_frog/export/latex/document.py +76 -0
  314. proof_frog-0.6.0/proof_frog/export/latex/exporter.py +75 -0
  315. proof_frog-0.6.0/proof_frog/export/latex/expr_renderer.py +560 -0
  316. proof_frog-0.6.0/proof_frog/export/latex/ir.py +123 -0
  317. proof_frog-0.6.0/proof_frog/export/latex/macros.py +204 -0
  318. proof_frog-0.6.0/proof_frog/export/latex/module_renderer.py +232 -0
  319. proof_frog-0.6.0/proof_frog/export/latex/proof_context.py +243 -0
  320. proof_frog-0.6.0/proof_frog/export/latex/proof_renderer.py +658 -0
  321. proof_frog-0.6.0/proof_frog/export/latex/stmt_renderer.py +205 -0
  322. proof_frog-0.6.0/proof_frog/export/latex/type_renderer.py +14 -0
  323. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/frog_ast.py +445 -56
  324. proof_frog-0.6.0/proof_frog/frog_parser.py +2125 -0
  325. proof_frog-0.6.0/proof_frog/lsp/__init__.py +5 -0
  326. proof_frog-0.6.0/proof_frog/lsp/completion.py +329 -0
  327. proof_frog-0.6.0/proof_frog/lsp/diagnostics.py +154 -0
  328. proof_frog-0.6.0/proof_frog/lsp/document_state.py +40 -0
  329. proof_frog-0.6.0/proof_frog/lsp/folding.py +151 -0
  330. proof_frog-0.6.0/proof_frog/lsp/navigation.py +299 -0
  331. proof_frog-0.6.0/proof_frog/lsp/proof_features.py +269 -0
  332. proof_frog-0.6.0/proof_frog/lsp/rename.py +158 -0
  333. proof_frog-0.6.0/proof_frog/lsp/server.py +296 -0
  334. proof_frog-0.6.0/proof_frog/lsp/symbols.py +193 -0
  335. proof_frog-0.6.0/proof_frog/mcp_server.py +546 -0
  336. proof_frog-0.6.0/proof_frog/parsing/Game.interp +179 -0
  337. proof_frog-0.6.0/proof_frog/parsing/Game.tokens +133 -0
  338. proof_frog-0.6.0/proof_frog/parsing/GameLexer.interp +227 -0
  339. proof_frog-0.6.0/proof_frog/parsing/GameLexer.py +313 -0
  340. proof_frog-0.6.0/proof_frog/parsing/GameLexer.tokens +133 -0
  341. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/GameParser.py +1911 -1040
  342. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/GameVisitor.py +97 -7
  343. proof_frog-0.6.0/proof_frog/parsing/Primitive.interp +176 -0
  344. proof_frog-0.6.0/proof_frog/parsing/Primitive.tokens +131 -0
  345. proof_frog-0.6.0/proof_frog/parsing/PrimitiveLexer.interp +224 -0
  346. proof_frog-0.6.0/proof_frog/parsing/PrimitiveLexer.py +307 -0
  347. proof_frog-0.6.0/proof_frog/parsing/PrimitiveLexer.tokens +131 -0
  348. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/PrimitiveParser.py +1767 -979
  349. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/PrimitiveVisitor.py +92 -7
  350. proof_frog-0.6.0/proof_frog/parsing/Proof.interp +233 -0
  351. proof_frog-0.6.0/proof_frog/parsing/Proof.tokens +169 -0
  352. proof_frog-0.6.0/proof_frog/parsing/ProofLexer.interp +281 -0
  353. proof_frog-0.6.0/proof_frog/parsing/ProofLexer.py +395 -0
  354. proof_frog-0.6.0/proof_frog/parsing/ProofLexer.tokens +169 -0
  355. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/ProofParser.py +3196 -1436
  356. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/ProofVisitor.py +182 -7
  357. proof_frog-0.6.0/proof_frog/parsing/Scheme.interp +183 -0
  358. proof_frog-0.6.0/proof_frog/parsing/Scheme.tokens +137 -0
  359. proof_frog-0.6.0/proof_frog/parsing/SchemeLexer.interp +233 -0
  360. proof_frog-0.6.0/proof_frog/parsing/SchemeLexer.py +322 -0
  361. proof_frog-0.6.0/proof_frog/parsing/SchemeLexer.tokens +137 -0
  362. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/SchemeParser.py +1796 -1009
  363. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/SchemeVisitor.py +92 -7
  364. proof_frog-0.6.0/proof_frog/proof_engine.py +1990 -0
  365. proof_frog-0.6.0/proof_frog/proof_frog.py +576 -0
  366. proof_frog-0.6.0/proof_frog/scaffolding.py +273 -0
  367. proof_frog-0.6.0/proof_frog/semantic_analysis.py +3346 -0
  368. proof_frog-0.6.0/proof_frog/suggestions.py +141 -0
  369. proof_frog-0.6.0/proof_frog/transforms/__init__.py +17 -0
  370. proof_frog-0.6.0/proof_frog/transforms/_base.py +286 -0
  371. proof_frog-0.6.0/proof_frog/transforms/_ordering.py +198 -0
  372. proof_frog-0.6.0/proof_frog/transforms/_requirements.py +73 -0
  373. proof_frog-0.6.0/proof_frog/transforms/_wrappers.py +664 -0
  374. proof_frog-0.6.0/proof_frog/transforms/algebraic.py +2591 -0
  375. proof_frog-0.6.0/proof_frog/transforms/alpha_rename.py +278 -0
  376. proof_frog-0.6.0/proof_frog/transforms/assumptions.py +130 -0
  377. proof_frog-0.6.0/proof_frog/transforms/control_flow.py +2930 -0
  378. proof_frog-0.6.0/proof_frog/transforms/inlining.py +5024 -0
  379. proof_frog-0.6.0/proof_frog/transforms/map_iteration.py +357 -0
  380. proof_frog-0.6.0/proof_frog/transforms/map_reindex.py +592 -0
  381. proof_frog-0.6.0/proof_frog/transforms/pipelines.py +235 -0
  382. proof_frog-0.6.0/proof_frog/transforms/random_functions.py +3957 -0
  383. proof_frog-0.6.0/proof_frog/transforms/sampling.py +2348 -0
  384. proof_frog-0.6.0/proof_frog/transforms/standardization.py +805 -0
  385. proof_frog-0.6.0/proof_frog/transforms/structural.py +337 -0
  386. proof_frog-0.6.0/proof_frog/transforms/symbolic.py +143 -0
  387. proof_frog-0.6.0/proof_frog/transforms/tuples.py +638 -0
  388. proof_frog-0.6.0/proof_frog/transforms/types.py +310 -0
  389. proof_frog-0.6.0/proof_frog/visitors.py +1525 -0
  390. proof_frog-0.6.0/proof_frog/web/app.js +288 -0
  391. proof_frog-0.6.0/proof_frog/web/cm-mode.js +63 -0
  392. proof_frog-0.6.0/proof_frog/web/editor.js +420 -0
  393. proof_frog-0.6.0/proof_frog/web/favicon.ico +0 -0
  394. proof_frog-0.6.0/proof_frog/web/file-tree.js +166 -0
  395. proof_frog-0.6.0/proof_frog/web/game-hops.js +121 -0
  396. proof_frog-0.6.0/proof_frog/web/index.html +598 -0
  397. proof_frog-0.6.0/proof_frog/web/inline-game.js +329 -0
  398. proof_frog-0.6.0/proof_frog/web/insertion.js +174 -0
  399. proof_frog-0.6.0/proof_frog/web/live-reload.js +131 -0
  400. proof_frog-0.6.0/proof_frog/web/new-file.js +73 -0
  401. proof_frog-0.6.0/proof_frog/web/prooffrog-128.png +0 -0
  402. proof_frog-0.6.0/proof_frog/web/prooffrog-16.png +0 -0
  403. proof_frog-0.6.0/proof_frog/web/prooffrog-180.png +0 -0
  404. proof_frog-0.6.0/proof_frog/web/prooffrog-32.png +0 -0
  405. proof_frog-0.6.0/proof_frog/web/prooffrog-48.png +0 -0
  406. proof_frog-0.6.0/proof_frog/web/prooffrog-64.png +0 -0
  407. proof_frog-0.6.0/proof_frog/web/prooffrog.png +0 -0
  408. proof_frog-0.6.0/proof_frog/web/resize.js +83 -0
  409. proof_frog-0.6.0/proof_frog/web/state.js +74 -0
  410. proof_frog-0.6.0/proof_frog/web/style.css +562 -0
  411. proof_frog-0.6.0/proof_frog/web/wizard.js +1358 -0
  412. proof_frog-0.6.0/proof_frog/web_server.py +1263 -0
  413. proof_frog-0.6.0/pyproject.toml +110 -0
  414. proof_frog-0.6.0/tests/integration/__init__.py +0 -0
  415. proof_frog-0.6.0/tests/integration/lemma_fixtures/BaseAssumption.game +17 -0
  416. proof_frog-0.6.0/tests/integration/lemma_fixtures/DerivedSecurity.game +17 -0
  417. proof_frog-0.6.0/tests/integration/lemma_fixtures/SimplePRG.primitive +5 -0
  418. proof_frog-0.6.0/tests/integration/lemma_fixtures/bad_lemma.proof +16 -0
  419. proof_frog-0.6.0/tests/integration/lemma_fixtures/lemma_proof.proof +27 -0
  420. proof_frog-0.6.0/tests/integration/lemma_fixtures/outer.proof +18 -0
  421. proof_frog-0.6.0/tests/integration/lemma_fixtures/outer_bad_lemma.proof +18 -0
  422. proof_frog-0.6.0/tests/integration/test_advantage_bound.py +69 -0
  423. proof_frog-0.6.0/tests/integration/test_ast.py +94 -0
  424. proof_frog-0.6.0/tests/integration/test_bound_check.py +96 -0
  425. proof_frog-0.6.0/tests/integration/test_check.py +37 -0
  426. proof_frog-0.6.0/tests/integration/test_check_gate.py +64 -0
  427. proof_frog-0.6.0/tests/integration/test_cli_json.py +107 -0
  428. proof_frog-0.6.0/tests/integration/test_diagnostics_parity.py +146 -0
  429. proof_frog-0.6.0/tests/integration/test_distinguishers.py +1105 -0
  430. proof_frog-0.6.0/tests/integration/test_file_metadata.py +189 -0
  431. proof_frog-0.6.0/tests/integration/test_latex_export.py +165 -0
  432. proof_frog-0.6.0/tests/integration/test_latex_export_proof.py +71 -0
  433. proof_frog-0.6.0/tests/integration/test_lemmas.py +67 -0
  434. proof_frog-0.6.0/tests/integration/test_proofs.py +43 -0
  435. proof_frog-0.6.0/tests/integration/test_rc3_control_flow.py +389 -0
  436. proof_frog-0.6.0/tests/integration/test_rc3_map_iteration.py +129 -0
  437. proof_frog-0.6.0/tests/integration/test_rc3_random_functions.py +256 -0
  438. proof_frog-0.6.0/tests/integration/test_rc4_alpha_rename.py +244 -0
  439. proof_frog-0.6.0/tests/integration/test_rc4_control_flow.py +237 -0
  440. proof_frog-0.6.0/tests/integration/test_rc4_random_functions.py +147 -0
  441. proof_frog-0.6.0/tests/integration/test_rc4_sampling.py +159 -0
  442. proof_frog-0.6.0/tests/integration/test_rc5_domain_invariance.py +227 -0
  443. proof_frog-0.6.0/tests/integration/test_scaffolding.py +361 -0
  444. proof_frog-0.6.0/tests/integration/test_this_keyword.py +46 -0
  445. proof_frog-0.6.0/tests/integration/test_web_server.py +254 -0
  446. proof_frog-0.6.0/tests/unit/__init__.py +0 -0
  447. proof_frog-0.6.0/tests/unit/engine/__init__.py +0 -0
  448. proof_frog-0.6.0/tests/unit/engine/test_advantage.py +495 -0
  449. proof_frog-0.6.0/tests/unit/engine/test_apply_reduction.py +308 -0
  450. proof_frog-0.6.0/tests/unit/engine/test_canonicalization_trace.py +96 -0
  451. proof_frog-0.6.0/tests/unit/engine/test_extract_subsets_pairs.py +62 -0
  452. proof_frog-0.6.0/tests/unit/engine/test_inliner_early_return.py +433 -0
  453. proof_frog-0.6.0/tests/unit/engine/test_inliner_name_collision.py +206 -0
  454. proof_frog-0.6.0/tests/unit/engine/test_inliner_nested_calls.py +211 -0
  455. proof_frog-0.6.0/tests/unit/engine/test_modint_proof_engine.py +702 -0
  456. proof_frog-0.6.0/tests/unit/engine/test_non_interchangeable.py +213 -0
  457. proof_frog-0.6.0/tests/unit/engine/test_resolve_step_game.py +23 -0
  458. proof_frog-0.6.0/tests/unit/engine/test_this_inlining.py +135 -0
  459. proof_frog-0.6.0/tests/unit/engine/test_z3_residual_equivalence.py +200 -0
  460. proof_frog-0.6.0/tests/unit/export/__init__.py +0 -0
  461. proof_frog-0.6.0/tests/unit/export/latex/__init__.py +0 -0
  462. proof_frog-0.6.0/tests/unit/export/latex/fixtures/destructuring.game +22 -0
  463. proof_frog-0.6.0/tests/unit/export/latex/test_backend_cryptocode.py +270 -0
  464. proof_frog-0.6.0/tests/unit/export/latex/test_destructuring_render.py +107 -0
  465. proof_frog-0.6.0/tests/unit/export/latex/test_diff.py +133 -0
  466. proof_frog-0.6.0/tests/unit/export/latex/test_expr_decorations.py +123 -0
  467. proof_frog-0.6.0/tests/unit/export/latex/test_expr_renderer.py +252 -0
  468. proof_frog-0.6.0/tests/unit/export/latex/test_expr_typed_ops.py +88 -0
  469. proof_frog-0.6.0/tests/unit/export/latex/test_expr_xor.py +62 -0
  470. proof_frog-0.6.0/tests/unit/export/latex/test_include_mode.py +97 -0
  471. proof_frog-0.6.0/tests/unit/export/latex/test_ir.py +33 -0
  472. proof_frog-0.6.0/tests/unit/export/latex/test_macros.py +118 -0
  473. proof_frog-0.6.0/tests/unit/export/latex/test_pdflatex_smoke.py +64 -0
  474. proof_frog-0.6.0/tests/unit/export/latex/test_pdflatex_sweep.py +78 -0
  475. proof_frog-0.6.0/tests/unit/export/latex/test_proof_context.py +124 -0
  476. proof_frog-0.6.0/tests/unit/export/latex/test_proof_renderer.py +327 -0
  477. proof_frog-0.6.0/tests/unit/export/latex/test_render_game.py +56 -0
  478. proof_frog-0.6.0/tests/unit/export/latex/test_render_primitive.py +76 -0
  479. proof_frog-0.6.0/tests/unit/export/latex/test_render_scheme.py +22 -0
  480. proof_frog-0.6.0/tests/unit/export/latex/test_stmt_renderer.py +174 -0
  481. proof_frog-0.6.0/tests/unit/export/latex/test_type_renderer.py +43 -0
  482. proof_frog-0.6.0/tests/unit/other/__init__.py +0 -0
  483. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/other}/test_dependencies.py +1 -1
  484. proof_frog-0.6.0/tests/unit/other/test_describe.py +126 -0
  485. proof_frog-0.6.0/tests/unit/other/test_path_security.py +193 -0
  486. proof_frog-0.6.0/tests/unit/other/test_suggestions.py +121 -0
  487. proof_frog-0.6.0/tests/unit/parsing/__init__.py +0 -0
  488. proof_frog-0.6.0/tests/unit/parsing/test_advantage_clause.py +69 -0
  489. proof_frog-0.6.0/tests/unit/parsing/test_bitstring_literals.py +225 -0
  490. proof_frog-0.6.0/tests/unit/parsing/test_destructuring.py +226 -0
  491. proof_frog-0.6.0/tests/unit/parsing/test_expression_str.py +165 -0
  492. proof_frog-0.6.0/tests/unit/parsing/test_helpers_after_theorem.py +96 -0
  493. proof_frog-0.6.0/tests/unit/parsing/test_method_annotations.py +116 -0
  494. proof_frog-0.6.0/tests/unit/parsing/test_modint_parsing.py +429 -0
  495. proof_frog-0.6.0/tests/unit/parsing/test_parse_errors.py +515 -0
  496. proof_frog-0.6.0/tests/unit/parsing/test_proof_bound_clause.py +65 -0
  497. proof_frog-0.6.0/tests/unit/parsing/test_random_functions_parsing.py +176 -0
  498. proof_frog-0.6.0/tests/unit/parsing/test_requires_parse.py +60 -0
  499. proof_frog-0.6.0/tests/unit/parsing/test_roundtrip_surface_forms.py +143 -0
  500. proof_frog-0.6.0/tests/unit/parsing/test_set_minus_sampling.py +83 -0
  501. proof_frog-0.6.0/tests/unit/test_diagnostics.py +251 -0
  502. proof_frog-0.6.0/tests/unit/test_diagnostics_integration.py +146 -0
  503. proof_frog-0.6.0/tests/unit/test_provenance.py +126 -0
  504. proof_frog-0.6.0/tests/unit/transforms/__init__.py +0 -0
  505. proof_frog-0.6.0/tests/unit/transforms/test_absorb_redundant_early_return.py +370 -0
  506. proof_frog-0.6.0/tests/unit/transforms/test_alpha_rename.py +100 -0
  507. proof_frog-0.6.0/tests/unit/transforms/test_alpha_simplify_if.py +211 -0
  508. proof_frog-0.6.0/tests/unit/transforms/test_apply_assumptions.py +166 -0
  509. proof_frog-0.6.0/tests/unit/transforms/test_boolean_absorption.py +121 -0
  510. proof_frog-0.6.0/tests/unit/transforms/test_boolean_identity.py +169 -0
  511. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_branch_elimination.py +47 -2
  512. proof_frog-0.6.0/tests/unit/transforms/test_challenge_exclusion_injective.py +235 -0
  513. proof_frog-0.6.0/tests/unit/transforms/test_challenge_exclusion_rf.py +481 -0
  514. proof_frog-0.6.0/tests/unit/transforms/test_challenge_exclusion_rf_alias.py +93 -0
  515. proof_frog-0.6.0/tests/unit/transforms/test_challenge_exclusion_slice_guard.py +432 -0
  516. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_collapse_assignment.py +26 -2
  517. proof_frog-0.6.0/tests/unit/transforms/test_collapse_single_index_tuple.py +161 -0
  518. proof_frog-0.6.0/tests/unit/transforms/test_concat_equality_decompose.py +374 -0
  519. proof_frog-0.6.0/tests/unit/transforms/test_counter_guarded_field_to_local.py +698 -0
  520. proof_frog-0.6.0/tests/unit/transforms/test_cross_method_cse.py +537 -0
  521. proof_frog-0.6.0/tests/unit/transforms/test_dead_guarded_assignment_elimination.py +228 -0
  522. proof_frog-0.6.0/tests/unit/transforms/test_dead_null_guard.py +141 -0
  523. proof_frog-0.6.0/tests/unit/transforms/test_dedup_deterministic.py +424 -0
  524. proof_frog-0.6.0/tests/unit/transforms/test_deterministic_transforms.py +315 -0
  525. proof_frog-0.6.0/tests/unit/transforms/test_distinct_const_rf_to_uniform.py +352 -0
  526. proof_frog-0.6.0/tests/unit/transforms/test_else_unwrap.py +170 -0
  527. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_expand_tuples.py +108 -21
  528. proof_frog-0.6.0/tests/unit/transforms/test_extract_repeated_tuple_access.py +289 -0
  529. proof_frog-0.6.0/tests/unit/transforms/test_extract_rf_calls.py +93 -0
  530. proof_frog-0.6.0/tests/unit/transforms/test_factor_common_guard.py +360 -0
  531. proof_frog-0.6.0/tests/unit/transforms/test_field_lex_min_by_rhs.py +197 -0
  532. proof_frog-0.6.0/tests/unit/transforms/test_flatten_concat_chain.py +182 -0
  533. proof_frog-0.6.0/tests/unit/transforms/test_fold_equivalent_return_branch.py +180 -0
  534. proof_frog-0.6.0/tests/unit/transforms/test_fold_tuple_deterministic.py +99 -0
  535. proof_frog-0.6.0/tests/unit/transforms/test_fold_tuple_index.py +93 -0
  536. proof_frog-0.6.0/tests/unit/transforms/test_forward_expression_alias.py +299 -0
  537. proof_frog-0.6.0/tests/unit/transforms/test_fresh_input_rf_to_uniform.py +390 -0
  538. proof_frog-0.6.0/tests/unit/transforms/test_function_determinism.py +103 -0
  539. proof_frog-0.6.0/tests/unit/transforms/test_groupelem_cancellation.py +210 -0
  540. proof_frog-0.6.0/tests/unit/transforms/test_groupelem_simplification.py +222 -0
  541. proof_frog-0.6.0/tests/unit/transforms/test_guard_condition_simplification.py +199 -0
  542. proof_frog-0.6.0/tests/unit/transforms/test_hoist_deterministic_call_to_initialize.py +872 -0
  543. proof_frog-0.6.0/tests/unit/transforms/test_hoist_duplicate_branch.py +109 -0
  544. proof_frog-0.6.0/tests/unit/transforms/test_hoist_field_pure_alias.py +261 -0
  545. proof_frog-0.6.0/tests/unit/transforms/test_hoist_group_exp_to_initialize.py +300 -0
  546. proof_frog-0.6.0/tests/unit/transforms/test_if_condition_alias.py +617 -0
  547. proof_frog-0.6.0/tests/unit/transforms/test_if_condition_alias_array_access.py +44 -0
  548. proof_frog-0.6.0/tests/unit/transforms/test_if_false_return_to_conjunction.py +283 -0
  549. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_if_simplification.py +3 -2
  550. proof_frog-0.6.0/tests/unit/transforms/test_if_split_branch_assignment.py +177 -0
  551. proof_frog-0.6.0/tests/unit/transforms/test_if_to_boolean_assignment.py +181 -0
  552. proof_frog-0.6.0/tests/unit/transforms/test_injective_equality_group_exp.py +291 -0
  553. proof_frog-0.6.0/tests/unit/transforms/test_injective_equality_simplify.py +296 -0
  554. proof_frog-0.6.0/tests/unit/transforms/test_inline_multi_use_pure.py +201 -0
  555. proof_frog-0.6.0/tests/unit/transforms/test_inline_single_use_field.py +596 -0
  556. proof_frog-0.6.0/tests/unit/transforms/test_inline_single_use_field_via_local_promotion.py +244 -0
  557. proof_frog-0.6.0/tests/unit/transforms/test_inline_single_use_variable.py +328 -0
  558. proof_frog-0.6.0/tests/unit/transforms/test_lazy_map_pair_to_sampled_function.py +399 -0
  559. proof_frog-0.6.0/tests/unit/transforms/test_lazy_map_scan.py +731 -0
  560. proof_frog-0.6.0/tests/unit/transforms/test_lazy_map_to_sampled_function.py +540 -0
  561. proof_frog-0.6.0/tests/unit/transforms/test_local_function_field_to_let.py +266 -0
  562. proof_frog-0.6.0/tests/unit/transforms/test_local_rf_to_uniform.py +240 -0
  563. proof_frog-0.6.0/tests/unit/transforms/test_localize_init_only_field_sample.py +124 -0
  564. proof_frog-0.6.0/tests/unit/transforms/test_map_key_reindex.py +345 -0
  565. proof_frog-0.6.0/tests/unit/transforms/test_map_key_reindex_prime_order.py +117 -0
  566. proof_frog-0.6.0/tests/unit/transforms/test_map_key_reindex_soundness.py +221 -0
  567. proof_frog-0.6.0/tests/unit/transforms/test_merge_product_samples.py +158 -0
  568. proof_frog-0.6.0/tests/unit/transforms/test_merge_uniform_samples.py +193 -0
  569. proof_frog-0.6.0/tests/unit/transforms/test_modint_visitors.py +240 -0
  570. proof_frog-0.6.0/tests/unit/transforms/test_near_misses.py +2263 -0
  571. proof_frog-0.6.0/tests/unit/transforms/test_normalize_commutative.py +177 -0
  572. proof_frog-0.6.0/tests/unit/transforms/test_normalize_product_literal.py +291 -0
  573. proof_frog-0.6.0/tests/unit/transforms/test_ordering.py +321 -0
  574. proof_frog-0.6.0/tests/unit/transforms/test_parameter_standardizing.py +124 -0
  575. proof_frog-0.6.0/tests/unit/transforms/test_redundant_conditional_return.py +231 -0
  576. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_redundant_copies.py +21 -2
  577. proof_frog-0.6.0/tests/unit/transforms/test_redundant_field_copy.py +235 -0
  578. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_remove_duplicate_fields.py +53 -0
  579. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_remove_unnecessary_statements.py +21 -0
  580. proof_frog-0.6.0/tests/unit/transforms/test_requirements_helpers.py +61 -0
  581. proof_frog-0.6.0/tests/unit/transforms/test_simplify_not.py +110 -0
  582. proof_frog-0.6.0/tests/unit/transforms/test_simplify_return.py +293 -0
  583. proof_frog-0.6.0/tests/unit/transforms/test_single_call_field_to_local.py +445 -0
  584. proof_frog-0.6.0/tests/unit/transforms/test_single_call_field_to_local_f056.py +54 -0
  585. proof_frog-0.6.0/tests/unit/transforms/test_sink_uniform_sample.py +270 -0
  586. proof_frog-0.6.0/tests/unit/transforms/test_slice_of_inline_concat.py +229 -0
  587. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_slice_simplification.py +71 -4
  588. proof_frog-0.6.0/tests/unit/transforms/test_split_opaque_tuple_field.py +219 -0
  589. proof_frog-0.6.0/tests/unit/transforms/test_split_uniform_samples.py +408 -0
  590. proof_frog-0.6.0/tests/unit/transforms/test_stabilize_independent.py +254 -0
  591. proof_frog-0.6.0/tests/unit/transforms/test_subset_type_normalizer.py +415 -0
  592. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_symbolic_computation_transformer.py +36 -4
  593. proof_frog-0.6.0/tests/unit/transforms/test_tuple_equality_decompose.py +84 -0
  594. proof_frog-0.6.0/tests/unit/transforms/test_uniform_bijection_elimination.py +332 -0
  595. proof_frog-0.6.0/tests/unit/transforms/test_uniform_modint_simplification.py +105 -0
  596. proof_frog-0.6.0/tests/unit/transforms/test_uniform_xor_simplification.py +184 -0
  597. proof_frog-0.6.0/tests/unit/transforms/test_uniq_exclusion_branch_elim.py +448 -0
  598. proof_frog-0.6.0/tests/unit/transforms/test_unique_rf_simplification.py +364 -0
  599. proof_frog-0.6.0/tests/unit/transforms/test_unreachable_transformer.py +843 -0
  600. proof_frog-0.6.0/tests/unit/transforms/test_var_count_visitor.py +174 -0
  601. proof_frog-0.6.0/tests/unit/transforms/test_variable_standardizing.py +183 -0
  602. proof_frog-0.6.0/tests/unit/transforms/test_xor_cancellation.py +456 -0
  603. proof_frog-0.6.0/tests/unit/typechecking/__init__.py +0 -0
  604. proof_frog-0.6.0/tests/unit/typechecking/test_check_type_visitor.py +472 -0
  605. proof_frog-0.6.0/tests/unit/typechecking/test_compare_types.py +203 -0
  606. proof_frog-0.6.0/tests/unit/typechecking/test_deterministic_sampling_free.py +117 -0
  607. proof_frog-0.6.0/tests/unit/typechecking/test_generic_for_map_array.py +339 -0
  608. proof_frog-0.6.0/tests/unit/typechecking/test_ill_formed.py +413 -0
  609. proof_frog-0.6.0/tests/unit/typechecking/test_let_block_sampling.py +105 -0
  610. proof_frog-0.6.0/tests/unit/typechecking/test_modint_type_checking.py +387 -0
  611. proof_frog-0.6.0/tests/unit/typechecking/test_product_type_comparison.py +58 -0
  612. proof_frog-0.6.0/tests/unit/typechecking/test_random_functions_typechecking.py +130 -0
  613. proof_frog-0.6.0/tests/unit/typechecking/test_requires_semantics.py +122 -0
  614. proof_frog-0.6.0/tests/unit/typechecking/test_resolve_tuple_alias.py +71 -0
  615. proof_frog-0.6.0/tests/unit/typechecking/test_semantic_errors.py +485 -0
  616. proof_frog-0.6.0/tests/unit/typechecking/test_this_keyword.py +103 -0
  617. proof_frog-0.6.0/tests/unit/typechecking/test_uniq_minus_split.py +119 -0
  618. proof_frog-0.6.0/tests/unit/visitors/__init__.py +0 -0
  619. proof_frog-0.6.0/tests/unit/visitors/test_cow_transformer.py +195 -0
  620. proof_frog-0.6.0/tests/unit/visitors/test_extract_subsets_pairs.py +100 -0
  621. proof_frog-0.6.0/tests/unit/visitors/test_instantiation_transformer.py +162 -0
  622. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/visitors}/test_same_field_visitor.py +52 -3
  623. proof_frog-0.6.0/tests/unit/visitors/test_z3_formula_visitor_opaque.py +268 -0
  624. proof_frog-0.6.0/tests/unit/visitors/test_z3_formula_visitor_product_type.py +106 -0
  625. proof_frog-0.6.0/vscode-extension/.vscodeignore +8 -0
  626. proof_frog-0.6.0/vscode-extension/LICENSE +21 -0
  627. proof_frog-0.6.0/vscode-extension/README.md +42 -0
  628. proof_frog-0.6.0/vscode-extension/language-configuration.json +26 -0
  629. proof_frog-0.6.0/vscode-extension/package-lock.json +4471 -0
  630. proof_frog-0.6.0/vscode-extension/package.json +86 -0
  631. proof_frog-0.6.0/vscode-extension/prooffrog.png +0 -0
  632. proof_frog-0.6.0/vscode-extension/src/extension.ts +172 -0
  633. proof_frog-0.6.0/vscode-extension/src/proof_tree.ts +87 -0
  634. proof_frog-0.6.0/vscode-extension/syntaxes/prooffrog.tmLanguage.json +124 -0
  635. proof_frog-0.6.0/vscode-extension/tsconfig.json +15 -0
  636. proof_frog-0.2.0/.gitignore +0 -5
  637. proof_frog-0.2.0/.vscode/launch.json +0 -18
  638. proof_frog-0.2.0/.vscode/settings.json +0 -11
  639. proof_frog-0.2.0/PKG-INFO +0 -51
  640. proof_frog-0.2.0/README.md +0 -35
  641. proof_frog-0.2.0/examples/Book/2/2_13.proof +0 -33
  642. proof_frog-0.2.0/examples/Book/2/2_15.proof +0 -1
  643. proof_frog-0.2.0/examples/Book/2_Exercises/2_13.proof +0 -40
  644. proof_frog-0.2.0/examples/Book/2_Exercises/2_14_Backward.proof +0 -50
  645. proof_frog-0.2.0/examples/Book/2_Exercises/2_15_Backward.proof +0 -37
  646. proof_frog-0.2.0/examples/Book/2_Exercises/2_15_Forward.proof +0 -38
  647. proof_frog-0.2.0/examples/Book/5/5_3.proof +0 -78
  648. proof_frog-0.2.0/examples/Book/5/5_5_TriplingPRGSecure.proof +0 -1
  649. proof_frog-0.2.0/examples/Book/5_Exercises/5_10.proof +0 -94
  650. proof_frog-0.2.0/examples/Book/5_Exercises/5_8_PseudoOTP_OTUC.proof +0 -46
  651. proof_frog-0.2.0/examples/Book/5_Exercises/5_8_ThreePartBitStringSampling.game +0 -17
  652. proof_frog-0.2.0/examples/Book/5_Exercises/5_8_a.proof +0 -85
  653. proof_frog-0.2.0/examples/Book/5_Exercises/5_8_b.proof +0 -65
  654. proof_frog-0.2.0/examples/Book/5_Exercises/5_8_e.proof +0 -44
  655. proof_frog-0.2.0/examples/Book/5_Exercises/5_8_e.scheme +0 -12
  656. proof_frog-0.2.0/examples/Book/5_Exercises/5_8_f.proof +0 -60
  657. proof_frog-0.2.0/examples/Book/7_Exercises/7_13_Backward.proof +0 -50
  658. proof_frog-0.2.0/examples/Book/7_Exercises/7_13_Forward.proof +0 -38
  659. proof_frog-0.2.0/examples/Book/9_Exercises/9_6_CCA$impliesCCA.proof +0 -43
  660. proof_frog-0.2.0/examples/Games/DigitalSignature/Security.game +0 -47
  661. proof_frog-0.2.0/examples/Games/Hash/Security.game +0 -29
  662. proof_frog-0.2.0/examples/Games/KEM/Correctness.game +0 -39
  663. proof_frog-0.2.0/examples/Games/KeyAgreement/Security.game +0 -17
  664. proof_frog-0.2.0/examples/Games/Misc/BitStringSampling.game +0 -16
  665. proof_frog-0.2.0/examples/Games/Misc/OTPOTS.game +0 -15
  666. proof_frog-0.2.0/examples/Games/Misc/OTPUniform.game +0 -15
  667. proof_frog-0.2.0/examples/Games/Misc/Predict.game +0 -14
  668. proof_frog-0.2.0/examples/Games/Misc/Sample.game +0 -18
  669. proof_frog-0.2.0/examples/Games/PRF/Security.game +0 -25
  670. proof_frog-0.2.0/examples/Games/PRP/Security.game +0 -26
  671. proof_frog-0.2.0/examples/Games/PRP/StrongSecurity.game +0 -42
  672. proof_frog-0.2.0/examples/Games/PubKeyEnc/Correctness.game +0 -37
  673. proof_frog-0.2.0/examples/Games/SecretSharing/Correctness.game +0 -32
  674. proof_frog-0.2.0/examples/Games/SecretSharing/Security.game +0 -39
  675. proof_frog-0.2.0/examples/Games/SymEnc/AE.game +0 -37
  676. proof_frog-0.2.0/examples/Games/SymEnc/CCA.game +0 -73
  677. proof_frog-0.2.0/examples/Games/SymEnc/Correctness.game +0 -17
  678. proof_frog-0.2.0/examples/Games/SymEnc/OneTimeUniformCiphertexts.game +0 -18
  679. proof_frog-0.2.0/examples/Primitives/DigitalSignature.primitive +0 -10
  680. proof_frog-0.2.0/examples/Primitives/Hash.primitive +0 -6
  681. proof_frog-0.2.0/examples/Primitives/KEM.primitive +0 -10
  682. proof_frog-0.2.0/examples/Primitives/KeyAgreement.primitive +0 -6
  683. proof_frog-0.2.0/examples/Primitives/MAC.primitive +0 -9
  684. proof_frog-0.2.0/examples/Primitives/PRF.primitive +0 -7
  685. proof_frog-0.2.0/examples/Primitives/PRG.primitive +0 -6
  686. proof_frog-0.2.0/examples/Primitives/PRP.primitive +0 -8
  687. proof_frog-0.2.0/examples/Primitives/SecretSharing.primitive +0 -10
  688. proof_frog-0.2.0/examples/Proofs/Misc/PredictIndistinguishable.proof.todo +0 -50
  689. proof_frog-0.2.0/examples/Proofs/Misc/SampleIndistinguishable.proof.todo +0 -56
  690. proof_frog-0.2.0/examples/Proofs/PRG/CounterPRGSecure.proof.todo +0 -188
  691. proof_frog-0.2.0/examples/Proofs/PRG/TriplingPRGSecure.proof +0 -76
  692. proof_frog-0.2.0/examples/Proofs/PubEnc/OTSimpliesCPA.proof +0 -63
  693. proof_frog-0.2.0/examples/Proofs/SecretSharing/OTPSecretSharingSecure.proof.todo +0 -152
  694. proof_frog-0.2.0/examples/Proofs/SymEnc/CPA$impliesCPA.proof +0 -37
  695. proof_frog-0.2.0/examples/Proofs/SymEnc/DoubleCPA$.proof +0 -43
  696. proof_frog-0.2.0/examples/Proofs/SymEnc/GeneralDoubleOTUC.proof +0 -44
  697. proof_frog-0.2.0/examples/Proofs/SymEnc/OTUCimpliesDoubleOTUC.proof +0 -38
  698. proof_frog-0.2.0/examples/Proofs/SymEnc/OTUCimpliesOTS.proof +0 -50
  699. proof_frog-0.2.0/examples/Proofs/SymEnc/SymEncPRFCPA$Secure.proof.todo +0 -152
  700. proof_frog-0.2.0/examples/README.md +0 -2
  701. proof_frog-0.2.0/examples/Schemes/PRG/CounterPRG.scheme +0 -15
  702. proof_frog-0.2.0/examples/Schemes/PubEnc/Hybrid.scheme +0 -27
  703. proof_frog-0.2.0/examples/Schemes/SecretSharing/OTP.scheme +0 -18
  704. proof_frog-0.2.0/examples/Schemes/SymEnc/OFB.scheme +0 -38
  705. proof_frog-0.2.0/examples/Schemes/SymEnc/SymEncPRF.scheme +0 -26
  706. proof_frog-0.2.0/ill-formed/fixtures/EmptyPrimitive.primitive +0 -3
  707. proof_frog-0.2.0/ill-formed/fixtures/SimplePrimitive.primitive +0 -5
  708. proof_frog-0.2.0/ill-formed/fixtures/VoidFPrimitive.primitive +0 -3
  709. proof_frog-0.2.0/ill-formed/primitives/InvalidExpression.primitive +0 -5
  710. proof_frog-0.2.0/ill-formed/primitives/InvalidMethodParameterType.primitive +0 -9
  711. proof_frog-0.2.0/ill-formed/primitives/InvalidMethodReturnType.primitive +0 -9
  712. proof_frog-0.2.0/ill-formed/primitives/InvalidParameter.primitive +0 -5
  713. proof_frog-0.2.0/ill-formed/primitives/MismatchedType.primitive +0 -3
  714. proof_frog-0.2.0/ill-formed/primitives/RepeatedField.primitive +0 -4
  715. proof_frog-0.2.0/ill-formed/primitives/RepeatedMethod.primitive +0 -4
  716. proof_frog-0.2.0/ill-formed/primitives/RepeatedMethodParam.primitive +0 -6
  717. proof_frog-0.2.0/ill-formed/primitives/RepeatedParameter.primitive +0 -3
  718. proof_frog-0.2.0/ill-formed/primitives/UndefinedType.primitive +0 -3
  719. proof_frog-0.2.0/ill-formed/scheme/BadIf.scheme +0 -10
  720. proof_frog-0.2.0/ill-formed/scheme/IncorrectReturn.scheme +0 -9
  721. proof_frog-0.2.0/ill-formed/scheme/general/InvalidExpression.scheme +0 -7
  722. proof_frog-0.2.0/ill-formed/scheme/general/InvalidParameter.scheme +0 -7
  723. proof_frog-0.2.0/ill-formed/scheme/general/MismatchedType.scheme +0 -5
  724. proof_frog-0.2.0/ill-formed/scheme/general/RepeatedField.scheme +0 -6
  725. proof_frog-0.2.0/ill-formed/scheme/general/RepeatedMethod.scheme +0 -6
  726. proof_frog-0.2.0/ill-formed/scheme/general/RepeatedMethodParam.scheme +0 -8
  727. proof_frog-0.2.0/ill-formed/scheme/general/RepeatedParameter.scheme +0 -5
  728. proof_frog-0.2.0/ill-formed/scheme/general/UndefinedType.scheme +0 -5
  729. proof_frog-0.2.0/ill-formed/scheme/scheme-specific/IncorrectOverride.scheme +0 -7
  730. proof_frog-0.2.0/ill-formed/scheme/scheme-specific/NonExistentExtend.scheme +0 -3
  731. proof_frog-0.2.0/ill-formed/scheme/scheme-specific/NotOverridingFields.scheme +0 -7
  732. proof_frog-0.2.0/ill-formed/scheme/scheme-specific/NotOverridingMethods.scheme +0 -5
  733. proof_frog-0.2.0/jupyter/kernel/kernel.json +0 -4
  734. proof_frog-0.2.0/proof_frog/antlr/Game.g4 +0 -7
  735. proof_frog-0.2.0/proof_frog/antlr/Proof.g4 +0 -46
  736. proof_frog-0.2.0/proof_frog/dependencies.py +0 -241
  737. proof_frog-0.2.0/proof_frog/frog_parser.py +0 -739
  738. proof_frog-0.2.0/proof_frog/parsing/Game.interp +0 -153
  739. proof_frog-0.2.0/proof_frog/parsing/Game.tokens +0 -112
  740. proof_frog-0.2.0/proof_frog/parsing/GameLexer.interp +0 -194
  741. proof_frog-0.2.0/proof_frog/parsing/GameLexer.py +0 -257
  742. proof_frog-0.2.0/proof_frog/parsing/GameLexer.tokens +0 -112
  743. proof_frog-0.2.0/proof_frog/parsing/Primitive.interp +0 -153
  744. proof_frog-0.2.0/proof_frog/parsing/Primitive.tokens +0 -112
  745. proof_frog-0.2.0/proof_frog/parsing/PrimitiveLexer.interp +0 -194
  746. proof_frog-0.2.0/proof_frog/parsing/PrimitiveLexer.py +0 -257
  747. proof_frog-0.2.0/proof_frog/parsing/PrimitiveLexer.tokens +0 -112
  748. proof_frog-0.2.0/proof_frog/parsing/Proof.interp +0 -189
  749. proof_frog-0.2.0/proof_frog/parsing/Proof.tokens +0 -136
  750. proof_frog-0.2.0/proof_frog/parsing/ProofLexer.interp +0 -230
  751. proof_frog-0.2.0/proof_frog/parsing/ProofLexer.py +0 -314
  752. proof_frog-0.2.0/proof_frog/parsing/ProofLexer.tokens +0 -136
  753. proof_frog-0.2.0/proof_frog/parsing/Scheme.interp +0 -160
  754. proof_frog-0.2.0/proof_frog/parsing/Scheme.tokens +0 -118
  755. proof_frog-0.2.0/proof_frog/parsing/SchemeLexer.interp +0 -203
  756. proof_frog-0.2.0/proof_frog/parsing/SchemeLexer.py +0 -270
  757. proof_frog-0.2.0/proof_frog/parsing/SchemeLexer.tokens +0 -118
  758. proof_frog-0.2.0/proof_frog/proof_engine.py +0 -792
  759. proof_frog-0.2.0/proof_frog/proof_frog.py +0 -86
  760. proof_frog-0.2.0/proof_frog/semantic_analysis.py +0 -1273
  761. proof_frog-0.2.0/proof_frog/visitors.py +0 -1625
  762. proof_frog-0.2.0/pyproject.toml +0 -70
  763. proof_frog-0.2.0/regenerateParser.sh +0 -11
  764. proof_frog-0.2.0/requirements-dev.txt +0 -5
  765. proof_frog-0.2.0/requirements.txt +0 -4
  766. proof_frog-0.2.0/testAST.sh +0 -46
  767. proof_frog-0.2.0/testParsing.sh +0 -29
  768. proof_frog-0.2.0/testProofTypeCheck.sh +0 -9
  769. proof_frog-0.2.0/testProofs.sh +0 -26
  770. proof_frog-0.2.0/tests/test_simplify_return.py +0 -63
  771. proof_frog-0.2.0/tests/test_unreachable_transformer.py +0 -368
  772. {proof_frog-0.2.0 → proof_frog-0.6.0}/.gitattributes +0 -0
  773. {proof_frog-0.2.0 → proof_frog-0.6.0}/.gitmodules +0 -0
  774. {proof_frog-0.2.0 → proof_frog-0.6.0}/LICENSE +0 -0
  775. {proof_frog-0.2.0 → proof_frog-0.6.0}/examples/LICENSE +0 -0
  776. {proof_frog-0.2.0/examples/Book → proof_frog-0.6.0/examples/joy_old}/5/5_4_TriplingPRG.scheme +0 -0
  777. {proof_frog-0.2.0 → proof_frog-0.6.0}/jupyter/example/OTUCimpliesOTS.ipynb +0 -0
  778. {proof_frog-0.2.0 → proof_frog-0.6.0/jupyter}/jupyter_kernel.py +0 -0
  779. {proof_frog-0.2.0 → proof_frog-0.6.0}/media/NSERC.jpg +0 -0
  780. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/__init__.py +0 -0
  781. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/__main__.py +0 -0
  782. {proof_frog-0.2.0 → proof_frog-0.6.0}/proof_frog/parsing/__init__.py +0 -0
  783. {proof_frog-0.2.0 → proof_frog-0.6.0}/tests/__init__.py +0 -0
  784. {proof_frog-0.2.0/tests → proof_frog-0.6.0/tests/unit/transforms}/test_remove_unnecessary_field.py +0 -0
  785. {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.10"]
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 -r requirements-dev.txt
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 -r requirements.txt
27
- pip install -r requirements-dev.txt
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 -r requirements.txt
27
- pip install -r requirements-dev.txt
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 -r requirements.txt
29
- pip install -r requirements-dev.txt
30
- - name: run testProofs.sh
30
+ pip install -e ".[dev]"
31
+ - name: Generate examples pin
32
+ run: make examples-pin
33
+ - name: run tests
31
34
  run: |
32
- ./testProofs.sh
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
+ ```