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,236 @@
1
+ #!/usr/bin/env python3
2
+
3
+ import sys
4
+
5
+ root_dir = f"{__file__.split('itp_interface')[0]}"
6
+ if root_dir not in sys.path:
7
+ sys.path.append(root_dir)
8
+ import typing
9
+ import os
10
+ import copy
11
+ import enum
12
+ import logging
13
+ from itp_interface.tools.lean4_sync_executor import Lean4SyncExecutor
14
+ from itp_interface.tools.training_data_format import Goal, TrainingDataFormat
15
+ from itp_interface.tools.lean_parse_utils import LeanLineByLineReader
16
+ from itp_interface.tools.lean_context_helper import Lean3ContextHelper
17
+
18
+ class IntertwinedIterator(object):
19
+ def __init__(self, iterator: typing.Optional[typing.Iterator[str]] = None):
20
+ self.base_iterator = iterator
21
+ self.next_instruction: typing.Optional[str] = None
22
+ self.base_iterator_stopped = iterator is None # if the base iterator is None, then it is stopped
23
+
24
+ def set_next_instruction(self, instruction: str):
25
+ assert self.next_instruction is None, "next_instruction must be None"
26
+ assert instruction is not None, "instruction must not be None"
27
+ self.next_instruction = instruction
28
+
29
+ def __iter__(self):
30
+ return self
31
+
32
+ def __next__(self):
33
+ if self.next_instruction is not None:
34
+ # Return the next instruction if it is set
35
+ next_instruction = self.next_instruction
36
+ self.next_instruction = None
37
+ return next_instruction
38
+ # Otherwise, get the next instruction from the base iterator
39
+ if self.base_iterator is not None and not self.base_iterator_stopped:
40
+ try:
41
+ instruction = next(self.base_iterator)
42
+ return instruction
43
+ except StopIteration:
44
+ self.base_iterator_stopped = True
45
+ raise
46
+ else:
47
+ raise StopIteration()
48
+
49
+ def __exit__(self, exc_type, exc_val, exc_tb):
50
+ if self.base_iterator is not None:
51
+ self.base_iterator.close()
52
+ pass
53
+
54
+ class DynamicProofExecutor(Lean4SyncExecutor):
55
+ class RunState(object):
56
+ def __init__(self):
57
+ self.tatics_ran = []
58
+ self.last_exception : typing.Optional[str] = None
59
+ self.line_tactic_map = {}
60
+ self.line_proof_context_map = {}
61
+ UnfocussedGoalsDescription = "there are unsolved goals"
62
+ ProofFinishedDescription = "no goals"
63
+ NotInProofModeDescription = "not in proof mode"
64
+ GoalDescriptionOrder = {
65
+ UnfocussedGoalsDescription: 2, # This more hard
66
+ ProofFinishedDescription: 1, # This is easier coz proof is almost done
67
+ NotInProofModeDescription: 0 # This is the easiest as the proof is done
68
+ }
69
+ class ContextType(enum.Enum):
70
+ NoContext = 0
71
+ LocalContext = 1
72
+ BestContext = 2
73
+
74
+ def goal_description_compare(description1: str, descripton2: str) -> int:
75
+ """
76
+ Returns 1 if description1 < description2, 0 if description1 == description2, -1 if description1 > description2
77
+ """
78
+ # In case of no description it is much more harder as we have to do a lot of work
79
+ # So None will have same value as unfocussed goals
80
+ order1 = DynamicProofExecutor.GoalDescriptionOrder.get(description1, 2) if description1 is not None else 2
81
+ order2 = DynamicProofExecutor.GoalDescriptionOrder.get(descripton2, 2) if descripton2 is not None else 2
82
+ if order1 < order2:
83
+ return 1
84
+ elif order1 == order2:
85
+ return 0
86
+ else:
87
+ return -1
88
+
89
+
90
+ def __init__(self, coq_context_helper: Lean3ContextHelper, project_folder: str = None, proof_file: str = None, instruction_iter: typing.Optional[str] = None, use_hammer: bool = False, timeout_in_seconds: int = 60, use_human_readable_proof_context: bool = True, suppress_error_log: bool = True, context_type: ContextType = ContextType.NoContext, keep_local_context = False):
91
+ assert proof_file is None or os.path.exists(proof_file), f"Proof file {proof_file} does not exist"
92
+ assert coq_context_helper is not None, "coq_context_helper must not be None"
93
+ self.proof_file = proof_file
94
+ self.context_type = context_type
95
+ self.lean_file_iter = LeanLineByLineReader(proof_file, remove_comments=True, no_strip=True).instruction_step_generator() if proof_file is not None else instruction_iter
96
+ self.tactic_switch_iterator = IntertwinedIterator(self.lean_file_iter)
97
+ self.run_state = DynamicProofExecutor.RunState()
98
+ self.logger = None
99
+ self.lean_context_helper = coq_context_helper
100
+ super().__init__(project_root=project_folder, proof_step_iter=self.tactic_switch_iterator, use_hammer=use_hammer, timeout_in_sec=timeout_in_seconds, use_human_readable_proof_context=use_human_readable_proof_context, suppress_error_log=suppress_error_log, keep_local_context=keep_local_context)
101
+
102
+ def __enter__(self):
103
+ self.lean_context_helper.__enter__()
104
+ return super().__enter__()
105
+
106
+ def __exit__(self, exc_type, exc_val, exc_tb):
107
+ self.lean_context_helper.__exit__(exc_type, exc_val, exc_tb)
108
+ super().__exit__(exc_type, exc_val, exc_tb)
109
+
110
+ def set_logger(self, logger: logging.Logger):
111
+ self.logger = logger
112
+ pass
113
+
114
+ def get_focussed_goals(self) -> typing.List[Goal]:
115
+ if not self.is_in_proof_mode():
116
+ return []
117
+ if self.proof_context is None:
118
+ return []
119
+ return self.lean_context_helper.get_focussed_goals(self)
120
+
121
+ def get_unfocussed_goals(self) -> typing.List[Goal]:
122
+ if not self.is_in_proof_mode():
123
+ return []
124
+ if self.proof_context is None:
125
+ return []
126
+ return self.lean_context_helper.get_unfocussed_goals(self)
127
+
128
+ def get_current_proof_state_as_training_data(self) -> TrainingDataFormat:
129
+ # get the current goal
130
+ if self.needs_cut_close():
131
+ current_goals = self.get_unfocussed_goals()
132
+ training_data_format = TrainingDataFormat(start_goals=current_goals)
133
+ training_data_format.goal_description = DynamicProofExecutor.UnfocussedGoalsDescription
134
+ elif not self.is_in_proof_mode():
135
+ current_goals = self.get_focussed_goals()
136
+ training_data_format = TrainingDataFormat(start_goals=current_goals)
137
+ training_data_format.goal_description = DynamicProofExecutor.NotInProofModeDescription
138
+ elif self.needs_qed():
139
+ current_goals = self.get_focussed_goals()
140
+ assert len(current_goals) == 0, "There should be no goals when needs_qed is True"
141
+ training_data_format = TrainingDataFormat(start_goals=current_goals)
142
+ training_data_format.goal_description = DynamicProofExecutor.ProofFinishedDescription
143
+ else:
144
+ current_goals = self.get_focussed_goals()
145
+ training_data_format = TrainingDataFormat(start_goals=current_goals)
146
+ if len(self.lean_error_messages) > 0:
147
+ training_data_format.goal_description = '\n'.join(self.lean_error_messages)
148
+ else:
149
+ training_data_format.goal_description = None
150
+ return training_data_format
151
+
152
+ def get_all_relevant_thms(self) -> TrainingDataFormat:
153
+ training_data_format = self.get_current_proof_state_as_training_data()
154
+ # self.lean_context_helper.set_all_type_matched_query_result(training_data_format, self, self.logger)
155
+ return training_data_format
156
+
157
+ def get_all_relevant_thms_within_local_context(self) -> TrainingDataFormat:
158
+ training_data_format = self.get_current_proof_state_as_training_data()
159
+ self.lean_context_helper.set_local_thms_dfns(training_data_format, self, self.logger)
160
+ return training_data_format
161
+
162
+ def get_all_relevant_defns(self) -> TrainingDataFormat:
163
+ training_data_format = self.get_current_proof_state_as_training_data()
164
+ self.lean_context_helper.set_relevant_defns_in_training_data_point(training_data_format, self, self.logger)
165
+ return training_data_format
166
+
167
+ def get_all_relevant_defns_and_thms(self, should_print_symbol: bool = False, only_local: bool = False, only_proof_state: bool = False) -> TrainingDataFormat:
168
+ training_data_format = self.get_current_proof_state_as_training_data()
169
+ # self.lean_context_helper.set_relevant_defns_in_training_data_point(training_data_format, self, self.logger)
170
+ # if not only_proof_state:
171
+ # self.lean_context_helper.set_all_type_matched_query_result(training_data_format, self, self.logger)
172
+ return training_data_format
173
+
174
+ def run_cmds(self, cmds: typing.List[str], raise_exception=False) -> typing.Tuple[int, bool]:
175
+ cmd_failed = False
176
+ start_line_num = self.line_num
177
+ for cmd in cmds:
178
+ self.tactic_switch_iterator.set_next_instruction(cmd)
179
+ try:
180
+ self.run_next()
181
+ except Exception:
182
+ self.line_num -= 1
183
+ cmd_failed = True
184
+ if raise_exception:
185
+ raise
186
+ else:
187
+ break
188
+ return start_line_num, not cmd_failed
189
+
190
+ def run_tactics(self, tactics: typing.List[str]) -> typing.Tuple[int, bool]:
191
+ tactic_failed = False
192
+ start_line_num = self.line_num
193
+ self.run_state.line_tactic_map[self.line_num] = len(self.run_state.tatics_ran)
194
+ self.run_state.line_proof_context_map[self.line_num] = copy.deepcopy(self.proof_context)
195
+ for tactic in tactics:
196
+ self.tactic_switch_iterator.set_next_instruction(tactic)
197
+ self.run_next()
198
+ self.run_state.tatics_ran.append(tactic)
199
+ self.run_state.line_proof_context_map[self.line_num] = copy.deepcopy(self.proof_context)
200
+ if len(self.lean_error_messages) > 0:
201
+ current_thm_name = self.get_lemma_name_if_running()
202
+ assert current_thm_name is not None, "current_thm_name must not be None"
203
+ tactic_failed = True
204
+ self.run_state.last_exception = '\n'.join(self.lean_error_messages)
205
+ return start_line_num, not tactic_failed
206
+
207
+ def get_last_exception(self) -> typing.Optional[str]:
208
+ last_exception = self.run_state.last_exception
209
+ self.run_state.last_exception = None
210
+ return last_exception
211
+
212
+ def skip_to_theorem(self, theorem_name: str):
213
+ self._skip_to_theorem(theorem_name)
214
+
215
+ # [TODO] change this for bactracking
216
+ def cancel_tactic_till_line(self, tactic_line_num: int) -> bool:
217
+ assert tactic_line_num <= self.line_num, "tactic_line_num must be <= self.line_num"
218
+ assert tactic_line_num >= 0, "tactic_line_num must be >= 0"
219
+ cancelled_some_tactics = False
220
+ if tactic_line_num < self.line_num:
221
+ self._lines_executed = self._lines_executed[:tactic_line_num]
222
+ state_num = self.run_state.line_tactic_map[tactic_line_num]
223
+ self.run_state.tatics_ran = self.run_state.tatics_ran[:state_num]
224
+ self.proof_context = self.run_state.line_proof_context_map[tactic_line_num]
225
+ line_tactic_map_keys = list(self.run_state.line_tactic_map.keys())
226
+ for line_num in line_tactic_map_keys:
227
+ if line_num >= tactic_line_num:
228
+ del self.run_state.line_tactic_map[line_num]
229
+ line_proof_context_map_keys = list(self.run_state.line_proof_context_map.keys())
230
+ for line_num in line_proof_context_map_keys:
231
+ if line_num >= tactic_line_num:
232
+ del self.run_state.line_proof_context_map[line_num]
233
+ self.line_num = tactic_line_num
234
+ cancelled_some_tactics = self._backtrack_tactic_line(tactic_line_num)
235
+ self._proof_running = self.proof_context is not None
236
+ return cancelled_some_tactics
@@ -0,0 +1,228 @@
1
+ #!/usr/bin/env python3
2
+
3
+ import sys
4
+
5
+ root_dir = f"{__file__.split('itp_interface')[0]}"
6
+ if root_dir not in sys.path:
7
+ sys.path.append(root_dir)
8
+ import typing
9
+ import os
10
+ import copy
11
+ import enum
12
+ import logging
13
+ from itp_interface.tools.lean_cmd_executor import Lean3Executor
14
+ from itp_interface.tools.training_data_format import Goal, TrainingDataFormat
15
+ from itp_interface.tools.lean_parse_utils import LeanLineByLineReader
16
+ from itp_interface.tools.lean_context_helper import Lean3ContextHelper
17
+
18
+ class IntertwinedIterator(object):
19
+ def __init__(self, iterator: typing.Optional[typing.Iterator[str]] = None):
20
+ self.base_iterator = iterator
21
+ self.next_instruction: typing.Optional[str] = None
22
+ self.base_iterator_stopped = iterator is None # if the base iterator is None, then it is stopped
23
+
24
+ def set_next_instruction(self, instruction: str):
25
+ assert self.next_instruction is None, "next_instruction must be None"
26
+ assert instruction is not None, "instruction must not be None"
27
+ self.next_instruction = instruction
28
+
29
+ def __iter__(self):
30
+ return self
31
+
32
+ def __next__(self):
33
+ if self.next_instruction is not None:
34
+ # Return the next instruction if it is set
35
+ next_instruction = self.next_instruction
36
+ self.next_instruction = None
37
+ return next_instruction
38
+ # Otherwise, get the next instruction from the base iterator
39
+ if self.base_iterator is not None and not self.base_iterator_stopped:
40
+ try:
41
+ instruction = next(self.base_iterator)
42
+ return instruction
43
+ except StopIteration:
44
+ self.base_iterator_stopped = True
45
+ raise
46
+ else:
47
+ raise StopIteration()
48
+
49
+ def __exit__(self, exc_type, exc_val, exc_tb):
50
+ if self.base_iterator is not None:
51
+ self.base_iterator.close()
52
+ pass
53
+
54
+ class DynamicProofExecutor(Lean3Executor):
55
+ class RunState(object):
56
+ def __init__(self):
57
+ self.tatics_ran = []
58
+ self.last_exception : typing.Optional[str] = None
59
+ self.line_tactic_map = {}
60
+ self.line_proof_context_map = {}
61
+ UnfocussedGoalsDescription = "there are unsolved goals"
62
+ ProofFinishedDescription = "no goals"
63
+ NotInProofModeDescription = "not in proof mode"
64
+ GoalDescriptionOrder = {
65
+ UnfocussedGoalsDescription: 2, # This more hard
66
+ ProofFinishedDescription: 1, # This is easier coz proof is almost done
67
+ NotInProofModeDescription: 0 # This is the easiest as the proof is done
68
+ }
69
+ class ContextType(enum.Enum):
70
+ NoContext = 0
71
+ LocalContext = 1
72
+ BestContext = 2
73
+
74
+ def goal_description_compare(description1: str, descripton2: str) -> int:
75
+ """
76
+ Returns 1 if description1 < description2, 0 if description1 == description2, -1 if description1 > description2
77
+ """
78
+ # In case of no description it is much more harder as we have to do a lot of work
79
+ # So None will have same value as unfocussed goals
80
+ order1 = DynamicProofExecutor.GoalDescriptionOrder.get(description1, 2) if description1 is not None else 2
81
+ order2 = DynamicProofExecutor.GoalDescriptionOrder.get(descripton2, 2) if descripton2 is not None else 2
82
+ if order1 < order2:
83
+ return 1
84
+ elif order1 == order2:
85
+ return 0
86
+ else:
87
+ return -1
88
+
89
+
90
+ def __init__(self, coq_context_helper: Lean3ContextHelper, project_folder: str = None, proof_file: str = None, instruction_iter: typing.Optional[str] = None, use_hammer: bool = False, timeout_in_seconds: int = 60, use_human_readable_proof_context: bool = True, suppress_error_log: bool = True, context_type: ContextType = ContextType.NoContext, keep_local_context = False):
91
+ assert proof_file is None or os.path.exists(proof_file), f"Proof file {proof_file} does not exist"
92
+ assert coq_context_helper is not None, "coq_context_helper must not be None"
93
+ self.proof_file = proof_file
94
+ self.context_type = context_type
95
+ self.lean_file_iter = LeanLineByLineReader(proof_file).instruction_step_generator() if proof_file is not None else instruction_iter
96
+ self.tactic_switch_iterator = IntertwinedIterator(self.lean_file_iter)
97
+ self.run_state = DynamicProofExecutor.RunState()
98
+ self.logger = None
99
+ self.lean_context_helper = coq_context_helper
100
+ super().__init__(project_root=project_folder, proof_step_iter=self.tactic_switch_iterator, use_hammer=use_hammer, timeout_in_sec=timeout_in_seconds, use_human_readable_proof_context=use_human_readable_proof_context, suppress_error_log=suppress_error_log, keep_local_context=keep_local_context)
101
+
102
+ def __enter__(self):
103
+ self.lean_context_helper.__enter__()
104
+ return super().__enter__()
105
+
106
+ def __exit__(self, exc_type, exc_val, exc_tb):
107
+ self.lean_context_helper.__exit__(exc_type, exc_val, exc_tb)
108
+ super().__exit__(exc_type, exc_val, exc_tb)
109
+
110
+ def set_logger(self, logger: logging.Logger):
111
+ self.logger = logger
112
+ pass
113
+
114
+ def get_focussed_goals(self) -> typing.List[Goal]:
115
+ if not self.is_in_proof_mode():
116
+ return []
117
+ return self.lean_context_helper.get_focussed_goals(self)
118
+
119
+ def get_unfocussed_goals(self) -> typing.List[Goal]:
120
+ if not self.is_in_proof_mode():
121
+ return []
122
+ return self.lean_context_helper.get_unfocussed_goals(self)
123
+
124
+ def get_current_proof_state_as_training_data(self) -> TrainingDataFormat:
125
+ # get the current goal
126
+ if self.needs_cut_close():
127
+ current_goals = self.get_unfocussed_goals()
128
+ training_data_format = TrainingDataFormat(start_goals=current_goals)
129
+ training_data_format.goal_description = DynamicProofExecutor.UnfocussedGoalsDescription
130
+ elif not self.is_in_proof_mode():
131
+ current_goals = self.get_focussed_goals()
132
+ training_data_format = TrainingDataFormat(start_goals=current_goals)
133
+ training_data_format.goal_description = DynamicProofExecutor.NotInProofModeDescription
134
+ elif self.needs_qed():
135
+ current_goals = self.get_focussed_goals()
136
+ assert len(current_goals) == 0, "There should be no goals when needs_qed is True"
137
+ training_data_format = TrainingDataFormat(start_goals=current_goals)
138
+ training_data_format.goal_description = DynamicProofExecutor.ProofFinishedDescription
139
+ else:
140
+ current_goals = self.get_focussed_goals()
141
+ training_data_format = TrainingDataFormat(start_goals=current_goals)
142
+ training_data_format.goal_description = None
143
+ return training_data_format
144
+
145
+ def get_all_relevant_thms(self) -> TrainingDataFormat:
146
+ training_data_format = self.get_current_proof_state_as_training_data()
147
+ self.lean_context_helper.set_all_type_matched_query_result(training_data_format, self, self.logger)
148
+ return training_data_format
149
+
150
+ def get_all_relevant_thms_within_local_context(self) -> TrainingDataFormat:
151
+ training_data_format = self.get_current_proof_state_as_training_data()
152
+ self.lean_context_helper.set_local_thms_dfns(training_data_format, self, self.logger)
153
+ return training_data_format
154
+
155
+ def get_all_relevant_defns(self) -> TrainingDataFormat:
156
+ training_data_format = self.get_current_proof_state_as_training_data()
157
+ self.lean_context_helper.set_relevant_defns_in_training_data_point(training_data_format, self, self.logger)
158
+ return training_data_format
159
+
160
+ def get_all_relevant_defns_and_thms(self, should_print_symbol: bool = False, only_local: bool = False, only_proof_state: bool = False) -> TrainingDataFormat:
161
+ training_data_format = self.get_current_proof_state_as_training_data()
162
+ # self.lean_context_helper.set_relevant_defns_in_training_data_point(training_data_format, self, self.logger)
163
+ if not only_proof_state:
164
+ self.lean_context_helper.set_all_type_matched_query_result(training_data_format, self, self.logger)
165
+ return training_data_format
166
+
167
+ def run_cmds(self, cmds: typing.List[str], raise_exception=False) -> typing.Tuple[int, bool]:
168
+ cmd_failed = False
169
+ start_line_num = self.line_num
170
+ for cmd in cmds:
171
+ self.tactic_switch_iterator.set_next_instruction(cmd)
172
+ try:
173
+ self.run_next()
174
+ except Exception:
175
+ self.line_num -= 1
176
+ cmd_failed = True
177
+ if raise_exception:
178
+ raise
179
+ else:
180
+ break
181
+ return start_line_num, not cmd_failed
182
+
183
+ def run_tactics(self, tactics: typing.List[str]) -> typing.Tuple[int, bool]:
184
+ tactic_failed = False
185
+ start_line_num = self.line_num
186
+ self.run_state.line_tactic_map[self.line_num] = len(self.run_state.tatics_ran)
187
+ self.run_state.line_proof_context_map[self.line_num] = copy.deepcopy(self.proof_context)
188
+ for tactic in tactics:
189
+ self.tactic_switch_iterator.set_next_instruction(tactic)
190
+ self.run_next()
191
+ self.run_state.tatics_ran.append(tactic)
192
+ self.run_state.line_proof_context_map[self.line_num] = copy.deepcopy(self.proof_context)
193
+ if len(self.lean_error_messages) > 0:
194
+ current_thm_name = self.get_lemma_name_if_running()
195
+ assert current_thm_name is not None, "current_thm_name must not be None"
196
+ tactic_failed = True
197
+ self.run_state.last_exception = '\n'.join(self.lean_error_messages)
198
+ return start_line_num, not tactic_failed
199
+
200
+ def get_last_exception(self) -> typing.Optional[str]:
201
+ last_exception = self.run_state.last_exception
202
+ self.run_state.last_exception = None
203
+ return last_exception
204
+
205
+ def skip_to_theorem(self, theorem_name: str):
206
+ self._skip_to_theorem(theorem_name)
207
+
208
+ def cancel_tactic_till_line(self, tactic_line_num: int) -> bool:
209
+ assert tactic_line_num <= self.line_num, "tactic_line_num must be <= self.line_num"
210
+ assert tactic_line_num >= 0, "tactic_line_num must be >= 0"
211
+ cancelled_some_tactics = False
212
+ if tactic_line_num < self.line_num:
213
+ self._lines_executed = self._lines_executed[:tactic_line_num]
214
+ self._file_content = "\n".join(self._lines_executed)
215
+ state_num = self.run_state.line_tactic_map[tactic_line_num]
216
+ self.run_state.tatics_ran = self.run_state.tatics_ran[:state_num]
217
+ self.proof_context = self.run_state.line_proof_context_map[tactic_line_num]
218
+ line_tactic_map_keys = list(self.run_state.line_tactic_map.keys())
219
+ for line_num in line_tactic_map_keys:
220
+ if line_num >= tactic_line_num:
221
+ del self.run_state.line_tactic_map[line_num]
222
+ line_proof_context_map_keys = list(self.run_state.line_proof_context_map.keys())
223
+ for line_num in line_proof_context_map_keys:
224
+ if line_num >= tactic_line_num:
225
+ del self.run_state.line_proof_context_map[line_num]
226
+ self.line_num = tactic_line_num
227
+ cancelled_some_tactics = True
228
+ return cancelled_some_tactics
@@ -0,0 +1,66 @@
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
+
8
+ import logging
9
+ import typing
10
+ from itp_interface.tools.isabelle_executor import IsabelleExecutor
11
+ from itp_interface.tools.training_data_format import Goal, LemmaRefWithScore, LemmaReferences, TrainingDataFormat
12
+ from typing import List
13
+
14
+ class IsabelleContextHelper(object):
15
+ max_relevance_score = 0.95
16
+ def __init__(self, search_executor: IsabelleExecutor, depth : typing.Optional[int] = None, logger: logging.Logger = None) -> None:
17
+ assert search_executor is not None, "Search executor cannot be None"
18
+ assert depth is None or depth >= 0, "Depth should be greater than 0"
19
+ self.search_executor = search_executor
20
+ self.depth = depth if depth is not None else -1
21
+ self.logger = logger if logger is not None else logging.getLogger(__name__)
22
+
23
+ def __enter__(self):
24
+ return self
25
+
26
+ def __exit__(self, exc_type, exc_value, traceback):
27
+ pass
28
+
29
+ def get_focussed_goals(self, isabelle_executor: IsabelleExecutor) -> List[Goal]:
30
+ # Only consider the foreground goals because we can handle the multi-line tactics
31
+ return [Goal(hypotheses=goal.hypotheses, goal=goal.goal) for goal in isabelle_executor.proof_context.fg_goals]
32
+
33
+ def get_unfocussed_goals(self, isabelle_executor: IsabelleExecutor) -> List[Goal]:
34
+ # Only consider the foreground goals because we can handle the multi-line tactics
35
+ other_goals = isabelle_executor.proof_context.bg_goals + isabelle_executor.proof_context.shelved_goals + isabelle_executor.proof_context.given_up_goals
36
+ return [Goal(hypotheses=goal.hypotheses, goal=goal.goal) for goal in other_goals]
37
+
38
+ def get_local_lemmas(self, isabelle_executor: IsabelleExecutor, logger: logging.Logger = None) -> List[typing.Tuple[str, str]]:
39
+ # Search is not supported as of now
40
+ raise Exception("Search is not supported in Isabelle as of now")
41
+
42
+ def set_relevant_defns_in_training_data_point(self, training_data_point: TrainingDataFormat, isabelle_executor: IsabelleExecutor, logger: logging.Logger = None, depth: int = None):
43
+ # Search is not supported as of now
44
+ raise Exception("Search is not supported in Isabelle as of now")
45
+
46
+ def set_all_type_matched_query_result(self, training_data_point: TrainingDataFormat, isabelle_executor: IsabelleExecutor, logger: logging.Logger = None, depth: int = None):
47
+ unique_thms = {defn.lemma_name: idx for idx, defn in enumerate(training_data_point.all_useful_defns_theorems)}
48
+ # query = training_data_point.get_human_readable_serialized_goal(idx, skip_special_tokens=True)
49
+ relevant_thms = isabelle_executor.search_type_matching_defns("") # Here the search simply returns everything
50
+ # Add all lemma references to unique_defns
51
+ for thm in relevant_thms:
52
+ if thm.name not in unique_thms:
53
+ _idx = len(training_data_point.all_useful_defns_theorems)
54
+ unique_thms[thm.name] = _idx
55
+ training_data_point.all_useful_defns_theorems.append(LemmaReferences(_idx, thm.name, thm.dfn))
56
+ for _, goal in enumerate(training_data_point.start_goals):
57
+ goal.possible_useful_theorems_external = [LemmaRefWithScore(unique_thms[thm.name], 1.0) for thm in relevant_thms]
58
+ goal.possible_useful_theorems_local = []
59
+
60
+ def set_useful_defns_theorems_for_training_data_generation(self, current_stmt: str, training_data_point: TrainingDataFormat, isabelle_executor: IsabelleExecutor, logger: logging.Logger = None, depth: int = None, max_search_res: typing.Optional[int] = None):
61
+ # Search is not supported as of now
62
+ raise Exception("Search is not supported in Isabelle as of now")
63
+
64
+ def set_local_thms_dfns(self, training_data_point: TrainingDataFormat, isabelle_executor: IsabelleExecutor, logger: logging.Logger = None):
65
+ # Search is not supported as of now
66
+ raise Exception("Search is not supported in Isabelle as of now")