itp-interface 1.0.0__py3-none-any.whl

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 (485) hide show
  1. itp_interface/__init__.py +0 -0
  2. itp_interface/agent/__init__.py +0 -0
  3. itp_interface/agent/simple_proof_agent.py +100 -0
  4. itp_interface/coq_ser_api/__init__.py +165 -0
  5. itp_interface/coq_ser_api/contexts.py +283 -0
  6. itp_interface/coq_ser_api/coq_agent.py +459 -0
  7. itp_interface/coq_ser_api/coq_backend.py +135 -0
  8. itp_interface/coq_ser_api/coq_util.py +839 -0
  9. itp_interface/coq_ser_api/example.py +67 -0
  10. itp_interface/coq_ser_api/lsp_backend.py +375 -0
  11. itp_interface/coq_ser_api/py.typed +0 -0
  12. itp_interface/coq_ser_api/serapi_backend.py +841 -0
  13. itp_interface/coq_ser_api/util.py +145 -0
  14. itp_interface/coq_ser_api_old/__init__.py +2583 -0
  15. itp_interface/coq_ser_api_old/contexts.py +172 -0
  16. itp_interface/coq_ser_api_old/util.py +146 -0
  17. itp_interface/lean_server/__init__.py +0 -0
  18. itp_interface/lean_server/commands.py +484 -0
  19. itp_interface/lean_server/lean3_search_tool.py +358 -0
  20. itp_interface/lean_server/lean4_repl_interface.py +151 -0
  21. itp_interface/lean_server/lean4_utils.py +255 -0
  22. itp_interface/lean_server/lean_cmd_server.py +111 -0
  23. itp_interface/lean_server/lean_context.py +60 -0
  24. itp_interface/lean_server/lean_sync_server.py +174 -0
  25. itp_interface/lean_server/lean_utils.py +199 -0
  26. itp_interface/lean_server/py.typed +1 -0
  27. itp_interface/main/__init__.py +0 -0
  28. itp_interface/main/config/afp_data_gen.yaml +14 -0
  29. itp_interface/main/config/benchmark/CompCert.yaml +366 -0
  30. itp_interface/main/config/benchmark/GeoCoq.yaml +930 -0
  31. itp_interface/main/config/benchmark/UniMath.yaml +2690 -0
  32. itp_interface/main/config/benchmark/afp_isabelle.yaml +29200 -0
  33. itp_interface/main/config/benchmark/agent_proverbot_hard.yaml +247 -0
  34. itp_interface/main/config/benchmark/category-theory.yaml +470 -0
  35. itp_interface/main/config/benchmark/compcert_118_subset.yaml +148 -0
  36. itp_interface/main/config/benchmark/compcert_benchmark.yaml +36 -0
  37. itp_interface/main/config/benchmark/compcert_benchmark_hard.yaml +498 -0
  38. itp_interface/main/config/benchmark/compcert_benchmark_hard_1.yaml +55 -0
  39. itp_interface/main/config/benchmark/compcert_benchmark_hard_2.yaml +24 -0
  40. itp_interface/main/config/benchmark/compcert_benchmark_hard_3.yaml +95 -0
  41. itp_interface/main/config/benchmark/compcert_benchmark_hard_7_per_cent.yaml +78 -0
  42. itp_interface/main/config/benchmark/compcert_benchmark_test.yaml +38 -0
  43. itp_interface/main/config/benchmark/compcert_benchmark_train.yaml +340 -0
  44. itp_interface/main/config/benchmark/leandojo_novel_premises_test.yaml +2908 -0
  45. itp_interface/main/config/benchmark/leandojo_novel_premises_train.yaml +98645 -0
  46. itp_interface/main/config/benchmark/leandojo_novel_premises_val.yaml +2912 -0
  47. itp_interface/main/config/benchmark/leandojo_random.yaml +2889 -0
  48. itp_interface/main/config/benchmark/leandojo_random_test.yaml +2421 -0
  49. itp_interface/main/config/benchmark/leandojo_random_train.yaml +62729 -0
  50. itp_interface/main/config/benchmark/leandojo_random_val.yaml +2504 -0
  51. itp_interface/main/config/benchmark/math-comp.yaml +200 -0
  52. itp_interface/main/config/benchmark/miniF2F_test.yaml +12 -0
  53. itp_interface/main/config/benchmark/miniF2F_test_aime.yaml +27 -0
  54. itp_interface/main/config/benchmark/miniF2F_test_algebra.yaml +30 -0
  55. itp_interface/main/config/benchmark/miniF2F_test_amc12.yaml +57 -0
  56. itp_interface/main/config/benchmark/miniF2F_test_few_shot_hard.yaml +231 -0
  57. itp_interface/main/config/benchmark/miniF2F_test_imo.yaml +32 -0
  58. itp_interface/main/config/benchmark/miniF2F_test_induction.yaml +20 -0
  59. itp_interface/main/config/benchmark/miniF2F_test_mathd_algebra.yaml +82 -0
  60. itp_interface/main/config/benchmark/miniF2F_test_mathd_algebra_hard.yaml +72 -0
  61. itp_interface/main/config/benchmark/miniF2F_test_mathd_numbertheory.yaml +72 -0
  62. itp_interface/main/config/benchmark/miniF2F_test_numbertheory.yaml +20 -0
  63. itp_interface/main/config/benchmark/minicompcert_benchmark_1.yaml +14 -0
  64. itp_interface/main/config/benchmark/proverbot_hard.yaml +104 -0
  65. itp_interface/main/config/benchmark/re_prover.yaml +66 -0
  66. itp_interface/main/config/benchmark/re_prover_hard.yaml +41 -0
  67. itp_interface/main/config/benchmark/re_prover_very_hard.yaml +22 -0
  68. itp_interface/main/config/benchmark/reprover_with_retrieval.yaml +73 -0
  69. itp_interface/main/config/benchmark/reprover_with_retrieval_hard.yaml +30 -0
  70. itp_interface/main/config/benchmark/reprover_with_retrieval_neg.yaml +195 -0
  71. itp_interface/main/config/benchmark/simple_benchmark_1.yaml +24 -0
  72. itp_interface/main/config/benchmark/simple_benchmark_8.yaml +50 -0
  73. itp_interface/main/config/benchmark/simple_benchmark_9.yaml +65 -0
  74. itp_interface/main/config/benchmark/simple_benchmark_isabelle.yaml +18 -0
  75. itp_interface/main/config/benchmark/simple_benchmark_lean.yaml +12 -0
  76. itp_interface/main/config/benchmark/simple_benchmark_lean_training_data.yaml +12 -0
  77. itp_interface/main/config/benchmark/simple_rl_benchmark_lean.yaml +14 -0
  78. itp_interface/main/config/benchmark/stack_machine.yaml +13 -0
  79. itp_interface/main/config/benchmark/stack_machine_hard.yaml +15 -0
  80. itp_interface/main/config/category_theory_data_gen.yaml +14 -0
  81. itp_interface/main/config/category_theory_data_gen_random.yaml +16 -0
  82. itp_interface/main/config/compcert_data_gen_test.yaml +10 -0
  83. itp_interface/main/config/compcert_data_gen_train.yaml +7 -0
  84. itp_interface/main/config/env_settings/bm25_retrieval.yaml +2 -0
  85. itp_interface/main/config/env_settings/bm25_retrieval_no_dfns.yaml +2 -0
  86. itp_interface/main/config/env_settings/bm25_retrieval_only_local_no_dfns.yaml +2 -0
  87. itp_interface/main/config/env_settings/bm25_retrieval_with_print.yaml +2 -0
  88. itp_interface/main/config/env_settings/bm25_retrieval_with_print_only_local.yaml +2 -0
  89. itp_interface/main/config/env_settings/bm25_retrieval_with_print_only_local_no_dfns.yaml +2 -0
  90. itp_interface/main/config/env_settings/no_retrieval.yaml +2 -0
  91. itp_interface/main/config/experiments.yaml +12 -0
  92. itp_interface/main/config/geo_coq_data_gen.yaml +14 -0
  93. itp_interface/main/config/geo_coq_data_gen_random.yaml +16 -0
  94. itp_interface/main/config/leandojo_random_data_gen.yaml +16 -0
  95. itp_interface/main/config/math_comp_data_gen.yaml +14 -0
  96. itp_interface/main/config/math_comp_data_gen_random.yaml +16 -0
  97. itp_interface/main/config/mathlib_data_gen.yaml +14 -0
  98. itp_interface/main/config/repo/coq_repos.yaml +191 -0
  99. itp_interface/main/config/run_settings/default_coq_data_generation_transforms.yaml +24 -0
  100. itp_interface/main/config/run_settings/default_isabelle_data_generation_transforms.yaml +24 -0
  101. itp_interface/main/config/run_settings/default_lean4_data_generation_transforms.yaml +24 -0
  102. itp_interface/main/config/run_settings/default_lean_data_generation_transforms.yaml +24 -0
  103. itp_interface/main/config/simple_coq_data_gen.yaml +12 -0
  104. itp_interface/main/config/simple_coq_data_gen_random.yaml +17 -0
  105. itp_interface/main/config/simple_lean_data_gen.yaml +12 -0
  106. itp_interface/main/config/simple_rl_lean_data_gen.yaml +12 -0
  107. itp_interface/main/config/uni_math_data_gen.yaml +14 -0
  108. itp_interface/main/config.py +192 -0
  109. itp_interface/main/extract_benchmark_dataset.py +106 -0
  110. itp_interface/main/filter_dataset.py +107 -0
  111. itp_interface/main/install.py +92 -0
  112. itp_interface/main/merge_dataset.py +96 -0
  113. itp_interface/main/run_tool.py +444 -0
  114. itp_interface/pisa/.git +1 -0
  115. itp_interface/pisa/.gitignore +125 -0
  116. itp_interface/pisa/.idea/.gitignore +8 -0
  117. itp_interface/pisa/.idea/ClojureProjectResolveSettings.xml +6 -0
  118. itp_interface/pisa/.idea/codeStyles/Project.xml +7 -0
  119. itp_interface/pisa/.idea/codeStyles/codeStyleConfig.xml +5 -0
  120. itp_interface/pisa/.idea/inspectionProfiles/Project_Default.xml +16 -0
  121. itp_interface/pisa/.idea/libraries/sbt__com_google_android_annotations_4_1_1_4_jar.xml +13 -0
  122. itp_interface/pisa/.idea/libraries/sbt__com_google_api_grpc_proto_google_common_protos_1_17_0_jar.xml +13 -0
  123. itp_interface/pisa/.idea/libraries/sbt__com_google_code_findbugs_jsr305_3_0_2_jar.xml +13 -0
  124. itp_interface/pisa/.idea/libraries/sbt__com_google_code_gson_gson_2_8_6_jar.xml +13 -0
  125. itp_interface/pisa/.idea/libraries/sbt__com_google_errorprone_error_prone_annotations_2_3_4_jar.xml +13 -0
  126. itp_interface/pisa/.idea/libraries/sbt__com_google_guava_failureaccess_1_0_1_jar.xml +13 -0
  127. itp_interface/pisa/.idea/libraries/sbt__com_google_guava_guava_30_0_jre_jar.xml +13 -0
  128. itp_interface/pisa/.idea/libraries/sbt__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava_jar.xml +9 -0
  129. itp_interface/pisa/.idea/libraries/sbt__com_google_j2objc_j2objc_annotations_1_3_jar.xml +13 -0
  130. itp_interface/pisa/.idea/libraries/sbt__com_google_protobuf_protobuf_java_3_12_0_jar.xml +13 -0
  131. itp_interface/pisa/.idea/libraries/sbt__com_google_protobuf_protobuf_java_util_3_12_0_jar.xml +13 -0
  132. itp_interface/pisa/.idea/libraries/sbt__com_lihaoyi_fastparse_2_13_2_3_0_jar.xml +13 -0
  133. itp_interface/pisa/.idea/libraries/sbt__com_lihaoyi_geny_2_13_0_6_0_jar.xml +13 -0
  134. itp_interface/pisa/.idea/libraries/sbt__com_lihaoyi_sourcecode_2_13_0_2_1_jar.xml +13 -0
  135. itp_interface/pisa/.idea/libraries/sbt__com_thesamet_scalapb_lenses_2_13_0_10_9_jar.xml +13 -0
  136. itp_interface/pisa/.idea/libraries/sbt__com_thesamet_scalapb_scalapb_runtime_2_13_0_10_9_jar.xml +13 -0
  137. itp_interface/pisa/.idea/libraries/sbt__com_thesamet_scalapb_scalapb_runtime_grpc_2_13_0_10_9_jar.xml +13 -0
  138. itp_interface/pisa/.idea/libraries/sbt__com_thesamet_scalapb_zio_grpc_zio_grpc_core_2_13_0_4_2_jar.xml +13 -0
  139. itp_interface/pisa/.idea/libraries/sbt__com_thoughtworks_paranamer_paranamer_2_8_jar.xml +13 -0
  140. itp_interface/pisa/.idea/libraries/sbt__commons_io_commons_io_2_8_0_jar.xml +13 -0
  141. itp_interface/pisa/.idea/libraries/sbt__de_unruh_java_patterns_0_1_0_jar.xml +13 -0
  142. itp_interface/pisa/.idea/libraries/sbt__de_unruh_scala_isabelle_2_13_master_SNAPSHOT_jar.xml +13 -0
  143. itp_interface/pisa/.idea/libraries/sbt__dev_zio_izumi_reflect_2_13_1_0_0_M9_jar.xml +13 -0
  144. itp_interface/pisa/.idea/libraries/sbt__dev_zio_izumi_reflect_thirdparty_boopickle_shaded_2_13_1_0_0_M9_jar.xml +13 -0
  145. itp_interface/pisa/.idea/libraries/sbt__dev_zio_zio_2_13_1_0_3_jar.xml +13 -0
  146. itp_interface/pisa/.idea/libraries/sbt__dev_zio_zio_stacktracer_2_13_1_0_3_jar.xml +13 -0
  147. itp_interface/pisa/.idea/libraries/sbt__dev_zio_zio_streams_2_13_1_0_3_jar.xml +13 -0
  148. itp_interface/pisa/.idea/libraries/sbt__io_grpc_grpc_api_1_34_0_jar.xml +13 -0
  149. itp_interface/pisa/.idea/libraries/sbt__io_grpc_grpc_context_1_34_0_jar.xml +13 -0
  150. itp_interface/pisa/.idea/libraries/sbt__io_grpc_grpc_core_1_34_0_jar.xml +13 -0
  151. itp_interface/pisa/.idea/libraries/sbt__io_grpc_grpc_netty_1_34_0_jar.xml +13 -0
  152. itp_interface/pisa/.idea/libraries/sbt__io_grpc_grpc_protobuf_1_34_0_jar.xml +13 -0
  153. itp_interface/pisa/.idea/libraries/sbt__io_grpc_grpc_protobuf_lite_1_34_0_jar.xml +13 -0
  154. itp_interface/pisa/.idea/libraries/sbt__io_grpc_grpc_services_1_34_0_jar.xml +13 -0
  155. itp_interface/pisa/.idea/libraries/sbt__io_grpc_grpc_stub_1_34_0_jar.xml +13 -0
  156. itp_interface/pisa/.idea/libraries/sbt__io_netty_netty_buffer_4_1_51_Final_jar.xml +13 -0
  157. itp_interface/pisa/.idea/libraries/sbt__io_netty_netty_codec_4_1_51_Final_jar.xml +13 -0
  158. itp_interface/pisa/.idea/libraries/sbt__io_netty_netty_codec_http2_4_1_51_Final_jar.xml +13 -0
  159. itp_interface/pisa/.idea/libraries/sbt__io_netty_netty_codec_http_4_1_51_Final_jar.xml +13 -0
  160. itp_interface/pisa/.idea/libraries/sbt__io_netty_netty_codec_socks_4_1_51_Final_jar.xml +13 -0
  161. itp_interface/pisa/.idea/libraries/sbt__io_netty_netty_common_4_1_51_Final_jar.xml +13 -0
  162. itp_interface/pisa/.idea/libraries/sbt__io_netty_netty_handler_4_1_51_Final_jar.xml +13 -0
  163. itp_interface/pisa/.idea/libraries/sbt__io_netty_netty_handler_proxy_4_1_51_Final_jar.xml +13 -0
  164. itp_interface/pisa/.idea/libraries/sbt__io_netty_netty_resolver_4_1_51_Final_jar.xml +13 -0
  165. itp_interface/pisa/.idea/libraries/sbt__io_netty_netty_transport_4_1_51_Final_jar.xml +13 -0
  166. itp_interface/pisa/.idea/libraries/sbt__io_perfmark_perfmark_api_0_19_0_jar.xml +13 -0
  167. itp_interface/pisa/.idea/libraries/sbt__net_java_dev_jna_jna_5_3_1_jar.xml +13 -0
  168. itp_interface/pisa/.idea/libraries/sbt__net_liftweb_lift_json_2_13_3_4_3_jar.xml +13 -0
  169. itp_interface/pisa/.idea/libraries/sbt__org_apache_commons_commons_lang3_3_11_jar.xml +13 -0
  170. itp_interface/pisa/.idea/libraries/sbt__org_apache_commons_commons_text_1_9_jar.xml +13 -0
  171. itp_interface/pisa/.idea/libraries/sbt__org_checkerframework_checker_qual_3_5_0_jar.xml +13 -0
  172. itp_interface/pisa/.idea/libraries/sbt__org_codehaus_mojo_animal_sniffer_annotations_1_18_jar.xml +13 -0
  173. itp_interface/pisa/.idea/libraries/sbt__org_jetbrains_annotations_20_1_0_jar.xml +13 -0
  174. itp_interface/pisa/.idea/libraries/sbt__org_jline_jline_3_16_0_jar.xml +13 -0
  175. itp_interface/pisa/.idea/libraries/sbt__org_log4s_log4s_2_13_1_9_0_jar.xml +13 -0
  176. itp_interface/pisa/.idea/libraries/sbt__org_scala_lang_modules_scala_collection_compat_2_13_2_1_6_jar.xml +13 -0
  177. itp_interface/pisa/.idea/libraries/sbt__org_scala_lang_modules_scala_xml_2_13_1_3_0_jar.xml +13 -0
  178. itp_interface/pisa/.idea/libraries/sbt__org_scala_lang_scala_compiler_2_13_4_jar.xml +13 -0
  179. itp_interface/pisa/.idea/libraries/sbt__org_scala_lang_scala_library_2_13_4_jar.xml +23 -0
  180. itp_interface/pisa/.idea/libraries/sbt__org_scala_lang_scala_reflect_2_13_4_jar.xml +13 -0
  181. itp_interface/pisa/.idea/libraries/sbt__org_scala_lang_scalap_2_13_4_jar.xml +13 -0
  182. itp_interface/pisa/.idea/libraries/sbt__org_scalaz_scalaz_core_2_13_7_3_2_jar.xml +13 -0
  183. itp_interface/pisa/.idea/libraries/sbt__org_slf4j_slf4j_api_1_7_30_jar.xml +13 -0
  184. itp_interface/pisa/.idea/libraries/sbt__org_slf4j_slf4j_simple_1_7_30_jar.xml +13 -0
  185. itp_interface/pisa/.idea/misc.xml +7 -0
  186. itp_interface/pisa/.idea/modules/PISA-build.iml +127 -0
  187. itp_interface/pisa/.idea/modules/PISA.iml +94 -0
  188. itp_interface/pisa/.idea/modules.xml +9 -0
  189. itp_interface/pisa/.idea/other.xml +6 -0
  190. itp_interface/pisa/.idea/sbt.xml +20 -0
  191. itp_interface/pisa/.idea/scala_compiler.xml +6 -0
  192. itp_interface/pisa/.idea/uiDesigner.xml +124 -0
  193. itp_interface/pisa/.idea/vcs.xml +6 -0
  194. itp_interface/pisa/.scalafmt.conf +2 -0
  195. itp_interface/pisa/LICENSE +29 -0
  196. itp_interface/pisa/README.md +262 -0
  197. itp_interface/pisa/build.sbt +49 -0
  198. itp_interface/pisa/build.sh +26 -0
  199. itp_interface/pisa/command_generation/close_gaps.py +44 -0
  200. itp_interface/pisa/command_generation/conjecture_normal_order.py +62 -0
  201. itp_interface/pisa/command_generation/conjecturer_command_generator.py +36 -0
  202. itp_interface/pisa/command_generation/create_dirs.py +11 -0
  203. itp_interface/pisa/command_generation/find_std.py +67 -0
  204. itp_interface/pisa/command_generation/generate_build_commands_afp.py +15 -0
  205. itp_interface/pisa/command_generation/generate_build_commands_std.py +15 -0
  206. itp_interface/pisa/command_generation/generate_commands_afp.py +103 -0
  207. itp_interface/pisa/command_generation/generate_commands_mini.py +73 -0
  208. itp_interface/pisa/command_generation/generate_commands_std.py +69 -0
  209. itp_interface/pisa/command_generation/generate_hammer_extraction_text.py +5 -0
  210. itp_interface/pisa/command_generation/hammer_command_generator.py +40 -0
  211. itp_interface/pisa/command_generation/hp_search_command_generator.py +63 -0
  212. itp_interface/pisa/command_generation/oracle_command_generator.py +56 -0
  213. itp_interface/pisa/command_generation/search_command_generator.py +69 -0
  214. itp_interface/pisa/command_generation/summarise_problem_names.py +45 -0
  215. itp_interface/pisa/command_generation/tpu_hp_search.py +75 -0
  216. itp_interface/pisa/docker/Dockerfile +34 -0
  217. itp_interface/pisa/docker/docker_tutorial.md +64 -0
  218. itp_interface/pisa/eval_setup/copy_isabelle.py +42 -0
  219. itp_interface/pisa/eval_setup/copy_pisa_jars.py +18 -0
  220. itp_interface/pisa/mesh_transformer_utils/tokenization.py +86 -0
  221. itp_interface/pisa/project/build.properties +1 -0
  222. itp_interface/pisa/project/plugins.sbt +5 -0
  223. itp_interface/pisa/requirements.txt +4 -0
  224. itp_interface/pisa/scripts/extract_last_k_steps.py +28 -0
  225. itp_interface/pisa/scripts/extract_proof_corpus.py +26 -0
  226. itp_interface/pisa/scripts/gather_hammer_results.py +27 -0
  227. itp_interface/pisa/scripts/length_in_char_stats.py +20 -0
  228. itp_interface/pisa/scripts/mix.py +127 -0
  229. itp_interface/pisa/scripts/results_stat.py +52 -0
  230. itp_interface/pisa/scripts/test_array_job.sh +34 -0
  231. itp_interface/pisa/setup.sh +25 -0
  232. itp_interface/pisa/src/main/protobuf/server.proto +60 -0
  233. itp_interface/pisa/src/main/python/.idea/.gitignore +8 -0
  234. itp_interface/pisa/src/main/python/.idea/inspectionProfiles/Project_Default.xml +18 -0
  235. itp_interface/pisa/src/main/python/.idea/inspectionProfiles/profiles_settings.xml +6 -0
  236. itp_interface/pisa/src/main/python/.idea/misc.xml +4 -0
  237. itp_interface/pisa/src/main/python/.idea/modules.xml +8 -0
  238. itp_interface/pisa/src/main/python/.idea/python.iml +12 -0
  239. itp_interface/pisa/src/main/python/.idea/vcs.xml +6 -0
  240. itp_interface/pisa/src/main/python/conjecturing_parsing/conjecturer_postprocessing.py +59 -0
  241. itp_interface/pisa/src/main/python/data_extraction/extract_data.py +184 -0
  242. itp_interface/pisa/src/main/python/data_extraction/find_premises.py +221 -0
  243. itp_interface/pisa/src/main/python/data_extraction/process_data.py +129 -0
  244. itp_interface/pisa/src/main/python/legacy/PisaFlexibleClient.py +167 -0
  245. itp_interface/pisa/src/main/python/legacy/autof_test.py +74 -0
  246. itp_interface/pisa/src/main/python/legacy/cmd_client.py +23 -0
  247. itp_interface/pisa/src/main/python/legacy/convert_scala_dump_to_test_name_jsons.py +14 -0
  248. itp_interface/pisa/src/main/python/legacy/create_data_txt.py +72 -0
  249. itp_interface/pisa/src/main/python/legacy/create_finetune_tfrecords.py +311 -0
  250. itp_interface/pisa/src/main/python/legacy/demo.py +49 -0
  251. itp_interface/pisa/src/main/python/legacy/evaluate.py +108 -0
  252. itp_interface/pisa/src/main/python/legacy/extract_first_step.py +25 -0
  253. itp_interface/pisa/src/main/python/legacy/get_global_facts.py +35 -0
  254. itp_interface/pisa/src/main/python/legacy/mix_data.py +19 -0
  255. itp_interface/pisa/src/main/python/legacy/one_stage_extraction.py +111 -0
  256. itp_interface/pisa/src/main/python/legacy/prepare_episodic_transitions.py +137 -0
  257. itp_interface/pisa/src/main/python/legacy/prepare_translation_pairs.py +277 -0
  258. itp_interface/pisa/src/main/python/pisa_client.py +322 -0
  259. itp_interface/pisa/src/main/python/server_pb2.py +394 -0
  260. itp_interface/pisa/src/main/python/server_pb2_grpc.py +230 -0
  261. itp_interface/pisa/src/main/python/test_client.py +17 -0
  262. itp_interface/pisa/src/main/python/test_client2.py +79 -0
  263. itp_interface/pisa/src/main/python/utils/filters.py +59 -0
  264. itp_interface/pisa/src/main/python/utils/pisa_server_control.py +29 -0
  265. itp_interface/pisa/src/main/scala/pisa/agent/CheckSyntax.scala +257 -0
  266. itp_interface/pisa/src/main/scala/pisa/agent/DepThms.scala +29 -0
  267. itp_interface/pisa/src/main/scala/pisa/agent/PisaStat.scala +46 -0
  268. itp_interface/pisa/src/main/scala/pisa/agent/RefactorTest.scala +40 -0
  269. itp_interface/pisa/src/main/scala/pisa/agent/RepHammer.scala +95 -0
  270. itp_interface/pisa/src/main/scala/pisa/server/HammFacts.scala +63 -0
  271. itp_interface/pisa/src/main/scala/pisa/server/PisaOS.scala +881 -0
  272. itp_interface/pisa/src/main/scala/pisa/server/PisaOneStage.scala +540 -0
  273. itp_interface/pisa/src/main/scala/pisa/server/PisaOneStageServers.scala +1048 -0
  274. itp_interface/pisa/src/main/scala/pisa/utils/TheoryManager.scala +95 -0
  275. itp_interface/pisa/src/test/python/analyse_debug.py +33 -0
  276. itp_interface/pisa/src/test/python/extract_test_seq2seq.py +53 -0
  277. itp_interface/pisa/src/test/python/extract_test_theorem_ground_truth_indices.py +31 -0
  278. itp_interface/pisa/src/test/python/proof_originality.py +24 -0
  279. itp_interface/pisa/src/test/python/test_command_generator.py +25 -0
  280. itp_interface/pisa/src/test/python/test_model_sequence_accuracy.py +70 -0
  281. itp_interface/pisa/src/test/scala/pisa/Easy.scala +26 -0
  282. itp_interface/pisa/src/test/scala/pisa/TestCurl.scala +82 -0
  283. itp_interface/pisa/src/test/scala/pisa/TestIsa.scala +27 -0
  284. itp_interface/pisa/test.sh +19 -0
  285. itp_interface/pisa/universal_test_theorems.tar.gz +0 -0
  286. itp_interface/repo/build.py +78 -0
  287. itp_interface/repo/clone.py +79 -0
  288. itp_interface/repo/dataset_discovery.py +99 -0
  289. itp_interface/retrieval/__init__.py +0 -0
  290. itp_interface/retrieval/abstraction.py +35 -0
  291. itp_interface/retrieval/coq_bm25_reranker.py +153 -0
  292. itp_interface/retrieval/isabelle_bm25_reranker.py +86 -0
  293. itp_interface/retrieval/lean3_bm25_reranker.py +86 -0
  294. itp_interface/rl/__init__.py +0 -0
  295. itp_interface/rl/abstraction.py +168 -0
  296. itp_interface/rl/proof_action.py +172 -0
  297. itp_interface/rl/proof_state.py +149 -0
  298. itp_interface/rl/proof_tree.py +109 -0
  299. itp_interface/rl/simpl_proof_env_pool.py +16 -0
  300. itp_interface/rl/simple_proof_env.py +713 -0
  301. itp_interface/rl/simple_proof_env_pool.py +591 -0
  302. itp_interface/scripts/setup.sh +228 -0
  303. itp_interface/tools/__init__.py +0 -0
  304. itp_interface/tools/basic_utils.py +172 -0
  305. itp_interface/tools/bin_packing.py +61 -0
  306. itp_interface/tools/cache.py +93 -0
  307. itp_interface/tools/coq_build_spec.py +31 -0
  308. itp_interface/tools/coq_build_tool.py +319 -0
  309. itp_interface/tools/coq_context_helper.py +354 -0
  310. itp_interface/tools/coq_executor.py +508 -0
  311. itp_interface/tools/coq_local_data_generation_transform.py +158 -0
  312. itp_interface/tools/coq_parse_utils.py +154 -0
  313. itp_interface/tools/coq_raw_proofs.py +193 -0
  314. itp_interface/tools/coq_theorem_proof_pair_generation_transform.py +146 -0
  315. itp_interface/tools/coq_training_data_generator.py +76 -0
  316. itp_interface/tools/dynamic_coq_proof_exec.py +220 -0
  317. itp_interface/tools/dynamic_isabelle_proof_exec.py +229 -0
  318. itp_interface/tools/dynamic_lean4_proof_exec.py +236 -0
  319. itp_interface/tools/dynamic_lean_proof_exec.py +228 -0
  320. itp_interface/tools/isabelle_context_helper.py +66 -0
  321. itp_interface/tools/isabelle_executor.py +862 -0
  322. itp_interface/tools/isabelle_local_data_generation_transform.py +149 -0
  323. itp_interface/tools/isabelle_parse_utils.py +131 -0
  324. itp_interface/tools/isabelle_server.py +106 -0
  325. itp_interface/tools/lean4_context_helper.py +72 -0
  326. itp_interface/tools/lean4_local_data_generation_transform.py +122 -0
  327. itp_interface/tools/lean4_sync_executor.py +1193 -0
  328. itp_interface/tools/lean_cmd_executor.py +804 -0
  329. itp_interface/tools/lean_context_helper.py +327 -0
  330. itp_interface/tools/lean_dojo_data_generation_transform.py +206 -0
  331. itp_interface/tools/lean_executor.py +687 -0
  332. itp_interface/tools/lean_local_data_generation_transform.py +136 -0
  333. itp_interface/tools/lean_parse_utils.py +32 -0
  334. itp_interface/tools/log_utils.py +20 -0
  335. itp_interface/tools/proof_exec_callback.py +76 -0
  336. itp_interface/tools/ray_utils.py +265 -0
  337. itp_interface/tools/repl/.git +1 -0
  338. itp_interface/tools/repl/.github/workflows/ci.yml +24 -0
  339. itp_interface/tools/repl/.gitignore +7 -0
  340. itp_interface/tools/repl/.vscode/copyright.code-snippets +13 -0
  341. itp_interface/tools/repl/.vscode/extensions.json +13 -0
  342. itp_interface/tools/repl/.vscode/module-docstring.code-snippets +35 -0
  343. itp_interface/tools/repl/.vscode/settings.json +11 -0
  344. itp_interface/tools/repl/README.md +174 -0
  345. itp_interface/tools/repl/REPL/Frontend.lean +47 -0
  346. itp_interface/tools/repl/REPL/JSON.lean +186 -0
  347. itp_interface/tools/repl/REPL/Lean/ContextInfo.lean +9 -0
  348. itp_interface/tools/repl/REPL/Lean/Environment.lean +31 -0
  349. itp_interface/tools/repl/REPL/Lean/InfoTree/ToJson.lean +114 -0
  350. itp_interface/tools/repl/REPL/Lean/InfoTree.lean +272 -0
  351. itp_interface/tools/repl/REPL/Main.lean +323 -0
  352. itp_interface/tools/repl/REPL/Snapshots.lean +306 -0
  353. itp_interface/tools/repl/REPL/Util/Path.lean +36 -0
  354. itp_interface/tools/repl/REPL/Util/Pickle.lean +44 -0
  355. itp_interface/tools/repl/REPL.lean +4 -0
  356. itp_interface/tools/repl/lake-manifest.json +5 -0
  357. itp_interface/tools/repl/lakefile.lean +15 -0
  358. itp_interface/tools/repl/lean-toolchain +1 -0
  359. itp_interface/tools/repl/test/Mathlib/.gitignore +5 -0
  360. itp_interface/tools/repl/test/Mathlib/H20231110.sh +2 -0
  361. itp_interface/tools/repl/test/Mathlib/ReplMathlibTests.lean +1 -0
  362. itp_interface/tools/repl/test/Mathlib/lake-manifest.json +68 -0
  363. itp_interface/tools/repl/test/Mathlib/lakefile.lean +11 -0
  364. itp_interface/tools/repl/test/Mathlib/lean-toolchain +1 -0
  365. itp_interface/tools/repl/test/Mathlib/test/20240209.expected.out +20 -0
  366. itp_interface/tools/repl/test/Mathlib/test/20240209.in +3 -0
  367. itp_interface/tools/repl/test/Mathlib/test/20240209.lean +4 -0
  368. itp_interface/tools/repl/test/Mathlib/test/H20231020.expected.out +8 -0
  369. itp_interface/tools/repl/test/Mathlib/test/H20231020.in +8 -0
  370. itp_interface/tools/repl/test/Mathlib/test/H20231020.lean +22 -0
  371. itp_interface/tools/repl/test/Mathlib/test/H20231110.expected.out +4 -0
  372. itp_interface/tools/repl/test/Mathlib/test/H20231110.in +4 -0
  373. itp_interface/tools/repl/test/Mathlib/test/H20231115.expected.out +19 -0
  374. itp_interface/tools/repl/test/Mathlib/test/H20231115.in +5 -0
  375. itp_interface/tools/repl/test/Mathlib/test/H20231115_2.expected.out +18 -0
  376. itp_interface/tools/repl/test/Mathlib/test/H20231115_2.in +4 -0
  377. itp_interface/tools/repl/test/Mathlib/test/H20231115_3.expected.out +10 -0
  378. itp_interface/tools/repl/test/Mathlib/test/H20231115_3.in +4 -0
  379. itp_interface/tools/repl/test/Mathlib/test/H20231214.in +9 -0
  380. itp_interface/tools/repl/test/Mathlib/test/H20231214.lean +30 -0
  381. itp_interface/tools/repl/test/Mathlib/test/H20231215.expected.out +4 -0
  382. itp_interface/tools/repl/test/Mathlib/test/H20231215.in +4 -0
  383. itp_interface/tools/repl/test/Mathlib/test/H20231215_2.expected.out +14 -0
  384. itp_interface/tools/repl/test/Mathlib/test/H20231215_2.in +3 -0
  385. itp_interface/tools/repl/test/Mathlib/test/exact.expected.out +37 -0
  386. itp_interface/tools/repl/test/Mathlib/test/exact.in +10 -0
  387. itp_interface/tools/repl/test/Mathlib/test/import_Mathlib.lean +1 -0
  388. itp_interface/tools/repl/test/Mathlib/test/induction.expected.out +29 -0
  389. itp_interface/tools/repl/test/Mathlib/test/induction.in +10 -0
  390. itp_interface/tools/repl/test/Mathlib/test/induction.lean +6 -0
  391. itp_interface/tools/repl/test/Mathlib/test/on_goal.expected.out +22 -0
  392. itp_interface/tools/repl/test/Mathlib/test/on_goal.in +5 -0
  393. itp_interface/tools/repl/test/Mathlib/test/pickle.expected.out +16 -0
  394. itp_interface/tools/repl/test/Mathlib/test/pickle.in +6 -0
  395. itp_interface/tools/repl/test/Mathlib/test/pickle_2.expected.out +4 -0
  396. itp_interface/tools/repl/test/Mathlib/test/pickle_2.in +4 -0
  397. itp_interface/tools/repl/test/Mathlib/test.sh +41 -0
  398. itp_interface/tools/repl/test/all_tactics.expected.out +13 -0
  399. itp_interface/tools/repl/test/all_tactics.in +1 -0
  400. itp_interface/tools/repl/test/by_cases.expected.out +25 -0
  401. itp_interface/tools/repl/test/by_cases.in +8 -0
  402. itp_interface/tools/repl/test/by_cases.lean +4 -0
  403. itp_interface/tools/repl/test/calc.expected.out +32 -0
  404. itp_interface/tools/repl/test/calc.in +1 -0
  405. itp_interface/tools/repl/test/def_eval.expected.out +9 -0
  406. itp_interface/tools/repl/test/def_eval.in +3 -0
  407. itp_interface/tools/repl/test/enableInitializersExecution.expected.out +2 -0
  408. itp_interface/tools/repl/test/enableInitializersExecution.in +1 -0
  409. itp_interface/tools/repl/test/file.expected.out +8 -0
  410. itp_interface/tools/repl/test/file.in +1 -0
  411. itp_interface/tools/repl/test/file.lean +5 -0
  412. itp_interface/tools/repl/test/have_by_sorry.expected.out +28 -0
  413. itp_interface/tools/repl/test/have_by_sorry.in +6 -0
  414. itp_interface/tools/repl/test/import_lean.in +1 -0
  415. itp_interface/tools/repl/test/incomplete.expected.out +18 -0
  416. itp_interface/tools/repl/test/incomplete.in +3 -0
  417. itp_interface/tools/repl/test/incomplete.lean +0 -0
  418. itp_interface/tools/repl/test/infotree.expected.out +20 -0
  419. itp_interface/tools/repl/test/infotree.in +2 -0
  420. itp_interface/tools/repl/test/invalid_tactic.expected.out +20 -0
  421. itp_interface/tools/repl/test/invalid_tactic.in +3 -0
  422. itp_interface/tools/repl/test/name_generator.expected.out +53 -0
  423. itp_interface/tools/repl/test/name_generator.in +18 -0
  424. itp_interface/tools/repl/test/no_goal_sorry.expected.out +11 -0
  425. itp_interface/tools/repl/test/no_goal_sorry.in +1 -0
  426. itp_interface/tools/repl/test/no_goal_sorry_2.expected.out +12 -0
  427. itp_interface/tools/repl/test/no_goal_sorry_2.in +1 -0
  428. itp_interface/tools/repl/test/options.expected.out +17 -0
  429. itp_interface/tools/repl/test/options.in +6 -0
  430. itp_interface/tools/repl/test/pickle_environment.expected.out +8 -0
  431. itp_interface/tools/repl/test/pickle_environment.in +7 -0
  432. itp_interface/tools/repl/test/pickle_environment_with_imports.expected.out +10 -0
  433. itp_interface/tools/repl/test/pickle_environment_with_imports.in +9 -0
  434. itp_interface/tools/repl/test/pickle_open.expected.out +8 -0
  435. itp_interface/tools/repl/test/pickle_open.in +7 -0
  436. itp_interface/tools/repl/test/pickle_open_2.expected.out +4 -0
  437. itp_interface/tools/repl/test/pickle_open_2.in +3 -0
  438. itp_interface/tools/repl/test/pickle_open_scoped.expected.out +18 -0
  439. itp_interface/tools/repl/test/pickle_open_scoped.in +8 -0
  440. itp_interface/tools/repl/test/pickle_open_scoped_2.expected.out +14 -0
  441. itp_interface/tools/repl/test/pickle_open_scoped_2.in +3 -0
  442. itp_interface/tools/repl/test/pickle_proof_state_1.expected.out +26 -0
  443. itp_interface/tools/repl/test/pickle_proof_state_1.in +15 -0
  444. itp_interface/tools/repl/test/pickle_proof_state_2.expected.out +4 -0
  445. itp_interface/tools/repl/test/pickle_proof_state_2.in +3 -0
  446. itp_interface/tools/repl/test/pickle_proof_state_env.expected.out +26 -0
  447. itp_interface/tools/repl/test/pickle_proof_state_env.in +15 -0
  448. itp_interface/tools/repl/test/pickle_scoped_notation.in +16 -0
  449. itp_interface/tools/repl/test/pickle_scoped_notation_2.in +3 -0
  450. itp_interface/tools/repl/test/proof_step.expected.out +18 -0
  451. itp_interface/tools/repl/test/proof_step.in +7 -0
  452. itp_interface/tools/repl/test/readme.expected.out +16 -0
  453. itp_interface/tools/repl/test/readme.in +5 -0
  454. itp_interface/tools/repl/test/sorry_hypotheses.expected.out +16 -0
  455. itp_interface/tools/repl/test/sorry_hypotheses.in +4 -0
  456. itp_interface/tools/repl/test/synthesize_placeholder.expected.out +7 -0
  457. itp_interface/tools/repl/test/synthesize_placeholder.in +1 -0
  458. itp_interface/tools/repl/test/tactic_mode_sorry.expected.out +14 -0
  459. itp_interface/tools/repl/test/tactic_mode_sorry.in +3 -0
  460. itp_interface/tools/repl/test/tactic_sorry.expected.out +12 -0
  461. itp_interface/tools/repl/test/tactic_sorry.in +1 -0
  462. itp_interface/tools/repl/test/term_sorry.expected.out +12 -0
  463. itp_interface/tools/repl/test/term_sorry.in +1 -0
  464. itp_interface/tools/repl/test/trace_simp.expected.out +41 -0
  465. itp_interface/tools/repl/test/trace_simp.in +15 -0
  466. itp_interface/tools/repl/test/unfinished_tactic_block.expected.out +11 -0
  467. itp_interface/tools/repl/test/unfinished_tactic_block.in +1 -0
  468. itp_interface/tools/repl/test/unknown_environment.expected.out +2 -0
  469. itp_interface/tools/repl/test/unknown_environment.in +1 -0
  470. itp_interface/tools/repl/test/unknown_proof_state.expected.out +14 -0
  471. itp_interface/tools/repl/test/unknown_proof_state.in +3 -0
  472. itp_interface/tools/repl/test/unknown_tactic.expected.out +14 -0
  473. itp_interface/tools/repl/test/unknown_tactic.in +3 -0
  474. itp_interface/tools/repl/test/variables.expected.out +26 -0
  475. itp_interface/tools/repl/test/variables.in +5 -0
  476. itp_interface/tools/repl/test.sh +43 -0
  477. itp_interface/tools/run_data_generation_transforms.py +350 -0
  478. itp_interface/tools/theorem_details.py +25 -0
  479. itp_interface/tools/training_data.py +358 -0
  480. itp_interface/tools/training_data_format.py +599 -0
  481. itp_interface-1.0.0.dist-info/METADATA +78 -0
  482. itp_interface-1.0.0.dist-info/RECORD +485 -0
  483. itp_interface-1.0.0.dist-info/WHEEL +4 -0
  484. itp_interface-1.0.0.dist-info/entry_points.txt +3 -0
  485. itp_interface-1.0.0.dist-info/licenses/LICENSE +21 -0
File without changes
File without changes
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env python3
2
+
3
+ import sys
4
+ root_dir = f"{__file__.split('itp_interface')[0]}"
5
+ if root_dir not in sys.path:
6
+ sys.path.append(root_dir)
7
+ import logging
8
+ import typing
9
+ from itp_interface.rl.proof_action import ProofAction
10
+ from itp_interface.rl.abstraction import Agent, Policy
11
+ from itp_interface.rl.simple_proof_env import ProofEnv
12
+
13
+
14
+ class ProofAgent(Agent):
15
+ def __init__(self,
16
+ name: str,
17
+ policy: Policy,
18
+ should_checkpoint: bool = False,
19
+ proof_dump_file_name: str = None,
20
+ logger: logging.Logger = None):
21
+ self._policy = policy
22
+ self._name = name
23
+ self._should_checkpoint = should_checkpoint
24
+ self._proof_dump_file_name = proof_dump_file_name
25
+ self.logger = logger or logging.getLogger(__name__)
26
+ pass
27
+
28
+ @property
29
+ def name(self) -> str:
30
+ return self._name
31
+
32
+ def checkpoint(self):
33
+ pass
34
+
35
+ def clone(self):
36
+ pass
37
+
38
+ def run_episode(self, env: ProofEnv, max_steps_per_episode: int, render: bool):
39
+ def _stop_policy(steps: int, info: typing.Dict[str, typing.Any]):
40
+ return steps >= max_steps_per_episode
41
+ def _policy_info_message(steps: int, info: typing.Dict[str, typing.Any]):
42
+ return f"Step {steps}/{max_steps_per_episode}"
43
+ self._run_episode_as_per_policy(env, _stop_policy, _policy_info_message, render)
44
+
45
+ def run(self, env: ProofEnv, episodes: int, max_steps_per_episode: int, render: bool):
46
+ assert isinstance(env, ProofEnv)
47
+ while episodes > 0:
48
+ self.run_episode(env, max_steps_per_episode, render)
49
+ episodes -= 1
50
+ pass
51
+
52
+ def run_episodes_till_stop(self, env: ProofEnv, episodes: int, render: bool,
53
+ stop_policy: typing.Callable[[int, typing.Dict[str, typing.Any]], bool],
54
+ policy_info_message: typing.Callable[[int, typing.Dict[str, typing.Any]], str]):
55
+ assert isinstance(env, ProofEnv)
56
+ while episodes > 0:
57
+ self._run_episode_as_per_policy(env, stop_policy, policy_info_message, render)
58
+ episodes -= 1
59
+
60
+ def _run_episode_as_per_policy(self,
61
+ env: ProofEnv,
62
+ stop_policy: typing.Callable[[int, typing.Dict[str, typing.Any]], bool],
63
+ policy_info_message: typing.Callable[[int, typing.Dict[str, typing.Any]], str],
64
+ render: bool):
65
+ env.reset()
66
+ done = False
67
+ steps = 0
68
+ total_reward = 0
69
+ next_state = env.state
70
+ additional_info = self._policy.get_efficiency_info()
71
+ while not done and not stop_policy(steps, additional_info):
72
+ self.logger.info(policy_info_message(steps, additional_info))
73
+ self.logger.info("Asking policy for next action")
74
+ action = self._policy(next_state)
75
+ assert isinstance(action, ProofAction)
76
+ self.logger.info(f"Got Action: {action}")
77
+ if action.action_type != ProofAction.ActionType.EXIT:
78
+ state, _, next_state, reward, done, info = env.step(action)
79
+ if render:
80
+ self.logger.info("**"*20)
81
+ env.render()
82
+ self.logger.info("**"*20)
83
+ if action.action_type != ProofAction.ActionType.BACKTRACK:
84
+ # Don't update policy for backtracking actions, this will create a
85
+ # a very nasty loop in the policy.
86
+ self.logger.info("Updating policy")
87
+ self._policy.update(state, action, next_state, reward, done, info)
88
+ self.logger.info("Policy updated")
89
+ steps += 1
90
+ total_reward += reward
91
+ else:
92
+ self.logger.warning("Got EXIT action, exiting")
93
+ break
94
+ additional_info = self._policy.get_efficiency_info()
95
+ env.dump_proof(self._proof_dump_file_name, additional_info)
96
+ if self._should_checkpoint:
97
+ self.logger.info("Checkpointing policy")
98
+ self._policy.checkpoint()
99
+
100
+
@@ -0,0 +1,165 @@
1
+ #!/usr/bin/env python3
2
+ ##########################################################################
3
+ #
4
+ # This file is part of Proverbot9001.
5
+ #
6
+ # Proverbot9001 is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Proverbot9001 is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Proverbot9001. If not, see <https://www.gnu.org/licenses/>.
18
+ #
19
+ # Copyright 2019 Alex Sanchez-Stern and Yousef Alhessi
20
+ #
21
+ ##########################################################################
22
+
23
+ import contextlib
24
+ import subprocess
25
+ import re
26
+
27
+ from typing import Iterator, List, Optional
28
+
29
+ from .util import eprint, parseSexpOneLevel
30
+ from .contexts import (ScrapedTactic, TacticContext, Obligation,
31
+ ProofContext, SexpObligation)
32
+ from .lsp_backend import main as lsp_main
33
+ from .lsp_backend import CoqLSPyInstance
34
+ from .serapi_backend import CoqSeraPyInstance
35
+ from .coq_util import (kill_comments, preprocess_command, get_stem,
36
+ split_tactic, parse_hyps, kill_nested,
37
+ get_var_term_in_hyp, get_hyp_type,
38
+ get_vars_in_hyps, get_indexed_vars_in_hyps,
39
+ get_indexed_vars_dict, get_first_var_in_hyp,
40
+ tacticTakesHypArgs, tacticTakesBinderArgs,
41
+ tacticTakesIdentifierArg,
42
+ lemma_name_from_statement, get_words,
43
+ get_binder_var, normalizeNumericArgs,
44
+ parsePPSubgoal, summarizeContext, summarizeObligation,
45
+ isValidCommand, load_commands_preserve,
46
+ load_commands, read_commands,
47
+ get_module_from_filename, symbol_matches,
48
+ subgoalSurjective, contextSurjective,
49
+ lemmas_in_file, let_to_hyp, admit_proof_cmds,
50
+ set_switch, setup_opam_env,
51
+ module_prefix_from_stack, sm_prefix_from_stack,
52
+ possibly_starting_proof, ending_proof,
53
+ initial_sm_stack, update_sm_stack,
54
+ lemmas_defined_by_stmt)
55
+ from .coq_agent import TacticHistory, CoqAgent
56
+ from .coq_backend import (CoqBackend, CoqExn, BadResponse, AckError,
57
+ CompletedError, CoqTimeoutError,
58
+ UnrecognizedError, CoqAnomaly, CoqException,
59
+ ParseError, NoSuchGoalError, LexError, CoqOverflowError)
60
+
61
+ def set_parseSexpOneLevel_fn(newfn) -> None:
62
+ global parseSexpOneLevel
63
+ parseSexpOneLevel = newfn
64
+
65
+ def GetCoqAgent(prelude: str = ".", verbosity: int = 0, set_env: bool = True, use_human_readable_str: bool = False, env_string: str = None, timeout = 60) -> CoqAgent:
66
+ if set_env:
67
+ setup_opam_env(env_string)
68
+ version_string = subprocess.run(["coqc", "--version"], stdout=subprocess.PIPE,
69
+ text=True, check=True).stdout
70
+ version_match = re.fullmatch(r"(?:The Coq Proof Assistant, version)? \d+\.(\d+).*", version_string,
71
+ flags=re.DOTALL)
72
+ assert version_match, version_string
73
+ minor_version = int(version_match.group(1))
74
+ assert minor_version >= 10, \
75
+ "Versions of Coq before 8.10 are not supported! "\
76
+ f"Currently installed coq is {version_string}"
77
+
78
+ backend: CoqBackend
79
+ try:
80
+ if minor_version < 16:
81
+ backend = CoqSeraPyInstance(["sertop", "--implicit"],
82
+ timeout=timeout,
83
+ set_env=set_env)
84
+ backend.verbosity = verbosity
85
+ else:
86
+ backend = CoqLSPyInstance("coq-lsp", root_dir=prelude, set_env=set_env, timeout=timeout)
87
+ agent = CoqAgent(backend, prelude, verbosity=verbosity, use_human_readable=use_human_readable_str)
88
+ except CoqAnomaly:
89
+ eprint("Anomaly during initialization! Something has gone horribly wrong.")
90
+ raise
91
+ return agent
92
+
93
+ @contextlib.contextmanager
94
+ def CoqContext(prelude: str = ".", verbosity: int = 0, set_env: bool = True) \
95
+ -> Iterator[CoqAgent]:
96
+ if set_env:
97
+ setup_opam_env()
98
+ version_string = subprocess.run(["coqc", "--version"], stdout=subprocess.PIPE,
99
+ text=True, check=True).stdout
100
+ version_match = re.fullmatch(r"(?:The Coq Proof Assistant, version)? \d+\.(\d+).*", version_string,
101
+ flags=re.DOTALL)
102
+ assert version_match, version_string
103
+ minor_version = int(version_match.group(1))
104
+ assert minor_version >= 10, \
105
+ "Versions of Coq before 8.10 are not supported! "\
106
+ f"Currently installed coq is {version_string}"
107
+
108
+ backend: CoqBackend
109
+ try:
110
+ if minor_version < 16:
111
+ backend = CoqSeraPyInstance(["sertop", "--implicit"],
112
+ set_env=set_env)
113
+ backend.verbosity = verbosity
114
+ else:
115
+ backend = CoqLSPyInstance("coq-lsp", root_dir=prelude, set_env=set_env)
116
+ agent = CoqAgent(backend, prelude, verbosity=verbosity)
117
+ except CoqAnomaly:
118
+ eprint("Anomaly during initialization! Something has gone horribly wrong.")
119
+ raise
120
+
121
+ try:
122
+ yield agent
123
+ finally:
124
+ agent.backend.close()
125
+
126
+ # Backwards Compatibility (to some extent)
127
+ def SerapiInstance(coq_command: List[str], module_name: Optional[str],
128
+ prelude: str, set_env: bool = True,
129
+ timeout: int = 30, use_hammer: bool = False,
130
+ log_outgoing_messages: Optional[str] = None,
131
+ use_human_readable_str : bool = False) -> CoqAgent:
132
+ del timeout
133
+ del use_hammer
134
+ del log_outgoing_messages
135
+ backend = CoqSeraPyInstance(coq_command, set_env=set_env)
136
+ agent = CoqAgent(backend, prelude, use_human_readable=use_human_readable_str)
137
+ if module_name and module_name not in ["Parameter", "Prop", "Type"]:
138
+ agent.run_stmt(f"Module {module_name}.")
139
+ return agent
140
+ @contextlib.contextmanager
141
+ def SerapiContext(coq_commands: List[str], module_name: Optional[str],
142
+ prelude: str, set_env: bool = True, use_hammer: bool = False,
143
+ log_outgoing_messages: Optional[str] = None) \
144
+ -> Iterator[CoqAgent]:
145
+ del use_hammer
146
+ del log_outgoing_messages
147
+ try:
148
+ backend = CoqSeraPyInstance(coq_commands, set_env=set_env)
149
+ agent = CoqAgent(backend, prelude)
150
+ if module_name and module_name not in ["Parameter", "Prop", "Type"]:
151
+ agent.run_stmt(f"Module {module_name}.")
152
+ except CoqAnomaly:
153
+ eprint("Anomaly during initialization! Something has gone horribly wrong.")
154
+ raise
155
+ try:
156
+ yield agent
157
+ finally:
158
+ agent.backend.close()
159
+ SerapiException = CoqException
160
+ def admit_proof(coq: CoqAgent, lemma_statement: str,
161
+ ending_statement: str) -> List[str]:
162
+ admit_cmds = admit_proof_cmds(lemma_statement, ending_statement)
163
+ for cmd in admit_cmds:
164
+ coq.run_stmt(cmd)
165
+ return admit_cmds
@@ -0,0 +1,283 @@
1
+ #!/usr/bin/env python3.7
2
+ ##########################################################################
3
+ #
4
+ # This file is part of Proverbot9001.
5
+ #
6
+ # Proverbot9001 is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Proverbot9001 is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with Proverbot9001. If not, see <https://www.gnu.org/licenses/>.
18
+ #
19
+ # Copyright 2019 Alex Sanchez-Stern and Yousef Alhessi
20
+ #
21
+ ##########################################################################
22
+
23
+ import json
24
+ import hashlib
25
+ from typing import (List, TextIO, Optional, NamedTuple, Union, Dict,
26
+ Any, Type, TYPE_CHECKING, Sequence)
27
+
28
+ if TYPE_CHECKING:
29
+ from sexpdata import Sexp
30
+
31
+ class SexpObligation(NamedTuple):
32
+ hypotheses: List['Sexp']
33
+ goal: 'Sexp'
34
+
35
+ class Obligation:
36
+ hypotheses: Sequence[str]
37
+ goal: str
38
+
39
+ def __init__(self, hypotheses: Sequence[str], goal: str) -> None:
40
+ self.hypotheses = tuple(hypotheses)
41
+ self.goal = goal
42
+
43
+ def __eq__(self, other: object) -> bool:
44
+ if not isinstance(other, Obligation):
45
+ return False
46
+ if self.goal != other.goal:
47
+ return False
48
+ if self.hypotheses != other.hypotheses:
49
+ return False
50
+ return True
51
+
52
+ def __hash__(self) -> int:
53
+ return int.from_bytes(hashlib.md5(json.dumps(
54
+ (self.hypotheses, self.goal),
55
+ sort_keys=True).encode('utf-8')).digest(), byteorder='big')
56
+
57
+ @classmethod
58
+ def from_dict(cls, data):
59
+ return cls(**data)
60
+
61
+ def to_dict(self) -> Dict[str, Any]:
62
+ return {"hypotheses": list(self.hypotheses),
63
+ "goal": self.goal}
64
+
65
+ @classmethod
66
+ def from_structeq(cls, obj: Any) -> 'Obligation':
67
+ return Obligation(tuple(obj.hypotheses), obj.goal)
68
+
69
+ def __str__(self) -> str:
70
+ return f"Obligation(goal={self.goal}, hypotheses={self.hypotheses})"
71
+
72
+
73
+ class ProofContext(NamedTuple):
74
+ fg_goals: List[Obligation]
75
+ bg_goals: List[Obligation]
76
+ shelved_goals: List[Obligation]
77
+ given_up_goals: List[Obligation]
78
+
79
+ @classmethod
80
+ def empty(cls: Type['ProofContext']):
81
+ return ProofContext([], [], [], [])
82
+
83
+ @classmethod
84
+ def from_dict(cls, data):
85
+ fg_goals = list(map(Obligation.from_dict, data["fg_goals"]))
86
+ bg_goals = list(map(Obligation.from_dict, data["bg_goals"]))
87
+ shelved_goals = list(map(Obligation.from_dict, data["shelved_goals"]))
88
+ given_up_goals = list(map(Obligation.from_dict,
89
+ data["given_up_goals"]))
90
+ return cls(fg_goals, bg_goals, shelved_goals, given_up_goals)
91
+
92
+ def to_dict(self) -> Dict[str, Any]:
93
+ return {"fg_goals": list(map(Obligation.to_dict, self.fg_goals)),
94
+ "bg_goals": list(map(Obligation.to_dict, self.bg_goals)),
95
+ "shelved_goals": list(map(Obligation.to_dict,
96
+ self.shelved_goals)),
97
+ "given_up_goals": list(map(Obligation.to_dict,
98
+ self.given_up_goals))}
99
+
100
+ @property
101
+ def all_goals(self) -> List[Obligation]:
102
+ return self.fg_goals + self.bg_goals + \
103
+ self.shelved_goals + self.given_up_goals
104
+
105
+ @property
106
+ def focused_goal(self) -> str:
107
+ if self.fg_goals:
108
+ return self.fg_goals[0].goal
109
+ else:
110
+ return ""
111
+
112
+ @property
113
+ def focused_hyps(self) -> List[str]:
114
+ if self.fg_goals:
115
+ return list(self.fg_goals[0].hypotheses)
116
+ else:
117
+ return []
118
+
119
+ @classmethod
120
+ def from_structeq(cls, obj: Any) -> 'ProofContext':
121
+ return ProofContext([Obligation.from_structeq(fg) for fg in obj.fg_goals],
122
+ [Obligation.from_structeq(bg) for bg in obj.bg_goals],
123
+ [Obligation.from_structeq(sg) for sg in obj.shelved_goals],
124
+ [Obligation.from_structeq(gg) for gg in obj.given_up_goals])
125
+
126
+ def __str__(self) -> str:
127
+ return f"ProofContext(fg_goals={self.fg_goals}, bg_goals={self.bg_goals}, "\
128
+ f"shelved_goals={self.shelved_goals}, given_up_goals={self.given_up_goals})"
129
+
130
+
131
+ def assert_proof_context_matches(context1: ProofContext, context2: ProofContext) -> None:
132
+ def assert_obligation_matches(label: str, obl1: Obligation, obl2: Obligation) -> None:
133
+ assert obl1.goal == obl2.goal, f"{label}: Goals {obl1.goal} and {obl2.goal} don't match"
134
+ for idx, (hyp1, hyp2) in enumerate(zip(obl1.hypotheses, obl2.hypotheses)):
135
+ assert hyp1 == hyp2, f"{label}: Hypotheses at index {idx} don't match! "\
136
+ f"{hyp1} vs {hyp2}"
137
+ assert len(context1.fg_goals) == len(context2.fg_goals), \
138
+ "Number of foreground goals doesn't match! "\
139
+ f"First context has {len(context1.fg_goals)} goals, "\
140
+ f"but second context has {len(context2.fg_goals)} goals."
141
+ for idx, (fg_goal1, fg_goal2) in enumerate(zip(context1.fg_goals,
142
+ context2.fg_goals)):
143
+ assert_obligation_matches(f"Item {idx} of foreground goals", fg_goal1, fg_goal2)
144
+ assert len(context1.bg_goals) == len(context2.bg_goals), \
145
+ "Number of background goals doesn't match! "\
146
+ f"First context has {len(context1.fg_goals)} goals, "\
147
+ f"but second context has {len(context2.fg_goals)} goals."
148
+ for idx, (bg_goal1, bg_goal2) in enumerate(zip(context1.bg_goals,
149
+ context2.bg_goals)):
150
+ assert_obligation_matches(f"Item {idx} of background goals", bg_goal1, bg_goal2)
151
+ assert len(context1.shelved_goals) == len(context2.shelved_goals), \
152
+ "Number of shelved goals doesn't match! "\
153
+ f"First context has {len(context1.fg_goals)} goals, "\
154
+ f"but second context has {len(context2.fg_goals)} goals."
155
+ for idx, (shelved_goal1, shelved_goal2) in enumerate(zip(context1.shelved_goals,
156
+ context2.shelved_goals)):
157
+ assert_obligation_matches(f"Item {idx} of shelved goals",
158
+ shelved_goal1, shelved_goal2)
159
+ assert len(context1.given_up_goals) == len(context2.given_up_goals), \
160
+ "Number of background goals doesn't match! "\
161
+ f"First context has {len(context1.fg_goals)} goals, "\
162
+ f"but second context has {len(context2.fg_goals)} goals."
163
+ for idx, (given_up_goal1, given_up_goal2) in enumerate(zip(context1.given_up_goals,
164
+ context2.given_up_goals)):
165
+ assert_obligation_matches(f"Item {idx} of given up goals",
166
+ shelved_goal1, shelved_goal2)
167
+
168
+ def ident_in_context(ident: str, context: ProofContext) -> bool:
169
+ def ident_in_obl(obligation: Obligation) -> bool:
170
+ if ident in obligation.goal:
171
+ return True
172
+ return any(ident in hyp for hyp in obligation.hypotheses)
173
+ return any(ident_in_obl(obl) for obl in
174
+ context.all_goals)
175
+
176
+
177
+ class ScrapedTactic(NamedTuple):
178
+ relevant_lemmas: List[str]
179
+ prev_tactics: List[str]
180
+ context: ProofContext
181
+ tactic: str
182
+
183
+ def to_dict(self) -> Dict[str, Any]:
184
+ return {"relevant_lemmas": self.relevant_lemmas,
185
+ "prev_tactics": self.prev_tactics,
186
+ "context": self.context.to_dict(),
187
+ "tactic": self.tactic}
188
+
189
+ @classmethod
190
+ def from_structeq(cls, obj: Any) -> 'ScrapedTactic':
191
+ return ScrapedTactic(obj.relevant_lemmas, obj.prev_tactics,
192
+ ProofContext.from_structeq(obj.context),
193
+ obj.tactic)
194
+
195
+
196
+ class TacticContext:
197
+ relevant_lemmas: Sequence[str]
198
+ prev_tactics: Sequence[str]
199
+ hypotheses: Sequence[str]
200
+ goal: str
201
+
202
+ def __init__(self, relevant_lemmas: Sequence[str], prev_tactics: Sequence[str],
203
+ hypotheses: Sequence[str], goal: str) -> None:
204
+ self.relevant_lemmas = tuple(relevant_lemmas)
205
+ self.prev_tactics = tuple(prev_tactics)
206
+ self.hypotheses = tuple(hypotheses)
207
+ self.goal = goal
208
+ def __eq__(self, other: object) -> bool:
209
+ if not isinstance(other, TacticContext):
210
+ return False
211
+ if self.goal != other.goal:
212
+ return False
213
+ if self.hypotheses != other.hypotheses:
214
+ return False
215
+ if self.relevant_lemmas != other.relevant_lemmas:
216
+ return False
217
+ if self.prev_tactics != other.prev_tactics:
218
+ return False
219
+ return True
220
+ def __hash__(self) -> int:
221
+ return hash((self.relevant_lemmas, self.prev_tactics, self.hypotheses, self.goal))
222
+
223
+
224
+ class FullContext(NamedTuple):
225
+ relevant_lemmas: List[str]
226
+ prev_tactics: List[str]
227
+ obligations: ProofContext
228
+
229
+ def as_tcontext(self) -> TacticContext:
230
+ return TacticContext(self.relevant_lemmas,
231
+ self.prev_tactics,
232
+ self.obligations.focused_hyps,
233
+ self.obligations.focused_goal)
234
+
235
+
236
+ def truncate_tactic_context(context: TacticContext,
237
+ max_term_length: int):
238
+ def truncate_hyp(hyp: str) -> str:
239
+ var_term = hyp.split(":")[0].strip()
240
+ hyp_type = hyp.split(":", 1)[1].strip()
241
+ return f"{var_term} : {hyp_type}"
242
+ return TacticContext(
243
+ [truncate_hyp(lemma) for lemma
244
+ in context.relevant_lemmas],
245
+ context.prev_tactics,
246
+ [truncate_hyp(hyp) for hyp
247
+ in context.hypotheses],
248
+ context.goal[:max_term_length])
249
+
250
+
251
+ ScrapedCommand = Union[ScrapedTactic, str]
252
+
253
+
254
+ def strip_scraped_output(scraped: ScrapedTactic) -> TacticContext:
255
+ relevant_lemmas, prev_tactics, context, tactic = scraped
256
+ if context and context.fg_goals:
257
+ return TacticContext(relevant_lemmas, prev_tactics,
258
+ context.fg_goals[0].hypotheses,
259
+ context.fg_goals[0].goal)
260
+ else:
261
+ return TacticContext(relevant_lemmas, prev_tactics,
262
+ [], "")
263
+
264
+
265
+ def read_tuple(f_handle: TextIO) -> Optional[ScrapedCommand]:
266
+ line = f_handle.readline()
267
+ if line.strip() == "":
268
+ return None
269
+ obj = json.loads(line)
270
+ if isinstance(obj, str):
271
+ return obj
272
+ else:
273
+ return ScrapedTactic(obj["relevant_lemmas"],
274
+ obj["prev_tactics"],
275
+ ProofContext.from_dict(obj["context"]),
276
+ obj["tactic"])
277
+
278
+
279
+ def read_tactic_tuple(f_handle: TextIO) -> Optional[ScrapedTactic]:
280
+ next_tuple = read_tuple(f_handle)
281
+ while(isinstance(next_tuple, str)):
282
+ next_tuple = read_tuple(f_handle)
283
+ return next_tuple