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
@@ -0,0 +1,459 @@
1
+ #!/usr/bin/env python3
2
+
3
+ import re
4
+
5
+ from typing import Optional, List, Union, Iterable, Tuple, Callable, Dict
6
+ from dataclasses import dataclass
7
+
8
+ from .util import eprint, unwrap
9
+ from .coq_backend import CoqBackend
10
+ from .coq_util import (kill_comments, preprocess_command,
11
+ possibly_starting_proof, ending_proof,
12
+ lemmas_defined_by_stmt, update_sm_stack,
13
+ initial_sm_stack, setup_opam_env,
14
+ summarizeContext, lemma_name_from_statement,
15
+ get_var_term_in_hyp, update_local_lemmas,
16
+ lemmas_from_cmds)
17
+ from .contexts import TacticContext, ProofContext
18
+
19
+ @dataclass
20
+ class FileState:
21
+ in_proof: bool
22
+ tactic_history: Optional['TacticHistory']
23
+
24
+ local_lemmas: List[Tuple[List[Tuple[str, bool]], str, bool]]
25
+ sm_stack: List[Tuple[str, bool]]
26
+ module_changed: bool
27
+ def __init__(self) -> None:
28
+ self.in_proof = False
29
+ self.tactic_history = None
30
+ self.local_lemmas = []
31
+ self.sm_stack = []
32
+ self.module_changed = True
33
+
34
+ @property
35
+ def module_stack(self) -> List[str]:
36
+ return [entry for entry, is_section in self.sm_stack
37
+ if not is_section]
38
+
39
+ @property
40
+ def section_stack(self) -> List[str]:
41
+ return [entry for entry, is_section in self.sm_stack
42
+ if is_section]
43
+
44
+ @property
45
+ def sm_prefix(self) -> str:
46
+ return "".join([sm + "." for sm, is_sec in self.sm_stack])
47
+
48
+ @property
49
+ def module_prefix(self) -> str:
50
+ return "".join([module + "." for module in self.module_stack])
51
+
52
+ def add_potential_local_lemmas(self, cmd: str) -> None:
53
+ self.local_lemmas = update_local_lemmas(self.local_lemmas, self.sm_stack, cmd)
54
+
55
+ def cancel_potential_local_lemmas(self, cmd: str, cmds_before: List[str]) -> None:
56
+ lemmas = lemmas_defined_by_stmt(cmd)
57
+ is_section = "Let" in cmd
58
+ for lemma in lemmas:
59
+ lemma_name = get_var_term_in_hyp(lemma)
60
+ assert (self.sm_stack, lemma, is_section) in self.local_lemmas, \
61
+ f"Couldn't find lemma {(lemma_name, is_section)} in {self.local_lemmas}"
62
+ self.local_lemmas.remove((self.sm_stack, lemma, is_section))
63
+ end_match = re.match(r"End\s+(.*)\.", cmd)
64
+ if end_match:
65
+ self.local_lemmas = lemmas_from_cmds(self.sm_stack[0][0] + ".v", cmds_before)
66
+
67
+ def add_potential_smstack_cmd(self, cmd: str) -> None:
68
+ new_stack = update_sm_stack(self.sm_stack, cmd)
69
+ self.sm_stack = new_stack
70
+
71
+ class CoqAgent:
72
+ backend: CoqBackend
73
+ _file_state: FileState
74
+ verbosity: int
75
+ root_dir: Optional[str]
76
+
77
+ def __init__(self, backend: CoqBackend,
78
+ root_dir: Optional[str] = None,
79
+ verbosity: int = 0,
80
+ use_human_readable: bool = False) -> None:
81
+ self.backend = backend
82
+ self.verbosity = verbosity
83
+ self.root_dir = root_dir
84
+ self.use_human_readable = use_human_readable
85
+ self.init()
86
+ if self.root_dir:
87
+ self.backend.enterDirectory(self.root_dir)
88
+
89
+ # For backwards compatibility
90
+ @property
91
+ def verbose(self) -> int:
92
+ return self.verbosity
93
+ @verbose.setter
94
+ def verbose(self, value: int) -> None:
95
+ self.verbosity = value
96
+ self.backend.verbosity = value
97
+
98
+ def __enter__(self) -> 'CoqAgent':
99
+ return self
100
+
101
+ def __exit__(self, exc_type, exc_val, exc_tb) -> None:
102
+ self.kill()
103
+
104
+ def kill(self) -> None:
105
+ self.backend.close()
106
+
107
+ def update_state(self) -> None:
108
+ self.backend.updateState()
109
+
110
+ def run_stmt_noupdate(self, stmt: str) -> None:
111
+ eprint(f"Running statement without update: {stmt.strip()}", guard=self.verbosity >= 2)
112
+ self._run_stmt_with_f(stmt, self.backend.addStmt_noupdate)
113
+
114
+ def run_stmt(self, stmt: str, timeout: Optional[int] = None,
115
+ force_update_nonfg_goals: bool = False) -> None:
116
+ eprint(f"Running statement: {stmt.strip()}", guard=self.verbosity >= 2)
117
+ self._run_stmt_with_f(
118
+ stmt,
119
+ lambda stmt: self.backend.addStmt(
120
+ stmt, timeout=timeout,
121
+ force_update_nonfg_goals=force_update_nonfg_goals))
122
+
123
+ def _run_stmt_with_f(self, stmt: str, f: Callable) -> None:
124
+ # Kill the comments early so we can recognize comments earlier
125
+ stmt = kill_comments(stmt)
126
+ if stmt.strip() == "":
127
+ return
128
+ for stm in preprocess_command(stmt):
129
+ f(stm)
130
+ if not self._file_state.in_proof:
131
+ self._file_state.add_potential_smstack_cmd(stm)
132
+ self._file_state.add_potential_local_lemmas(stm)
133
+ if possibly_starting_proof(stm) and self.backend.isInProof():
134
+ self._file_state.tactic_history = TacticHistory()
135
+ self._file_state.in_proof = True
136
+
137
+ else:
138
+ if ending_proof(stm):
139
+ self._file_state.in_proof = False
140
+ self._file_state.tactic_history = None
141
+ # Track goal opening/closing
142
+ is_goal_open = re.match(r"\s*(?:\d+\s*:)?\s*[{]\s*", stm)
143
+ is_goal_close = re.match(r"\s*[}]\s*", stm)
144
+ if self._file_state.in_proof:
145
+ assert self._file_state.tactic_history
146
+ assert self.proof_context
147
+ if is_goal_open:
148
+ self._file_state.tactic_history.openSubgoal()
149
+ elif is_goal_close:
150
+ self._file_state.tactic_history.closeSubgoal()
151
+ else:
152
+ self._file_state.tactic_history.addTactic(stm)
153
+ if self.verbosity >= 3:
154
+ eprint(
155
+ f"History is now {self.tactic_history.getFullHistory()}")
156
+ summarizeContext(self.proof_context)
157
+
158
+ def cancel_last_noupdate(self) -> None:
159
+ assert self._file_state.in_proof, "Can't cancel with no update outside proof"
160
+ assert self._file_state.tactic_history
161
+ assert len(self._file_state.tactic_history.getFullHistory()) > 1, \
162
+ "Can't cancel out of a proof with a noupdate call"
163
+ cancelled = self._file_state.tactic_history.getNextCancelled()
164
+ eprint(f"Cancelling command without update: {cancelled}", guard=self.verbosity >= 2)
165
+ self._file_state.tactic_history.removeLast()
166
+ self.backend.cancelLastStmt_noupdate(cancelled)
167
+ if self._file_state.in_proof and possibly_starting_proof(cancelled):
168
+ self._file_state.in_proof = False
169
+ self._file_state.tactic_history = None
170
+
171
+ def cancel_last(self, force_update_nonfg_goals: bool = False) -> None:
172
+ if self._file_state.in_proof:
173
+ assert self._file_state.tactic_history
174
+ cancelled = self._file_state.tactic_history.getNextCancelled()
175
+ eprint(f"Cancelling command {cancelled}", guard=self.verbosity >= 2)
176
+ self._file_state.tactic_history.removeLast()
177
+ else:
178
+ # If we're cancelling vernac, we don't need to know what the command was.
179
+ cancelled = ""
180
+ self.backend.cancelLastStmt(cancelled, force_update_nonfg_goals)
181
+ if self._file_state.in_proof and possibly_starting_proof(cancelled) and \
182
+ not self.backend.isInProof():
183
+ self._file_state.in_proof = False
184
+ self._file_state.tactic_history = None
185
+ elif not self._file_state.in_proof and ending_proof(cancelled):
186
+ self._file_state.in_proof = True
187
+ self._file_state.tactic_history = TacticHistory()
188
+ if self._file_state.in_proof and self.verbosity >= 3:
189
+ assert self.proof_context
190
+ eprint(
191
+ f"History is now {self.tactic_history.getFullHistory()}")
192
+ summarizeContext(self.proof_context)
193
+
194
+ # Returns the commands remaining in the file, the commands that were run,
195
+ # and the proof state before the proof found.
196
+ def run_into_next_proof(self, commands: List[str]) \
197
+ -> Tuple[List[str], List[str], int]:
198
+ assert commands, "Can't run without a non-empty list of commands"
199
+ assert not self.backend.isInProof(), "We're already in a proof"
200
+ commands_iter = iter(commands)
201
+ commands_run = []
202
+ for command in commands_iter:
203
+ state_num_before_command = self.backend.cur_state
204
+ self.run_stmt(command, timeout=120)
205
+ commands_run.append(command)
206
+ if self.backend.isInProof():
207
+ return list(commands_iter), commands_run, state_num_before_command
208
+ return [], commands_run, state_num_before_command
209
+ def finish_proof(self, commands: List[str]) \
210
+ -> Optional[Tuple[List[str], List[str]]]:
211
+ assert self.backend.isInProof(), "We're already out of a proof"
212
+ commands_iter = iter(commands)
213
+ commands_run = []
214
+ for command in commands_iter:
215
+ self.run_stmt(command, timeout=60)
216
+ commands_run.append(command)
217
+ if not self.backend.isInProof():
218
+ return list(commands_iter), commands_run
219
+ return None
220
+ def reset(self) -> None:
221
+ self.backend.resetCommandState()
222
+ self.init()
223
+ def init(self) -> None:
224
+ self._file_state = FileState()
225
+ if self.use_human_readable:
226
+ self.run_stmt("Unset Printing All.")
227
+ else:
228
+ self.run_stmt("Unset Printing Notations.")
229
+ @property
230
+ def goals(self) -> str:
231
+ proof_context = self.backend.getProofContext()
232
+ if proof_context and proof_context.fg_goals:
233
+ return proof_context.fg_goals[0].goal
234
+ return ""
235
+
236
+ @property
237
+ def hypotheses(self) -> List[str]:
238
+ proof_context = self.backend.getProofContext()
239
+ if proof_context and proof_context.fg_goals:
240
+ return list(proof_context.fg_goals[0].hypotheses)
241
+ return []
242
+
243
+ @property
244
+ def prev_tactics(self):
245
+ return self._file_state.tactic_history.getCurrentHistory()
246
+
247
+ @property
248
+ def local_lemmas(self) -> List[str]:
249
+ lemmas = []
250
+ for sm_stack, lemma, _ in self._file_state.local_lemmas:
251
+ lemma_name, lemma_type = lemma.split(":", 1)
252
+ lemma_components = [name for name, is_sec in sm_stack if not is_sec]
253
+ num_common_components = 0
254
+ for lemma_comp, local_comp in zip(lemma_components, self.module_stack):
255
+ if lemma_comp != local_comp:
256
+ break
257
+ num_common_components += 1
258
+
259
+ lemmas.append("".join([comp + "." for comp in lemma_components[num_common_components:]]) + lemma_name + " :" + lemma_type)
260
+ return lemmas
261
+
262
+ @property
263
+ def cur_lemma(self) -> str:
264
+ return self.local_lemmas[-1]
265
+
266
+ @property
267
+ def cur_lemma_name(self) -> str:
268
+ match = re.match(r"\s*([\w'\.]+)\s+:.*", self.cur_lemma)
269
+ assert match, f"Can't match {self.cur_lemma}"
270
+ return match.group(1)
271
+
272
+ @property
273
+ def proof_context(self) -> Optional[ProofContext]:
274
+ return self.backend.getProofContext()
275
+
276
+ @property
277
+ def sm_prefix(self) -> str:
278
+ return self._file_state.sm_prefix
279
+ @property
280
+ def tactic_history(self) -> 'TacticHistory':
281
+ return self._file_state.tactic_history
282
+ # For backwards compatibility
283
+ @property
284
+ def use_hammer(self) -> bool:
285
+ return False
286
+ @property
287
+ def module_stack(self) -> List[str]:
288
+ return self._file_state.module_stack
289
+
290
+ @property
291
+ def section_stack(self) -> List[str]:
292
+ return self._file_state.section_stack
293
+
294
+ @property
295
+ def module_prefix(self) -> str:
296
+ return self._file_state.module_prefix
297
+
298
+ def tactic_context(self, relevant_lemmas) -> TacticContext:
299
+ return TacticContext(relevant_lemmas,
300
+ self.prev_tactics,
301
+ self.hypotheses,
302
+ self.goals)
303
+
304
+ def count_fg_goals(self) -> int:
305
+ if not self.proof_context:
306
+ return 0
307
+ return len(self.proof_context.fg_goals)
308
+
309
+ def check_term(self, term: str) -> str:
310
+ result = self.backend.queryVernac(f"Check {term}.")
311
+ if len(result) == 0:
312
+ raise ValueError(f"Can't check {term}")
313
+ return result[0]
314
+ def locate_ident(self, ident: str) -> str:
315
+ return "\n".join(self.backend.queryVernac(f"Locate {ident}."))
316
+ def interrupt(self) -> None:
317
+ self.backend.interrupt()
318
+ def get_lemmas_about_head(self) -> List[str]:
319
+ proof_context = self.proof_context
320
+ assert proof_context, "Can't run get_lemmas_about_head when not in a proof!"
321
+ head = proof_context.focused_goal.split()[0]
322
+ return self.search_about(head)
323
+ def print_term(self, term: str) -> str:
324
+ result = self.backend.queryVernac(f"Print {term}.")
325
+ if len(result) == 0:
326
+ raise ValueError(f"Can't print {term}")
327
+ return result[0]
328
+ def search_about(self, symbol: str) -> List[str]:
329
+ vernac = symbol.replace("\\", "\\\\") # Replace \ with \\
330
+ vernac = vernac.replace("\"", "\\\"") # Replace " with \"
331
+ vernac = f"\"{vernac}\""
332
+ vernac = f"Search {vernac}."
333
+ vernac = vernac.replace("\\", "\\\\") # Replace \ with \\
334
+ vernac = vernac.replace("\"", "\\\"") # Replace " with \"
335
+ try:
336
+ vals = self.backend.queryVernac(vernac)
337
+ except:
338
+ vals = []
339
+ return vals
340
+ # return self.backend.queryVernac(f"Search {symbol}.")
341
+ def enter_file(self, filename: str) -> None:
342
+ self.backend.setFilename(filename)
343
+ self._file_state.sm_stack = initial_sm_stack(filename)
344
+
345
+
346
+
347
+ @dataclass
348
+ class TacticTree:
349
+ children: List[Union['TacticTree', str]]
350
+ isClosed: bool
351
+
352
+ def __repr__(self) -> str:
353
+ result = "["
354
+ for child in self.children:
355
+ result += repr(child)
356
+ result += ","
357
+ result += "]"
358
+ return result
359
+
360
+
361
+ class TacticHistory:
362
+ __tree: TacticTree
363
+ __cur_subgoal_depth: int
364
+
365
+ def __init__(self) -> None:
366
+ self.__tree = TacticTree([], False)
367
+ self.__cur_subgoal_depth = 0
368
+
369
+ def openSubgoal(self) -> None:
370
+ curTree = self.__tree
371
+ for _ in range(self.__cur_subgoal_depth):
372
+ assert isinstance(curTree.children[-1], TacticTree)
373
+ curTree = curTree.children[-1]
374
+ curTree.children.append(TacticTree([], False))
375
+ self.__cur_subgoal_depth += 1
376
+
377
+
378
+ def closeSubgoal(self) -> None:
379
+ curTree = self.__tree
380
+ for _ in range(self.__cur_subgoal_depth):
381
+ assert isinstance(curTree.children[-1], TacticTree)
382
+ curTree = curTree.children[-1]
383
+ curTree.isClosed = True
384
+ assert self.__cur_subgoal_depth > 0
385
+ self.__cur_subgoal_depth -= 1
386
+
387
+ def curDepth(self) -> int:
388
+ return self.__cur_subgoal_depth
389
+
390
+ def addTactic(self, tactic: str) -> None:
391
+ curTree = self.__tree
392
+ for _ in range(self.__cur_subgoal_depth):
393
+ assert isinstance(curTree.children[-1], TacticTree)
394
+ curTree = curTree.children[-1]
395
+ curTree.children.append(tactic)
396
+
397
+ def removeLast(self) -> None:
398
+ assert len(self.__tree.children) > 0, \
399
+ "Tried to remove from an empty tactic history!"
400
+ curTree = self.__tree
401
+ for _ in range(self.__cur_subgoal_depth):
402
+ assert isinstance(curTree.children[-1], TacticTree)
403
+ curTree = curTree.children[-1]
404
+ if len(curTree.children) == 0:
405
+ parent = self.__tree
406
+ for _ in range(self.__cur_subgoal_depth-1):
407
+ assert isinstance(parent.children[-1], TacticTree)
408
+ parent = parent.children[-1]
409
+ parent.children.pop()
410
+ self.__cur_subgoal_depth -= 1
411
+ else:
412
+ lastChild = curTree.children[-1]
413
+ if isinstance(lastChild, str):
414
+ curTree.children.pop()
415
+ else:
416
+ assert isinstance(lastChild, TacticTree)
417
+ self.__cur_subgoal_depth += 1
418
+ lastChild.isClosed = False
419
+
420
+ def getCurrentHistory(self) -> List[str]:
421
+ def generate() -> Iterable[str]:
422
+ curTree = self.__tree
423
+ for i in range(self.__cur_subgoal_depth+1):
424
+ yield from (child for child in curTree.children
425
+ if isinstance(child, str))
426
+ if i < self.__cur_subgoal_depth:
427
+ assert isinstance(curTree.children[-1], TacticTree)
428
+ curTree = curTree.children[-1]
429
+ return list(generate())
430
+
431
+ def getFullHistory(self) -> List[str]:
432
+ def generate(tree: TacticTree) -> Iterable[str]:
433
+ for child in tree.children:
434
+ if isinstance(child, TacticTree):
435
+ yield "{"
436
+ yield from generate(child)
437
+ if child.isClosed:
438
+ yield "}"
439
+ else:
440
+ yield child
441
+ return list(generate(self.__tree))
442
+
443
+ def getNextCancelled(self) -> str:
444
+ curTree = self.__tree
445
+ assert len(curTree.children) > 0, \
446
+ "Tried to cancel from an empty history"
447
+ for _ in range(self.__cur_subgoal_depth):
448
+ assert isinstance(curTree.children[-1], TacticTree)
449
+ curTree = curTree.children[-1]
450
+
451
+ if len(curTree.children) == 0:
452
+ return "{"
453
+ if isinstance(curTree.children[-1], TacticTree):
454
+ return "}"
455
+ assert isinstance(curTree.children[-1], str), curTree.children[-1]
456
+ return curTree.children[-1]
457
+
458
+ def __str__(self) -> str:
459
+ return f"depth {self.__cur_subgoal_depth}, {repr(self.__tree)}"
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env python3
2
+
3
+ from abc import ABC, abstractmethod
4
+ from dataclasses import dataclass
5
+
6
+ from typing import Optional, List
7
+
8
+ from .contexts import ProofContext, SexpObligation
9
+
10
+ class CoqBackend(ABC):
11
+ verbosity: int
12
+
13
+ @abstractmethod
14
+ def addStmt(self, stmt: str, timeout:Optional[int] = None,
15
+ force_update_nonfg_goals: bool = False) -> None:
16
+ pass
17
+ @abstractmethod
18
+ def addStmt_noupdate(self, stmt: str, timeout:Optional[int] = None) -> None:
19
+ pass
20
+ @abstractmethod
21
+ def updateState(self) -> None:
22
+ pass
23
+ @abstractmethod
24
+ def cancelLastStmt(self, cancelled: str, force_update_nonfg_goals: bool = False) -> None:
25
+ pass
26
+ @abstractmethod
27
+ def cancelLastStmt_noupdate(self, cancelled: str) -> None:
28
+ pass
29
+
30
+ @abstractmethod
31
+ def getProofContext(self) -> Optional[ProofContext]:
32
+ pass
33
+ @abstractmethod
34
+ def getSexpProofContext(self) -> List[SexpObligation]:
35
+ pass
36
+
37
+ @abstractmethod
38
+ def close(self) -> None:
39
+ pass
40
+
41
+ @abstractmethod
42
+ def isInProof(self) -> bool:
43
+ pass
44
+
45
+ @abstractmethod
46
+ def queryVernac(self, vernac: str) -> List[str]:
47
+ pass
48
+ @abstractmethod
49
+ def interrupt(self) -> None:
50
+ pass
51
+
52
+ def enterDirectory(self, root_dir: str) -> None:
53
+ pass
54
+
55
+ @abstractmethod
56
+ def setFilename(self, filename: str) -> None:
57
+ pass
58
+
59
+ @abstractmethod
60
+ def resetCommandState(self) -> None:
61
+ pass
62
+
63
+ @abstractmethod
64
+ def backToState(self, state_num: int) -> None:
65
+ pass
66
+
67
+ @abstractmethod
68
+ def backToState_noupdate(self, state_num: int) -> None:
69
+ pass
70
+
71
+
72
+ # Some Exceptions to throw when various responses come back from coq
73
+ @dataclass
74
+ class CoqException(Exception):
75
+ msg: str
76
+
77
+
78
+ @dataclass
79
+ class AckError(CoqException):
80
+ pass
81
+
82
+
83
+ @dataclass
84
+ class CompletedError(CoqException):
85
+ pass
86
+
87
+
88
+ @dataclass
89
+ class CoqExn(CoqException):
90
+ pass
91
+
92
+
93
+ @dataclass
94
+ class BadResponse(CoqException):
95
+ pass
96
+
97
+
98
+ @dataclass
99
+ class NotInProof(CoqException):
100
+ pass
101
+
102
+
103
+ @dataclass
104
+ class ParseError(CoqException):
105
+ pass
106
+
107
+
108
+ @dataclass
109
+ class LexError(CoqException):
110
+ pass
111
+
112
+
113
+ @dataclass
114
+ class CoqTimeoutError(CoqException):
115
+ pass
116
+
117
+
118
+ @dataclass
119
+ class CoqOverflowError(CoqException):
120
+ pass
121
+
122
+
123
+ @dataclass
124
+ class UnrecognizedError(CoqException):
125
+ pass
126
+
127
+
128
+ @dataclass
129
+ class NoSuchGoalError(CoqException):
130
+ pass
131
+
132
+
133
+ @dataclass
134
+ class CoqAnomaly(CoqException):
135
+ pass